<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://nominatim.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://nominatim.org/" rel="alternate" type="text/html" /><updated>2026-04-19T11:00:50+02:00</updated><id>https://nominatim.org/feed.xml</id><title type="html">Nominatim</title><subtitle>Open source geocoding with OpenStreetMap data</subtitle><entry><title type="html">Photon 1.0.0 released</title><link href="https://nominatim.org/2026/02/11/photon-1.0-released.html" rel="alternate" type="text/html" title="Photon 1.0.0 released" /><published>2026-02-11T00:00:00+01:00</published><updated>2026-02-12T08:53:16+01:00</updated><id>https://nominatim.org/2026/02/11/photon-1.0-released</id><content type="html" xml:base="https://nominatim.org/2026/02/11/photon-1.0-released.html"><![CDATA[<p>We are happy to announce the release of Photon 1.0.0. With its first major
release Photon fully switches to OpenSearch, sees a lot of improvements
in performance and gets some new features on the query side.</p>

<p>This release marks a major milestone in the journey to make Photon a more
efficient and flexible geocoder. Over the last year the code has seen a lot
of modernization. We are moving away from being a simple search front end
to Nominatim, towards becoming a fully featured geocoder where OpenStreetMap
data can be one of many sources.</p>

<p>Here are the most important highlights for this 1.0 release:</p>

<h4 id="streamlined-database-structure">Streamlined database structure</h4>

<p>Photon’s internal database structure has been streamlined. Any metrics that
are not relevant for the geocoding problem have been dropped. We’ve also
dropped all language-specific indexes. Using those has slowed down queries
for very little gain in accuracy.</p>

<p>Altogether the database is now about half the size than a 0.7 database.
A planet needs about 95GB of disk space as of early 2026.</p>

<h4 id="revamped-cli">Revamped CLI</h4>

<p>Over the years Photon has collected quite a few command-line options to tweak
the import and the operation of the server. To bring a bit of order into this
mess, the command-line is now organised in git-style subcommands for import,
update and serving. You can ask for help for each of the commands with the
‘-h’ parameter and will get a more compact response with parameters neatly
organised in groups. Have a look at the new
<a href="https://github.com/komoot/photon/blob/master/docs/usage.md">usage documentation</a>
to learn more about the available commands.</p>

<p>The changes to the CLI are backwards-compatible. When no command is given then
Photon will fall back to the old-style command-line parameters. This will
give everybody some time to adapt their scripts to the new layout. But
don’t wait too long. The old-style parsing will be removed with the next
major version.</p>

<h4 id="new-query-features">New query features</h4>

<p>The <a href="https://github.com/komoot/photon/blob/master/docs/api-v1.md#structured-search">/structured</a>
endpoint, which was optional in previous releases, is now available by default
and can be used together with the database dumps from the export server. Be
aware though that structured search is still somewhat new and little tested.
You are welcome to provide feedback on the Github discussion page.</p>

<p>Version 1.0 newly introduces <a href="https://github.com/komoot/photon/blob/master/docs/categories.md">categories</a>.
These are custom tags that can be added to the import data and can then be used
for filtering queries. This is much more powerful than the current layer
and osm-tag filters. In fact, categories will replace the osm-tag filters
eventually. There are currently special categories included except for a category that represents
the OSM main tag. So this is mainly something you can use right now when
customizing your data to create a specialised search engine.</p>

<p>Finally, there is a new <code class="language-plaintext highlighter-rouge">dedupe</code> parameter which switches off the internal
result deduplication. This can for example be useful when a street is cut
into many sections in OSM and you would like to get all sections instead of
just one representative.</p>

<h4 id="json-import-and-export">JSON import and export</h4>

<p>Version 0.7 already introduced an experimental feature for exporting to and
importing from JSON dumps. With version 1.0 we have finalized the format
and published the <a href="https://github.com/komoot/photon/blob/master/docs/json-dump-format-0.1.0.md">official specification</a>.
JSON dumps of the OSM planet and selected abstracts are available on the
export server. Use them to filter and adapt the data before importing into
Photon, to create databases with custom settings (like additional languages)
or add your own custom data. We are looking forward to hear what you are
doing with this new feature.</p>

<h4 id="server-metrics">Server metrics</h4>

<p>If you are running Photon in a production environment that is monitored by
<a href="https://prometheus.io/">prometheus</a>, then the server is now able to export
internal metrics like number of queries and query duration or memory usage.
The endpoint isn’t enabled by the default, you need to switch it on when
starting the server.</p>

<p>&nbsp;</p>

<p>With this major release, Photon will switch to a more conventional use of the
semantic versioning schema. From now on, patch releases will only bring bug
fixes and dependency updates. Minor releases may contain new features or
change existing ones trying to maintain backwards compatibility. Major
releases are reserved for breaking changes in functionality and for changes
that require a database reimport. We have a few ideas for more major changes
to come, so don’t expect another 12 years to pass before Photon 2.0.</p>

<p>Many thanks to <a href="https://graphhopper.com">Graphhopper</a>, <a href="https://komoot.com">Komoot</a>
and <a href="https://entur.no/">Entur</a> for their continued support of Photon
development, which has made this release possible.</p>]]></content><author><name>Sarah Hoffmann (lonvia)</name></author><summary type="html"><![CDATA[We are happy to announce the release of Photon 1.0.0. With its first major release Photon fully switches to OpenSearch, sees a lot of improvements in performance and gets some new features on the query side.]]></summary></entry><entry><title type="html">New Feature: Entrance information</title><link href="https://nominatim.org/2025/09/13/entrances.html" rel="alternate" type="text/html" title="New Feature: Entrance information" /><published>2025-09-13T00:00:00+02:00</published><updated>2025-09-13T17:42:15+02:00</updated><id>https://nominatim.org/2025/09/13/entrances</id><content type="html" xml:base="https://nominatim.org/2025/09/13/entrances.html"><![CDATA[<p>Nominatim has recently added a new kind of details to its results: entrances.
This post explains what the new feature looks like
and why that is useful.</p>

