geolith search is a geocoding API written in Rust. It answers forward geocoding, autocomplete, structured address search and reverse geocoding over the places and addresses that geolith builds from Overture Maps.
- Pelias-compatible. The endpoints, parameters and GeoJSON response shape follow Pelias, so Pelias clients work unchanged.
- Just Postgres. Data lives in one Postgres table. PostGIS answers geometry, and the TIN extension from PlanetScale answers BM25 full-text search. There is no Elasticsearch cluster.
- Ranked in the index. Results are ordered by text relevance plus the importance of each place, and every query runs under a time budget.
- Safe input. User text is split into words before it reaches the query, so it can never inject query operators. Search text is never written to the logs.
| Project | Role | Status |
|---|
| geolith | Builds planet basemaps and the geocoding table from Overture Maps | Live |
| tileserver-rs | Serves vector and raster tiles, styles and fonts | Live |
| geolith search | Geocoding, autocomplete and reverse geocoding | Live (self-hosted) |
| Routing on Valhalla | Turn-by-turn routing | Roadmap |
| Hosted API | Managed search and tiles endpoints | Roadmap |
| Endpoint | Purpose |
|---|
GET /v1/search | Forward geocoding from free text |
GET /v1/autocomplete | Search as you type |
GET /v1/search/structured | Geocoding from separate address fields |
GET /v1/reverse | Places nearest to a point |
GET /health | Checks that the database answers |
GET /openapi.json | OpenAPI 3.1 document |
GET /docs | Interactive API reference (Scalar) |