Home · Features · Routing & Navigation

Turn-by-turn routing that never phones home.

In-process A* over a user-supplied DuckDB road-network graph. No OSRM, no Valhalla, no Docker, no online calls by default.

In-process A* DuckDB road graph Air-gapped by default vehicle / foot / cycle GPX 1.1 KML 2.2 Turn-by-turn

No sidecar, no container

A routing engine that lives inside the app

In-process A* against a user-supplied DuckDB road graph — one POST, one route. City/region graphs (~100k nodes) solve in under a second.

Bring your own graph

nodes + edges DuckDB from OSM (osm2pgsql) or your GIS team.

Multi-waypoint

Origin → intermediates → destination with per-leg turn-by-turn.

Travel modes

vehicle / foot / cycle with highway-type speed defaults.

GPX 1.1 + KML 2.2

Export routes and waypoint lists for Garmin and Google Earth.

Beyond the route

Analyze the network

  • Onager — PageRank, Louvain, Dijkstra, MST, TSP, more
  • Optional Esri World Routing toggle (credits + internet) for country-scale
  • SpatiaLite VirtualRouting path with voice guidance
  • Missing columns auto-synthesized at graph registration
POST /api/routing/solve{
  "origin": { "lat": 34.05, "lon": -118.24 },
  "dest":   { "lat": 34.09, "lon": -118.36 },
  "options": {
    "travelMode": "vehicle",
    "useEsriOnline": false
  }
}
→ Route { distanceM, timeSec, geojson, legs[] }
● air-gapped by default

Route inside the wire.

Build a routable graph once, register it — every operator plans, solves, and exports with zero external dependencies.