<p>One of the important applications for geocoding is routing: you give the
router a start and a destination address and then expect it to find a route
in between. Start and destination address are usually sent to a geocoder to
convert them into a set of coordinates. The problem here is that geocoders
and routers have a slightly different view of the world: when a geocoder is
asked for an address, it will return the building that belongs to the address.
The router on the other hand only knows about the road network. So it has
to make an educated guess on which street you actually want to start your
journey. That usually works okay for smaller buildings but when it comes
to larger structures like parks or airports the outcome might not
be what you expect:</p>

<p><img src="/img/2509-routing-chicago-ohare.png" alt="Example routing from Chicago O´Hare airport" /></p>

<p>That’s where entrances come into play. Instead of just returning the center
point of a location, Nominatim now adds the information where the location
can be entered and exited. An entrance is usually much closer to a street
from which the router can start the journey. Here is an example for
<a href="https://nominatim.openstreetmap.org/ui/details.html?osmtype=W&amp;osmid=1353860602&amp;class=aeroway">Comox Airport, British Columbia</a>:</p>

<p><img src="/img/2509-comox-airport.png" alt="Nominatim entry for Comox Airport" /></p>

<p>The blue circle describes the point that Nominatim returns to the router
per default. The red circles are the entrances. Using them, them router can
bring you right to the terminal.</p>

<p>To use the new information, add the
<a href="https://nominatim.org/release-docs/develop/api/Search/#output-details"><code class="language-plaintext highlighter-rouge">entrances=1</code></a>
parameter to your request. If the result has entrance information an
<code class="language-plaintext highlighter-rouge">entrances</code> field with a list of entrances will be added. For each entrance
you get its <a href="https://wiki.openstreetmap.org/wiki/Key:entrance">type</a>, coordinates
and any extra tags that might be available. Please give it a try, especially
if you are writing or using a routing engine, and
<a href="https://github.com/osm-search/Nominatim/discussions">let us know</a>
what kind of information about the entrance is useful for you.</p>

<p>Entrances are widely mapped in OpenStreetMap but not much used so far. That
means that the tags around entrances are not well standardized yet. Making them
more visible and usable through Nominatim hopefully helps getting a wider
discussion going. There are a couple of limitations to the new entrance
feature that need more discussion:</p>

<ul>
  <li>Entrances are only added for OSM ways. Multipolygons or sites that are
mapped as OSM relations are currently ignored because it is unclear where
to look for entrances. There is a proposal for a special <code class="language-plaintext highlighter-rouge">entrance</code> member
for relations but it isn’t widely used yet. Another option would be to look
for entrances on <code class="language-plaintext highlighter-rouge">outer</code> members.</li>
  <li>When dealing with complex locations like shopping malls or airports, then
finding the routing endpoint can become much more complex than just going
to the main door. The right access point may depend on your mode of transport,
the purpose of your visit (departure or arrival) and which parts of the
location you want to access. This might need more fine-grained tagging in
OSM or it might be solved through more complex routing algorithms or
more precise geocoding.</li>
  <li>Entrances are of limited use, when the location you want to get to is part
of a larger complex with special entrances. To reach an address in a gated
community, you need to be routed to the guest entrance of the community,
not the address directly. As before, there is no suitable tagging for
OSM yet, to express such a fact.</li>
</ul>

<p>Entrance output is available in preview on
<a href="https://nominatim.openstreetmap.org">https://nominatim.openstreetmap.org</a>.
Right now only entrances for recently edited data is available. You can
check in the details view of the Nominatim UI, if entrances for a location
are in the database: search for the location, then click on ‘Details’.</p>

<p><em>Many thanks to <a href="https://github.com/emlove">@emlove</a> for implementing this
new feature and to <a href="https://github.com/mtmail">@mtmail</a> for adding entrance
display to the Nominatim UI.</em></p>]]></content><author><name>Marc Tobias (mtmail)</name></author><summary type="html"><![CDATA[Nominatim has recently added a new kind of details to its results: entrances. This post explains what the new feature looks like and why that is useful.]]></summary></entry><entry><title type="html">A New Look for Photon Dumps</title><link href="https://nominatim.org/2025/08/13/photon-exports-renewed.html" rel="alternate" type="text/html" title="A New Look for Photon Dumps" /><published>2025-08-13T00:00:00+02:00</published><updated>2025-08-14T21:24:54+02:00</updated><id>https://nominatim.org/2025/08/13/photon-exports-renewed</id><content type="html" xml:base="https://nominatim.org/2025/08/13/photon-exports-renewed.html"><![CDATA[<p>If you have recently visited the
<a href="https://download1.graphhopper.com/public/">download site for Photon dump files</a>
you may have noticed the new site layout. The site has received a complete overhaul
with new types of dumps, new options for extracts and a nicer presentation.
Read here what has changed.</p>

<h2 id="region-extracts-replace-country-extracts">Region extracts replace country extracts</h2>

<p>The old site used to host one large planet dump and then country extracts in the
<code class="language-plaintext highlighter-rouge">extracts/by-country-code/</code> directory. The new layout rearranges how you can
find extracts: they are now organised by continent with each continent giving
you a list of available country extracts. For you as a user that means that
<strong>all file locations and names have changed</strong>.</p>

