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).
bikelang•1d ago
krapht•1d ago
tomaskafka•1d ago
packet_mover•1d ago
FWIW, Valhalla already does a version of this: it partitions the routing graph into hierarchical tiles and runs with multiple hierarchy levels (highway / arterial / local) specifically to keep search + in-memory working set smaller on long routes: https://valhalla.github.io/valhalla/tiles/
The "quadtree tile unlock" mental model is a nice way to think about it though - if you have a favorite paper / implementation that leans harder into the tiling aspect, I’d love a pointer. I’m currently focused on packaging + offline data consistency, but routing performance on constrained edge boxes is definitely a core constraint I care about.
michaelt•1d ago
The algorithms do divide the map up into chunks that are themselves divided up and so on, but not on the strict geographical basis a quadtree uses. You might not want to divide Manhattan in two for routing purposes, even if the 74th longitude line runs straight through it.
[1] https://turing.iem.thm.de/routeplanning/hwy/esaHwyHierarchie... [2] https://publikationen.bibliothek.kit.edu/1000028701/14297392...