Pelias is a modular open-source geocoder using Elasticsearch.
See the code
Pelias is a geocoder powered completely by open data, available freely to everyone.
Local Installation · Cloud Webservice · Documentation · Community Chat
A modular, open-source geocoder built on top of Elasticsearch for fast and accurate global search.
Geocoding is the process of taking input text, such as an address or the name of a place, and returning a latitude/longitude location on the Earth's surface for that place.

Reverse geocoding is the opposite: returning a list of places near a given latitude/longitude point.

Pelias is maintained and developed by Geocode Earth, with a community of business and individual contributors. The project began as part of Mapzen and has been maintained by the same core team since 2013.
Magic! (Just kidding) Like any geocoder, Pelias combines full text search techniques with knowledge of geography to quickly search over many millions of records, each representing some sort of location on Earth.
The Pelias architecture has three main components and several smaller pieces.

The importers filter, normalize, and ingest geographic datasets into the Pelias database. Currently there are six officially supported importers:
We are always discussing supporting additional datasets. Pelias users can also write their own importers, for example to import proprietary data into your own instance of Pelias.
The underlying datastore that does most of the query heavy-lifting and powers our search results. We use Elasticsearch. Currently versions 7 and 8 are supported.
We've built a tool called pelias-schema that sets up Elasticsearch indices properly for Pelias.
This is where the actual geocoding process happens, and includes the components that users interact with when performing geocoding queries. The services are:
These are software projects that are not used directly but are used by other components of Pelias.
There are lots of these, but here are some important ones:
pelias.json. This package provides a library for reading, validating, and working with this configuration. It is used by almost every other Pelias componentFinally, while not part of Pelias proper, we have built several useful tools for working with and testing Pelias
Notable examples include:
The main documentation lives in the pelias/documentation repository.
Additionally, the README file in each of the component repositories listed above provides more detail on that piece.
$ curl -s "search.mapzen.com/v1/reverse?size=1&point.lat=40.74358294846026&point.lon=-73.99047374725342&api_key={YOUR_API_KEY}" | json
{
"geocoding": {
"attribution": "https://search.mapzen.com/v1/attribution",
"engine": {
"author": "Mapzen",
"name": "Pelias",
"version": "1.0"
},
"query": {
"boundary.circle.lat": 40.74358294846026,
"boundary.circle.lon": -73.99047374725342,
"boundary.circle.radius": 500,
"point.lat": 40.74358294846026,
"point.lon": -73.99047374725342,
"private": false,
"querySize": 1,
"size": 1
},
"timestamp": 1460736907438,
"version": "0.1"
},
"type": "FeatureCollection",
"features": [
{
"geometry": {
"coordinates": [
-73.99051,
40.74361
],
"type": "Point"
},
"properties": {
"borough": "Manhattan",
"borough_gid": "whosonfirst:borough:421205771",
"confidence": 0.9,
"country": "United States",
"country_a": "USA",
"country_gid": "whosonfirst:country:85633793",
"county": "New York County",
"county_gid": "whosonfirst:county:102081863",
"distance": 0.004,
"gid": "geonames:venue:9851011",
"id": "9851011",
"label": "Arlington, Manhattan, NY, USA",
"layer": "venue",
"locality": "New York",
"locality_gid": "whosonfirst:locality:85977539",
"name": "Arlington",
"neighbourhood": "Flatiron District",
"neighbourhood_gid": "whosonfirst:neighbourhood:85869245",
"region": "New York",
"region_a": "NY",
"region_gid": "whosonfirst:region:85688543",
"source": "geonames"
},
"type": "Feature"
}
],
"bbox": [
-73.99051,
40.74361,
-73.99051,
40.74361
]
}
To try out Pelias quickly, use our Docker setup. It uses Docker and docker-compose to allow you to quickly set up a Pelias instance for a small area (by default Portland, Oregon) in under 30 minutes.
Pelias itself does not have API keys and is software you can run freely yourself.
However, for those looking for a hosted option, you can sign up for an API key at Geocode Earth. Geocode Earth is a geocoding service with Pelias at its core, created by the maintainers of Pelias. Combined with our experience hosting Mapzen Search, we've been running geocoding services since 2014.
Discounts and free plans are available for academic and open-source software projects.
Pelias itself (the import pipelines and API) is written in Node.js, which makes it highly accessible for other developers and performant under heavy I/O. It aims to be modular and is distributed across a number of Node packages, each with its own repository under the Pelias GitHub organization.
For a select few components that have performance requirements that Node.js cannot meet, we prefer to write things in Go. A good example of this is the pbf2json tool that quickly converts OSM PBF files to JSON for our OSM importer.
Elasticsearch is our datastore of choice because of its unparalleled full text search functionality, scalability, and sufficiently robust geospatial support.
We built Pelias as an open source project not just because we believe that users should be able to view and play with the source code of tools they use, but because real, local knowledge is key for any global geospatial project.
Reports on what works and what doesn't, especially if it contains unique local knowledge are extremely helpful. Be sure to follow the issue templates so the team has everything we need to know to address the issue in the future.
Pull requests that fix small issues, improve performance, fix typos, etc are always welcome.
Pull requests for larger issues are of course great too, but we really recommend you reach out to the core team before you start doing that work. Pelias is a complex project. We find that unexpected large pull requests often have downsides or conflicts with our future roadmap that means they can never be merged. We want to make sure this doesn't happen to you!
The Pelias Core team sparingly, carefully and judiciously uses AI tools to improve the project. We don't mind if you use AI similarly to help you contribute, as long as you disclose it.
However, issues or pull requests generated primarily by AI with little human input are not welcome.
Contributions made completely by AI have essentially no value and do nothing but create noise and errors to be discovered and solved. Keep in mind the core team also has access to AI tools. So if your idea of helping is to one shot "build feature X for Pelias" and then send it to us, please don't. We could have done the same, except we also have experience and knowledge of our roadmap, what works, what doesn't, etc. At the very least, reach out first and we'll help you write a good prompt.
The generation of code and issue descriptions is not the bottleneck for improvement of Pelias. Instead, it's the ability to reliably evaluate changes to make sure they push the project towards higher quality. This is the part where you and the core team, as humans can contribute more than AI ever could.
We expect that anyone contributing to Pelias has a high level of understanding of the changes they are proposing.
In particular, we recommend you don't use AI to write massive pull request or issue descriptions. AI written text is usually verbose and full of hard to spot errors or irrelevant info. We'd prefer something written by you, even if it's imperfect in its own way.
The current Pelias team can be found on Github as missinglink and orangejulius.
To reach out to the core team in private, you can email us at team@pelias.io.
Members emeritus include:
(top 24 of 44)
3,074 followers · starred Nov 2015
2,417 followers · starred Dec 2020
91 followers · starred Apr 2017
297 followers · starred Aug 2015
Pelias is a modular open-source geocoder using Elasticsearch.
See the code
Pelias is a geocoder powered completely by open data, available freely to everyone.
Local Installation · Cloud Webservice · Documentation · Community Chat
A modular, open-source geocoder built on top of Elasticsearch for fast and accurate global search.
Geocoding is the process of taking input text, such as an address or the name of a place, and returning a latitude/longitude location on the Earth's surface for that place.