<p>Some of the country extracts were really tiny and didn’t make much sense to
have on their own. They have been merged to subregions like the
<a href="https://download1.graphhopper.com/public/north-america/caribbean/index.html">Caribbean islands</a>.
If you need a single country from that subregion, download the JSON dump and
create a Photon database with a country filter. The section on JSON dumps
below explains how this works.</p>

<p>With the new structure, there will now also be extracts for continents on
offer. This will hopefully reduce the hardware requirements on disk space for
those of you that don’t need the entire planet but still want to have
multiple countries.</p>

<h2 id="photon-database-dumps">Photon database dumps</h2>

<p>The database dumps are the unzip-and-go database dumps we have always provided.
These are now available for the planet, all continents and some selected
countries. Do remember that the naming schema has changed slightly.
Database dump file names now start with ‘photon-db-‘ and have the suffix
‘.tar.bz2’.</p>

<p>Usage of these dumps hasn’t changed: download the dump, unpack it and
start Photon.</p>

<p>There are no database dumps anymore for smaller, less popular countries. If
you need a Photon database for those countries, you have to create your own
database from the JSON dumps as described in the next section. This usually
won’t take more than an hour.</p>

<p>With version 0.7 being a transitional release between the old ElasticSearch
backend and the new OpenSearch backend, we publish dumps for both versions.
Please make sure that you download the right dump. Photon 0.7.3 and later
will refuse to start if you use the wrong file.</p>

<h2 id="photon-json-dumps">Photon JSON dumps</h2>

<p>The download site now also allows you to download
<a href="https://github.com/komoot/photon/pull/885">JSON dumps</a> of the Photon data.
These dumps are available for the planet, continents and as country extracts.
JSON dump files start with ‘photon-dump-‘ and have the suffix ‘.jsonl.zst’. They
use the newer <a href="https://en.wikipedia.org/wiki/Zstd">zstd</a> for compression.
Make sure you have the appropriate tool installed.</p>

<p>JSON dumps give you the raw data with which you can build your own Photon
database. Apart from being much smaller than the database dumps, they are
also more versatile: they contain a lot more languages<sup id="fnref:1"><a href="#fn:1" class="footnote" rel="footnote" role="doc-noteref">1</a></sup>, the (almost)
full set of OSM tags as ‘extratags’ and the full
geometries of the objects. Starting from a JSON dump, you can create
localized databases, databases that allow
<a href="https://github.com/komoot/photon/blob/master/docs/structured.md">structured search</a>
and databases that <a href="https://github.com/komoot/photon/pull/823">return the full geometry</a>.</p>

<p>You can also combine smaller extracts into one database. Need a geocoding
server for <a href="https://en.wikipedia.org/wiki/Benelux">Benelux</a>? Download
the extracts for
<a href="https://download1.graphhopper.com/public/europe/belgium/index.html">Belgium</a>,
the <a href="https://download1.graphhopper.com/public/europe/netherlands/index.html">Netherlands</a>
and <a href="https://download1.graphhopper.com/public/europe/luxemburg/index.html">Luxemburg</a>.
Then create the database by concatenating the downloaded files together:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>zstd --stdout -d photon-dump-*.jsonl.zst | java -jar photon.jar -nominatim-import -import-file -
</code></pre></div></div>

<p>Or you can go the other way around. Download the JSON dump for
<a href="https://download1.graphhopper.com/public/europe/index.html">Europe</a>
and then filter for the countries you are interested in during the import:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>zstd --stdout -d photon-dump-europe-0.7-latest.jsonl.zst | java -jar photon.jar -nominatim-import -import-file - -countries be,nl,lu
</code></pre></div></div>
<h3 id="updating-a-database-from-json-dumps">Updating a database from JSON dumps</h3>

<p>Once you have created your Photon database from a JSON dump, you might want
to update the data from time to time using a more recent JSON dump. You can
do this while the old database is up and running. Just make sure you use
a different cluster name and database location while you do the reimport.</p>

<p>In short, the steps are:</p>

<ol>
  <li>Create a directory for the reimport and change into the directory:
    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mkdir /srv/photon-reimport
cd /srv/photon-reimport
</code></pre></div>    </div>
  </li>
  <li>Download the newest extract. Then import it with the same options you used
for the original import, adding the cluster parameter:
    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>zstd --stdout -d photon-dump-*.jsonl.zst | java -jar photon.jar -nominatim-import -import-file - -cluster photon-reimport
</code></pre></div>    </div>
  </li>
  <li>Switch out the original database with the newly imported one
(here we assume the original one is in <code class="language-plaintext highlighter-rouge">/srv/photon</code>):
    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mv /srv/photon/photon-data /srv/photon/photon-data.old
mv photon-data /srv/photon/photon-data
</code></pre></div>    </div>
  </li>
  <li>Restart your Photon server. The newly imported database will now run inside
the original cluster ‘photon’.</li>
</ol>

<h2 id="which-version-do-i-need">Which version do I need?</h2>

<p>The new download site points you now directly to the right dump to match
the Photon version you are using. We will usually provide extracts for one
or two versions back, so you have a bit of time to switch over your setup.
Keep in mind though that only the dumps for the latest version are
guaranteed to receive weekly updates.</p>

<p>You will also always find a <em>master</em> version of the dumps. These are the dumps
created from the current main development branch. (They used to be found in
the ‘experimental’ directory before the restructuring.) They are mainly meant
for testing for developers but you are welcome to try out the latest features
and give us feedback.</p>

