Show HN: Offline tiles and routing and geocoding in one Docker Compose stack (corviont.com)
Hi HN,
I’m building Corviont, a self-hosted offline maps appliance (tiles + routing + search) for edge/on-prem devices.
Hosted demo (no install): https://demo.corviont.com/
Self-host (Docker Compose repo): https://github.com/corviont/monaco-demo
Docs: https://www.corviont.com/docs
What’s inside:
- Vector tiles served locally (PMTiles)
- Routing served locally (Valhalla)
- Offline geocoding/search + reverse (SQLite Nominatim-based index)
- MapLibre UI wired to the local endpoints
After the initial image + data pulls, it runs fully offline (no external map/routing/geocoding API calls).Next (if people need it): a signed on-device updater for regional datasets (verify → atomic swap → reload).
I’d love feedback: where offline maps/routing/search matters for you, and what constraints bite (hardware, fleet size, update windows, regions, deployment style).
10 comments
[ 3.4 ms ] story [ 35.6 ms ] threadI ask because I've been looking to self host some sort of map tile server and they seem to have database in the hundreds of GB.
Maptiler has a bunch of datasets, anywhere from 385MB to 527GB but the OSM dataset is only 70GB. (MBTiles format)
If I may have a feature request, I’d like to have only some of the features turned on - in my case it would be just the reverse geocoder (so I could skip the map and routing data download and storage).
Right now I have my own reverse geocoder for https://weathergraph.app which downloads OSM dumps and builds in-memory KD tree for lookups. Surprisingly, the whole world can fit in 3-4 GB of RAM, and service starts in 90 seconds on a cheap VPS, no database needed, but of course, having a battle tested solution that just works (and someone else maintains it) would help.
Re: Weathergraph - thanks for the details. Since you already run whole-world reverse geocoding on a single server, that's a bit different from Corviont's current regional/fleet packaging (where you ship only the area you need to each edge/on-prem deployment). A "world geocoder-only" pack could still make sense - but it's a different distribution/update story than my default.
For your use case, do you want reverse results at the city/region/country level - or do you also need street/house number detail? That choice mostly determines how heavy a world geocoder-only pack needs to be.
Why not create a "builder" repo, where people could generate their own local datasets by a bounding box?
I've played around with OSRM, and Nominatim, etc, but had to do some trickery to run on a raspberry pi.
(For anyone interested in running some of these kind of things on a pi, I talk about it generally here, I need to post an update with more info at some point. http://blog.onaclovtech.com/2025/02/general-purpose-to-speci...)