Reverse geocoding is the opposite: returning a list of places near a given latitude/longitude point.

Pelias is maintained and developed by Geocode Earth, with a community of business and individual contributors. The project began as part of Mapzen and has been maintained by the same core team since 2013.
Magic! (Just kidding) Like any geocoder, Pelias combines full text search techniques with knowledge of geography to quickly search over many millions of records, each representing some sort of location on Earth.
The Pelias architecture has three main components and several smaller pieces.

The importers filter, normalize, and ingest geographic datasets into the Pelias database. Currently there are six officially supported importers:
We are always discussing supporting additional datasets. Pelias users can also write their own importers, for example to import proprietary data into your own instance of Pelias.
The underlying datastore that does most of the query heavy-lifting and powers our search results. We use Elasticsearch. Currently versions 7 and 8 are supported.
We've built a tool called pelias-schema that sets up Elasticsearch indices properly for Pelias.
This is where the actual geocoding process happens, and includes the components that users interact with when performing geocoding queries. The services are:
These are software projects that are not used directly but are used by other components of Pelias.
There are lots of these, but here are some important ones:
pelias.json. This package provides a library for reading, validating, and working with this configuration. It is used by almost every other Pelias componentFinally, while not part of Pelias proper, we have built several useful tools for working with and testing Pelias
Notable examples include:
The main documentation lives in the pelias/documentation repository.
Additionally, the README file in each of the component repositories listed above provides more detail on that piece.
$ curl -s "search.mapzen.com/v1/reverse?size=1&point.lat=40.74358294846026&point.lon=-73.99047374725342&api_key={YOUR_API_KEY}" | json
{
"geocoding": {
"attribution": "https://search.mapzen.com/v1/attribution",
"engine": {
"author": "Mapzen",
"name": "Pelias",
"version": "1.0"
},
"query": {
"boundary.circle.lat": 40.74358294846026,
"boundary.circle.lon": -73.99047374725342,
"boundary.circle.radius": 500,
"point.lat": 40.74358294846026,
"point.lon": -73.99047374725342,
"private": false,
"querySize": 1,
"size": 1
},
"timestamp": 1460736907438,
"version": "0.1"
},
"type": "FeatureCollection",
"features": [
{
"geometry": {
"coordinates": [
-73.99051,
40.74361
],
"type": "Point"
},
"properties": {
"borough": "Manhattan",
"borough_gid": "whosonfirst:borough:421205771",
"confidence": 0.9,
"country": "United States",
"country_a": "USA",
"country_gid": "whosonfirst:country:85633793",
"county": "New York County",
"county_gid": "whosonfirst:county:102081863",
"distance": 0.004,
"gid": "geonames:venue:9851011",
"id": "9851011",
"label": "Arlington, Manhattan, NY, USA",
"layer": "venue",
"locality": "New York",
"locality_gid": "whosonfirst:locality:85977539",
"name": "Arlington",
"neighbourhood": "Flatiron District",
"neighbourhood_gid": "whosonfirst:neighbourhood:85869245",
"region": "New York",
"region_a": "NY",
"region_gid": "whosonfirst:region:85688543",
"source": "geonames"
},
"type": "Feature"
}
],
"bbox": [
-73.99051,
40.74361,
-73.99051,
40.74361
]
}
To try out Pelias quickly, use our Docker setup. It uses Docker and docker-compose to allow you to quickly set up a Pelias instance for a small area (by default Portland, Oregon) in under 30 minutes.
Pelias itself does not have API keys and is software you can run freely yourself.
However, for those looking for a hosted option, you can sign up for an API key at Geocode Earth. Geocode Earth is a geocoding service with Pelias at its core, created by the maintainers of Pelias. Combined with our experience hosting Mapzen Search, we've been running geocoding services since 2014.
Discounts and free plans are available for academic and open-source software projects.
Pelias itself (the import pipelines and API) is written in Node.js, which makes it highly accessible for other developers and performant under heavy I/O. It aims to be modular and is distributed across a number of Node packages, each with its own repository under the Pelias GitHub organization.
For a select few components that have performance requirements that Node.js cannot meet, we prefer to write things in Go. A good example of this is the pbf2json tool that quickly converts OSM PBF files to JSON for our OSM importer.
Elasticsearch is our datastore of choice because of its unparalleled full text search functionality, scalability, and sufficiently robust geospatial support.
We built Pelias as an open source project not just because we believe that users should be able to view and play with the source code of tools they use, but because real, local knowledge is key for any global geospatial project.
Reports on what works and what doesn't, especially if it contains unique local knowledge are extremely helpful. Be sure to follow the issue templates so the team has everything we need to know to address the issue in the future.
Pull requests that fix small issues, improve performance, fix typos, etc are always welcome.
Pull requests for larger issues are of course great too, but we really recommend you reach out to the core team before you start doing that work. Pelias is a complex project. We find that unexpected large pull requests often have downsides or conflicts with our future roadmap that means they can never be merged. We want to make sure this doesn't happen to you!
The Pelias Core team sparingly, carefully and judiciously uses AI tools to improve the project. We don't mind if you use AI similarly to help you contribute, as long as you disclose it.
However, issues or pull requests generated primarily by AI with little human input are not welcome.
Contributions made completely by AI have essentially no value and do nothing but create noise and errors to be discovered and solved. Keep in mind the core team also has access to AI tools. So if your idea of helping is to one shot "build feature X for Pelias" and then send it to us, please don't. We could have done the same, except we also have experience and knowledge of our roadmap, what works, what doesn't, etc. At the very least, reach out first and we'll help you write a good prompt.
The generation of code and issue descriptions is not the bottleneck for improvement of Pelias. Instead, it's the ability to reliably evaluate changes to make sure they push the project towards higher quality. This is the part where you and the core team, as humans can contribute more than AI ever could.
We expect that anyone contributing to Pelias has a high level of understanding of the changes they are proposing.
In particular, we recommend you don't use AI to write massive pull request or issue descriptions. AI written text is usually verbose and full of hard to spot errors or irrelevant info. We'd prefer something written by you, even if it's imperfect in its own way.
The current Pelias team can be found on Github as missinglink and orangejulius.
To reach out to the core team in private, you can email us at team@pelias.io.
Members emeritus include:
(top 24 of 44)
3,074 followers · starred Nov 2015
2,417 followers · starred Dec 2020
91 followers · starred Apr 2017
297 followers · starred Aug 2015