<h2 id="try-it-out">Try it out!</h2>

<p>The new layout will hopefully make it easier to find and use the appropriate
data to create your own customized geocoding database. The old file locations
will keep working for another couple of months. So you have some time to
adapt your setups. The old files won’t receive updates though. If you need
it fresh, switch now.</p>

<p><em>Many thanks to <a href="https://graphhopper.com/">Graphhopper</a> who make the Photon
export service possible by generously sponsoring the server.</em></p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1">
      <p>At the time of writing this blog the full list of supported languages is: en, ru, zh, ja, uk, ar, ko, ca, fr, de, fi, be, pl, es, sr, br, he, sv, el, it, th, ga, oc, kn, ur, ms, nl, my, eu, ka, hu, fa, hi, pt, lt, ro, cs. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Sarah Hoffmann (lonvia)</name></author><summary type="html"><![CDATA[If you have recently visited the download site for Photon dump files you may have noticed the new site layout. The site has received a complete overhaul with new types of dumps, new options for extracts and a nicer presentation. Read here what has changed.]]></summary></entry><entry><title type="html">The Road to Nominatim 6</title><link href="https://nominatim.org/2025/07/14/roadmap-nominatim6.html" rel="alternate" type="text/html" title="The Road to Nominatim 6" /><published>2025-07-14T00:00:00+02:00</published><updated>2025-07-14T14:40:53+02:00</updated><id>https://nominatim.org/2025/07/14/roadmap-nominatim6</id><content type="html" xml:base="https://nominatim.org/2025/07/14/roadmap-nominatim6.html"><![CDATA[<p>With version 5 Nominatim has finished the long transition from a simple PHP
frontend to a complex Python application. The change wasn’t just about changing
the programming language but also about making Nominatim more flexible and
easy to use. With that out of the way, the question is what comes next. What
can you expect to see in version 6. The road for the next major version isn’t 
completely paved out yet. This post outlines the major open issues and some
of possible next developments.</p>

<h2 id="auto-completion-and-spelling-correction">Auto-completion and spelling correction</h2>

<p>Search-as-you-type and some leniency towards spelling mistakes are without a
doubt on the top of the list of feature requests for Nominatim.
Search-as-you-type will require to change how the internal search indexes
are built and accessed. Nominatim’s current search model
is not compatible with resolving incomplete queries. When it comes to
spelling correction, we are going to need a good model for estimating the
similarity between a query and the place names in the database. Simple
approaches like Levenshtein distance are difficult for a multi-lingual
database of proper names.</p>

<h2 id="performance-and-index-optimisations">Performance and Index Optimisations</h2>

<p>A full planet database requires now more than 1TB in disk space. This means
that it reaches the limits of what can be done with of-the-shelf hardware. Worse,
the search indexes in our backing PostgreSQL database have grown to a size
where lookups are becoming noticeably slow. It is time to revisit our database
schema, see where tables can be optimised and trimmed down, and consider how
search indexes might be better organised differently to trim them down to what
is relevant for finding the right place.</p>

<h2 id="complex-osm-objects">Complex OSM objects</h2>

<p>Nominatim’s entire processing pipeline is built in a way that it considers one
OSM object at the time. That makes processing and updating easy but it doesn’t
fit well anymore with how data is modelled in OSM. We increasingly see detailed
mapping where multiple OSM objects make up a single real-world object that you
may want to find with search. To accommodate that Nominatim’s processing pipeline
needs to be adapted, so that it can work with places that do not have a 1:1
equivalent in the OSM world. This also means that the output needs to change.
Every result of a search is currently tied to an OSM object. In the future,
it is more likely that you will get an abstract place description with references
to all the relevant OSM objects.</p>

<h2 id="addresses-as-first-class-citizens">Addresses as first-class citizens</h2>

<p><a href="https://community.openstreetmap.org/t/are-addr-tags-for-postal-addresses-only-or-for-locations-in-general/132565/44">Physical addresses</a> are not considered searchable places on its own in Nominatim right now.
Addresses only appear as an attribute of a place and when you search for
an address, you will in fact get all place objects which happen to have the
address assigned. That can cause a lot of issues. For example, the more
detailed the mapping in OSM becomes, the more objects will be returned for
an address search, even though you would have expected exactly one result.
Inversely, there are sometimes OSM objects that have more than one address.
For example, some house entrances come with multiple house numbers. Or there are
houses where the address has changed and which you’d still want to find under
its former address. All this cannot be modelled in Nominatim right now.</p>

<p>To enable a true address search, addresses need to become first class citizens
in Nominatim that can be directly returned as a result. Places would of course
still keep their address attributes but those will only be references to
one or more address they can be found under.</p>

<h2 id="complex-categories">Complex categories</h2>

<p>Every place in Nominatim currently gets a simple category which is derived
from the main tag of its OSM object. This puts some limitation on what kind
of category search Nominatim can do. For example, you cannot search for a
“vegan restaurant” or a “catholic church” because the main tags only
classify “restaurants” and “places of worship of any religion”.</p>

<p>Another issue with the current classification system is that it is bad at
handling OSM objects with multiple functions (say, a hotel with an attached
restaurant mapped with the same POI node). Nominatim will simply duplicate
the OSM object in its database to cover both functions. That unnecessarily
blows up the database size.</p>

<p>So it is time to get a way from using OSM tags directly and introduce the
ability to define custom classifications. The idea here is to have hierarchical
categories (e.g. food.restaurant.vegan) and allow to assign an arbitrary number
of categories to each object.</p>

