# Nominatim + GraphHopper / uMap

Maps you host. Nominatim is GPL-3.0 geocoding; GraphHopper is Apache-2.0 routing; uMap is AGPL-3.0 custom maps — Google Maps without the API meter.

**Replaces:** Google Maps

**Tier:** Medium

## Problem

Google Maps meters geocoding, routing, and embeds. You wanted OpenStreetMap data on hardware you run. Nominatim is GPL-3.0 search/geocoding (needs an OSM planet or extract — disk is the honest cost). GraphHopper is Apache-2.0 routing. uMap is AGPL-3.0 if the job is a custom map you embed. This is not Google Street View, traffic, or every Places review. Organic Maps / OsmAnd are clients, not this server stack.

## Stack

- [Nominatim](https://nominatim.org) — GPL-3.0 OpenStreetMap geocoding and search
- [GraphHopper](https://www.graphhopper.com/open-source/) — Apache-2.0 routing engine for OpenStreetMap
- [uMap](https://umap-project.org) — AGPL-3.0 custom OpenStreetMap maps you embed

## Estimated SaaS cost saved

| You stop paying | Typical / year | Self-host instead |
|---|---:|---|
| Google Maps Platform (small team) | $1,200 | Nominatim and/or GraphHopper + OSM data |

**About $1,200 / year** on a small team, before you count lock-in.

## Deploy on Railway

Placeholder: this is a heavy box. Nominatim wants a large volume for an OSM extract; GraphHopper wants a graph build; uMap is the lighter custom-map app. A single Railway service is often the wrong size — a VPS with disk is the honest path. No one-click template in this repo yet — Start on Railway.

[Start on Railway](https://c17.io/go/railway/osm-maps?from=%2Fstacks%2Fosm-maps.md)

[Nextcloud if this is files, not maps](https://c17.io/stacks/nextcloud-files)

## AGENT_PROMPT

```
Replace Google Maps APIs with Nominatim (geocode/search), GraphHopper (routing), and/or uMap (custom embed).

- Nominatim: import an extract, not a toy sqlite, if you actually query a region. GraphHopper: build the graph from OSM. uMap if the job is a map you draw.
- Disk and RAM are the cost. Do not claim Street View, live traffic, or Places. Write AGENT_PROMPT.md.
```

## FAQ

### Do I need all three?

No. Nominatim for search. GraphHopper for directions. uMap for a custom map on a site. Start with the slice you pay Google for.

### Will this fit on Railway?

uMap might. Nominatim usually wants a large volume and a long import. Treat a VPS as the default.

Source: https://c17.io/stacks/osm-maps
