Switching from OpenCage
OpenCage is a pleasure to use: forward and reverse geocodinggeocodingThe process of converting an address into geographic coordinates (latitude and longitude). Mailwoman geocodes in a multi-tier cascade: exact address-point match → street interpolation → locality centroid. Each tier is progressively coarser but more widely available. plus a rich
annotations block — timezone, coordinate formats, calling code, currency, flag, and more — on every
result. It's also a hosted API with a key to guard and a per-request bill that grows with you.
Mailwoman's whole annotations layerlayerOne transformer block — attention plus a feed-forward network, with normalization and residual connections — applied to every position. Stacking layers lets the model build up richer representations; Mailwoman's encoder has 6. exists to give you that same block, self-hosted, with no API key
and no monthly fee. You run @mailwoman/nominatim, and the OpenCage-keyed annotations come attached.
One command
npx @mailwoman/nominatim serve --port 8080
curl "http://localhost:8080/search?q=Boston MA"
{
"lat": "42.332235",
"lon": "-71.016397",
"display_name": "Boston, MA",
"annotations": {
"DMS": { "lat": "42° 19′ 56.05″ N", "lng": "71° 0′ 59.03″ W" },
"Maidenhead": "FN42lh",
"Mercator": { "x": -7905509, "y": 5210877 },
"geohash": "drt2zfr7n",
"flag": "🇺🇸",
"timezone": { "name": "America/New_York", "offset_sec": -14400 }
}
}
The annotations keys mirror OpenCage's (DMS, Maidenhead, Mercator, timezone.offset_sec, …), so
code that reads OpenCage annotations reads these.
What's different
- No key, no fee, no rate limit. It runs on your box, from a SQLite file.
- The forward search uses the Nominatim response shape with the OpenCage
annotationsblock layered on — close to, but not byte-identical to, OpenCage's envelope.
What's missing
- Annotation coveragecoverageThe fraction of a population or region for which a data source has real, non-placeholder entries — e.g. 47% rooftop coverage on Texas addresses. Distinct from accuracy on the rows that are present. is growing. Shipped: coordinate formats (DMS, geohash, Maidenhead, Mercator, qibla), flag, ISO, and the IANA timezone with a DST-correct offset. Calling code, currency, UN/LOCODE, and NUTS are on the way; what3words is proprietary and out of scope.
- Aggregated coveragecoverageThe fraction of a population or region for which a data source has real, non-placeholder entries — e.g. 47% rooftop coverage on Texas addresses. Distinct from accuracy on the rows that are present.. OpenCage blends several backends, so it can resolve some places Mailwoman doesn't yet. Where that matters, OpenCage's multi-service guidance and Mailwoman's free first pass compose well.
See how Mailwoman compares for the capability matrix, and Switching from Nominatim for the full endpoint contract.