<hr />

<p>These are the main open issues right now. If one of them sparks your interest
and you’d like to help moving them along, don’t hesitate to get in touch.
The <a href="https://github.com/osm-search/Nominatim/discussions">discussion section on Github</a>
and the <a href="https://community.openstreetmap.org/c/general/38/none">OSM community forum</a>
are great places to start a discussion.</p>]]></content><author><name>Sarah Hoffmann (lonvia)</name></author><summary type="html"><![CDATA[With version 5 Nominatim has finished the long transition from a simple PHP frontend to a complex Python application. The change wasn’t just about changing the programming language but also about making Nominatim more flexible and easy to use. With that out of the way, the question is what comes next. What can you expect to see in version 6. The road for the next major version isn’t completely paved out yet. This post outlines the major open issues and some of possible next developments.]]></summary></entry><entry><title type="html">Nominatim 5.0.0 released</title><link href="https://nominatim.org/2025/02/07/release-50.html" rel="alternate" type="text/html" title="Nominatim 5.0.0 released" /><published>2025-02-07T00:00:00+01:00</published><updated>2025-02-07T15:54:42+01:00</updated><id>https://nominatim.org/2025/02/07/release-50</id><content type="html" xml:base="https://nominatim.org/2025/02/07/release-50.html"><![CDATA[<p>We are happy to announce the release of Nominatim 5.0.0. This major release
marks the end of a 4-year journey to modernize and modularize the Nominatim
codebase in order to make it easier to use and maintain.</p>

<p>This release finishes the mutation of Nominatim into a Python package. The
PHP frontend, bundled osm2pgsql and cmake build scripts have now been removed
for good. If you are still using one of these features, then you should
update your software to Nominatim 4.5 and then move to the new Python frontend
and pip installation. Once done, you can easily update to the latest
version 5 release.</p>

<p>Also in this release, the osm2pgsql import style configuration has been
largely be rewritten. If you are using one of the built-in styles, this
will not make much of a difference. If you are maintaining your own custom
style, however, this should become much easier. Most notable, it is now
possible to start with one of the existing styles and add your customizations
on top. That should make it much easier to keep in sync with the latest
changes in Nominatim. Have a look at the
<a href="https://nominatim.org/release-docs/latest/customize/Import-Styles/">updated documentation</a>
for details. The new implementation is largely backwards compatible,
so your old scripts will keep working for now.</p>

<p>With the new osm2pgsql style implementation comes the ability to use
Nominatim together with <a href="https://osm2pgsql.org/themepark/">osm2pgsql-themepark</a>.
This comes in handy when you want to combine Nominatim with other osm2pgsql
flex styles in order to host OSM data for different purposes in the same
database. Check out the updated
<a href="https://nominatim.org/tutorials/running-nomintim-and-rendering-together.html">cookbook about how to run Nominatim with osm-carto</a>
to learn how to use this feature.</p>

<p>Finally, Nominatim has a new hook for adding pre-processing functions
for incoming search queries, allowing to apply custom filtering. The first
filter to use this new functionality breaks up Japanese addresses into their
parts.</p>

<p>A full list of changes can as always be found in the
<a href="https://github.com/osm-search/Nominatim/blob/v5.0.0/ChangeLog">Changelog</a>.</p>]]></content><author><name>Sarah Hoffmann (lonvia)</name></author><summary type="html"><![CDATA[We are happy to announce the release of Nominatim 5.0.0. This major release marks the end of a 4-year journey to modernize and modularize the Nominatim codebase in order to make it easier to use and maintain.]]></summary></entry><entry><title type="html">Joining the Sovereign Tech Fellowship Programme</title><link href="https://nominatim.org/2025/02/06/sovereign-tech-fellowship.html" rel="alternate" type="text/html" title="Joining the Sovereign Tech Fellowship Programme" /><published>2025-02-06T00:00:00+01:00</published><updated>2025-02-06T14:33:15+01:00</updated><id>https://nominatim.org/2025/02/06/sovereign-tech-fellowship</id><content type="html" xml:base="https://nominatim.org/2025/02/06/sovereign-tech-fellowship.html"><![CDATA[<p>I’m happy to announce that I have been selected for the one-year pilot
of the <a href="https://www.sovereign.tech/news/meet-the-sovereign-tech-fellows">Sovereign Tech Fellowship programme</a>
of the Sovereign Tech Agency.
The fellowship programme will support maintenance of Nominatim, Photon, osm2pgsql
and pyosmium over the next year.</p>

<p>Participating in an open-source software project like Nominatim or Photon
is not just about the implementation of fancy new features or clever
algorithms to improve performance or the user experience. A lot of work
happens quietly behind the scene: user questions need to be answered and bug
reports followed up. Dependent software needs to be monitored and updated
as necessary. The own code needs to be reviewed and polished regularly
to prevent it from ageing and slowly falling apart.
CI pipelines are a great tool for a maintainer but they do break with an
astonishing regularity and therefore need regular attention. Not to
mention that a CI is useless without a set of well-maintained tests.</p>

<p>With its new Sovereign Tech Fellowship programme, the Sovereign Tech Agency
recognises the importance of this maintenance work for the general functioning
of the open source ecosystem. 
The programme will financially support my day-to-day tasks of software maintainership:
responding to issues on Github, reviewing and merging pull requests, fixing
reported bugs and addressing security issues, improving documentation and tests,
preparing releases etc. On top of that there are some other not so glorious
maintenance tasks that are planned for this year.</p>

<p>Nominatim’s import module relies on a datrie library, which has been
unmaintained for some years and <a href="https://github.com/osm-search/Nominatim/issues/3534">no longer compiles</a>
with the newest GCC compilers. We need to find a solution to that by either
switching to a new library or taking over maintenance. A similar fate is likely
in store for the testing library <a href="https://github.com/behave/behave">behave</a>.
With the latest stable release from 2018 and very few activity since, it is
unclear how long it will remain functional with new versions of Python.</p>

<p>Photon has seen the move to OpenSearch 8 last year. This transition is far
from finished. For example, there is still no proper support for using an
external instance of OpenSearch instead of the embedded one. And
ElasticSearch/OpenSearch itself has also seen some improvements in the last
three versions we have skipped. It’s well worth investigating how geocoding can
benefit from them.</p>

<p>These will, of course, not be the only things happening in 2025 for Nominatim and
Photon. There will also be shiny new features and I have some ideas for
improving performance and how to better handle the increasing complexity of
OSM data. However, none of this can really happen, if the basis isn’t there and
the general maintenance isn’t cared for.</p>

<p>Many thanks to the Sovereign Tech Agency for this great opportunity and the
recognition of the importance of maintenance work for software.</p>

<p><em>If you want to support development and maintenance of Nominatim, too, please
consider becoming a <a href="https://github.com/sponsors/lonvia">Github sponsor</a>.</em></p>]]></content><author><name>Sarah Hoffmann (lonvia)</name></author><summary type="html"><![CDATA[I’m happy to announce that I have been selected for the one-year pilot of the Sovereign Tech Fellowship programme of the Sovereign Tech Agency. The fellowship programme will support maintenance of Nominatim, Photon, osm2pgsql and pyosmium over the next year.]]></summary></entry><entry><title type="html">Nominatim 4.5.0</title><link href="https://nominatim.org/2024/09/12/release-450.html" rel="alternate" type="text/html" title="Nominatim 4.5.0" /><published>2024-09-12T00:00:00+02:00</published><updated>2024-09-18T12:06:22+02:00</updated><id>https://nominatim.org/2024/09/12/release-450</id><content type="html" xml:base="https://nominatim.org/2024/09/12/release-450.html"><![CDATA[<p>We are happy to announce the release of version 4.5.0 of Nominatim.
This is a transition release, helping you to prepare the move
towards the upcoming <a href="/2023/12/19/roadmap-nominatim5.html">Nominatim 5.0</a>,
which will be a pure Python application.</p>

<p>The most important change in this release is that Nominatim is now available
via <a href="https://pypi.org/project/nominatim-db/">pypi.org</a> and can be installed
with a simple <code class="language-plaintext highlighter-rouge">pip install nominatim-db nominatim-api</code>. We had to change the
package structure slightly to make this possible, splitting the <code class="language-plaintext highlighter-rouge">nominatim</code>
package into two parts: <code class="language-plaintext highlighter-rouge">nominatim-db</code> (the database importer) and
<code class="language-plaintext highlighter-rouge">nominatim-api</code> (the search frontend). Please carefully read the
<a href="https://nominatim.org/release-docs/latest/admin/Migration/#440-450">migration guide</a>
about how this change might affect you. The old way of installing with
CMake is still available in this release. So you can take your time updating
to the new installation method. Nominatim 5 will then only be installable via
pip.</p>

<p>Other new features in this release include the possibility to customize
API output for web installations, a streamlined file format for wiki
importances, improvements to ordering results according to how well 
address parts match and a more consistent assignment of countries in disputed areas.
A more complete list of changes can be found in the
<a href="https://github.com/osm-search/Nominatim/blob/4.5.x/ChangeLog">Changelog</a>.</p>

<p>This is the last release to have support for PostgreSQL 9.6 and 10 and
Postgis 2.x. These version have long gone out of support, so it is time
to drop them.</p>

<p>Furthermore, the following Nominatim features will be removed with the
next release:</p>

<ul>
  <li><a href="https://nominatim.org/release-docs/latest/admin/Deployment-PHP/">PHP frontend</a>.
Please switch to the newer <a href="https://nominatim.org/release-docs/latest/admin/Deployment-Python/">Python frontend</a> instead.</li>
  <li><a href="https://nominatim.org/release-docs/latest/customize/Tokenizers/#legacy-tokenizer">Legacy tokenizer</a>.
If your database still uses this tokenizer, you need to reimport using
the <a href="https://nominatim.org/release-docs/latest/customize/Tokenizers/#icu-tokenizer">ICU tokenizer</a>.</li>
  <li>Installation via CMake. Switch to using <code class="language-plaintext highlighter-rouge">pip install</code> instead.</li>
  <li>Bundeling of osm2pgsql. Use a stock osm2pgsql version 1.8 or higher.
Ubuntu 24.04 and Debian &gt;= 11 have appropriate packages. The packages of
older Ubuntu version are too old and you need to compile a newer osm2pgsql
from source.</li>
</ul>]]></content><author><name>Sarah Hoffmann (lonvia)</name></author><summary type="html"><![CDATA[We are happy to announce the release of version 4.5.0 of Nominatim. This is a transition release, helping you to prepare the move towards the upcoming Nominatim 5.0, which will be a pure Python application.]]></summary></entry><entry><title type="html">New Wikimedia-based scoring file available</title><link href="https://nominatim.org/2024/08/07/wikimedia-file.html" rel="alternate" type="text/html" title="New Wikimedia-based scoring file available" /><published>2024-08-07T00:00:00+02:00</published><updated>2024-08-07T12:09:03+02:00</updated><id>https://nominatim.org/2024/08/07/wikimedia-file</id><content type="html" xml:base="https://nominatim.org/2024/08/07/wikimedia-file.html"><![CDATA[<p>Nominatim tries to assign each place in its database a base “importance”
score number to answer the question “If 30 places have the name ‘Berlin’,
which one is the most likely a user meant?” For Berlin that’s the one in
Germany. We humans say “of course” but that’s not how computers work.</p>

<p>Looking at a places’ type (city vs village), size, OpenStreetMap tags,
population all have disadvantages, usually simply lacking a good data
source for the whole world. We even tried looking at how often tiles
were loaded for regions on tile.openstreetmap.org (Google Summer of Code
project 2022) but that’s not granular enough.</p>

<p>Wikipedia turned out to be a good approximation or “importance”. Basically
if a place has a Wikipedia article, and how many other articles link
to it? And we can turn that into a single number.</p>

<p>As early as 2014 (version 2.2) Nominatim had the option to imported
additional scoring files. Those files were created from Wikipedia
metadata. First using their pageviews, later based on links between
Wikipedia article, links between Wikipedia projects (languages), then
including redirects and now even taking Wikidata into account.</p>

<p>The scoring file contains language code, Wikipedia article
title, Wikidata id, redirect titles and a score number for 17 million
titles. Nominatim matches the title against place names.</p>

<p>Many places in OpenStreetMap data already have the
<a href="https://wiki.openstreetmap.org/wiki/Key:wikipedia">wikipedia</a>
and <a href="https://wiki.openstreetmap.org/wiki/Key:wikidata">wikidata</a>
tags. That’s helpful for us, please continue to add those. On Wikipedia
many places
<a href="https://en.wikipedia.org/wiki/Wikipedia:How_to_add_geocodes_to_articles">contain coordinates</a>.
Again that’s helpful: we can determine if an article is about a
place instead of for example a movie title, band name or
<a href="https://en.wikipedia.org/wiki/Krapfen_(doughnut)">pastry</a>.</p>

<p>Over the years creating the scoring file became unmaintained while
the data to process grew massively. Just English Wikipedia contains
900 million links! The metadata for the 40 largest languages
is 40GB compressed (about 90% compression rate). We had a major rewrite
of the processing during the Google Summer of Code 2019 project
but it loaded all data into a database. Processing took several days
each time, was error-prone and we rarely ran it.</p>

<p>In the last year we got the processing down to a manageable 12 hours.
This will allow us to publish updated importance file much more frequently.
We have also streamlined the format and publish it now as a simple CSV file.
If you have other uses besides geocoding in mind, you are welcome to
use it. You can read the full details about how the file is made and
what it contains at
<a href="https://github.com/osm-search/wikipedia-wikidata">https://github.com/osm-search/wikipedia-wikidata#readme</a>.
The updated file can be downloaded at
<a href="https://nominatim.org/data/wikimedia-importance.csv.gz">https://nominatim.org/data/wikimedia-importance.csv.gz</a>.</p>

<p>Nominatim itself will receive full support for reading then new CSV file
format in the upcoming version 4.5.</p>]]></content><author><name>Marc Tobias (mtmail)</name></author><summary type="html"><![CDATA[Nominatim tries to assign each place in its database a base “importance” score number to answer the question “If 30 places have the name ‘Berlin’, which one is the most likely a user meant?” For Berlin that’s the one in Germany. We humans say “of course” but that’s not how computers work.]]></summary></entry><entry><title type="html">Nominatim 4.4.0 and Photon 0.5.0 released</title><link href="https://nominatim.org/2024/03/08/release-440.html" rel="alternate" type="text/html" title="Nominatim 4.4.0 and Photon 0.5.0 released" /><published>2024-03-08T00:00:00+01:00</published><updated>2024-03-08T18:07:57+01:00</updated><id>https://nominatim.org/2024/03/08/release-440</id><content type="html" xml:base="https://nominatim.org/2024/03/08/release-440.html"><![CDATA[<p>We are happy to announce that this week new versions of Nominatim and its
ElasticSearch frontend Photon have been released.</p>

<p>Version 4.4.0 of Nominatim brings many bug fixes and performance improvements
for the new Python frontend, which was introduced in version 4.3.0. It can
now be considered stable and has become the frontend recommended to be used
for new installations. You find <a href="https://nominatim.org/release-docs/latest/admin/Deployment-Python/">deployment guides</a>
for the Python frontend in the documentation. There is no need to reimport
your existing database. It will work perfectly fine with the new frontend.</p>

<p>A new feature in this release is experimental support for exporting a
Nominatim database to SQLite. The SQLite database can then be used with the
new Python frontend or when using the Nominatim library. For more information
about this, watch the talk at <a href="https://www.youtube.com/watch?v=dBLuSZ4TOfw">SotM-EU 2023</a>
or read about it in the <a href="https://nominatim.org/2023/10/25/sqlite-reverse.html">SQLite blog posts</a>.</p>

<p>Version 0.5.0 of Photon brings back the ability to update a Photon database
from a Nominatim database. The new mechanism is better decoupled from the
Nominatim update process, making it easier to handle. A long-standing issue
around UIDs of house numbers documents has been fixed so that all data should
now be correctly handled. This version also introduces a new API endpoint
<code class="language-plaintext highlighter-rouge">/nominatim-update/status</code> which allows scripts to check if an update is
already in progress. To find out if your Photon database is indeed up-to-date
use the newlt added <code class="language-plaintext highlighter-rouge">/status</code> endpoint.</p>

<p>If you do not use the update facility, then the Photon release remains
compatible with version 0.4 database dumps including the ones available on
<a href="https://download1.graphhopper.com/public">https://download1.graphhopper.com/public</a>.
If you want to run updates, you need to create a fresh import using this
release. Please be aware that updates now require an additional preparation
step. Consult the README for more information.</p>]]></content><author><name>Sarah Hoffmann (lonvia)</name></author><summary type="html"><![CDATA[We are happy to announce that this week new versions of Nominatim and its ElasticSearch frontend Photon have been released.]]></summary></entry><entry><title type="html">The Roadmap to Nominatim 5</title><link href="https://nominatim.org/2023/12/19/roadmap-nominatim5.html" rel="alternate" type="text/html" title="The Roadmap to Nominatim 5" /><published>2023-12-19T00:00:00+01:00</published><updated>2023-12-19T16:41:33+01:00</updated><id>https://nominatim.org/2023/12/19/roadmap-nominatim5</id><content type="html" xml:base="https://nominatim.org/2023/12/19/roadmap-nominatim5.html"><![CDATA[<p>The version 4.x series of Nominatim has seen some major changes to the code.
Both, the database import and the search frontend have received major
updates and refreshed algorithms. As we go into 2024, it is time to
consolidate and regroup. The goal is that the next version 5 is leaner
and even more easy to use than previous versions. This requires some
changes to how Nominatim is installed and used. Learn in this post how
this affects you and how you can upgrade.</p>

<h2 id="changes-in-nominatim-5">Changes in Nominatim 5</h2>

<p>To make the rewrite of backend and frontend as smooth as possible for the
users, there is a lot of code in Nominatim right now, which still supports
much of the behaviour from before the rewrite. Getting rid of this code
not only makes Nominatim easier to maintain but also opens up the possibility
to convert it into a pure Python package.</p>

<h3 id="removal-of-php">Removal of PHP</h3>

<p>With the frontend renovatations finished, all major parts of Nominatim are
now written in Python, it is time to remove the last traces of PHP code.
With version 5 the PHP frontend code will be completely removed.</p>

<h3 id="unbundling-osm2pgsql">Unbundling osm2pgsql</h3>

<p>For many years Nominatim has shipped its own version of osm2pgsql. This was
because it didn’t use the standard output of osm2pgsql but came with its
very own gazetteer output. Nominatim and the gazetteer code needed to be
in sync to function optimally. About a year ago, Nominatim has
<a href="/2022/11/28/towards-flex.html">switched to osm2pgsql’s flex output</a>.
All customization can now be kept in simple Lua configuarion files within
Nominatim and used with an off-the-shelf version of osm2pgsql.
Version 5 will remove the ability to work with the former gazetter output
and require that you install osm2pgsql externally. This should not be a
big issue as osm2pgsql is well supported by all major distributions.</p>

<h3 id="removing-the-legacy-tokenizer">Removing the legacy tokenizer</h3>

<p>The final part to be removed in version 5 is the legacy tokenizer. The code
is a reminder from the rewrite of the import backend. It is far less
powerful than the ICU tokenizer, which has been the default since many versions.
The legacy tokenizer also requires a special PostgreSQL plugin which is
difficult to compile and run. Removing the legacy tokenizer will allow to
simplify the code in many places.</p>

<h3 id="changing-from-cmake-to-pip">Changing from CMake to pip</h3>

<p>With osm2pgsql and PHP code removed, Nominatim becomes an almost pure Python
application. As such is will be possible to get rid of the heavy CMake
build system and switch to Python installation methods. Installing Nominatim
will be become as easy as <code class="language-plaintext highlighter-rouge">pip install nominatim</code> in version 5.</p>

<p>Without C code to compile, there is also nothing in the installation
process anymore that prevents Nominatim from being installed on
Windows and MacOS.</p>

<h2 id="timeline">Timeline</h2>

<p>The list of changes might look large and intimidating but you don’t need to
worry. All this will not happen suddenly and there will be ample time for
you to adapt your installation. Here is the timeline of planned versions
for next year:</p>

<ul>
  <li>
    <p><strong>4.4.x</strong> - <em>Q1 2024</em></p>

    <p>This version will remove the experimental flag from the Python frontend
and make it the default choice. If you have an existing installation,
you should change from PHP to Python at this point.</p>
  </li>
  <li>
    <p><strong>4.5.x</strong> - <em>Q3 2024</em></p>

    <p>This version deprecates the bundled osm2pgsql, the legacy tokenizer and
the PHP frontend. It introduces the new installation method via pip
while still offering the old CMake method of installation in parallel.
The pip installation will also make it easy to use
<a href="https://nominatim.org/release-docs/develop/library/Getting-Started/">Nominatim as a Library</a>.
If you run automated installation scripts for your production machines,
you should update them with this version.</p>
  </li>
  <li>
    <p><strong>5.0.x</strong> - <em>Q4 2024</em></p>

    <p>The first major version of Nominatim 5 has all deprecated modules removed
and can only be installed via pip.</p>
  </li>
</ul>]]></content><author><name>Sarah Hoffmann (lonvia)</name></author><summary type="html"><![CDATA[The version 4.x series of Nominatim has seen some major changes to the code. Both, the database import and the search frontend have received major updates and refreshed algorithms. As we go into 2024, it is time to consolidate and regroup. The goal is that the next version 5 is leaner and even more easy to use than previous versions. This requires some changes to how Nominatim is installed and used. Learn in this post how this affects you and how you can upgrade.]]></summary></entry></feed>