# Routing: status and roadmap

> geolith Routing is in development and not deployed for public use. What is done (builder, block-stored routing part, six Valhalla-compatible endpoints, byte-identical to Valhalla 3.9.1 on Berlin), what is in progress (edge latency) and what is next before launch. As of 8 Nov 2026.

**Status: in development, as of 8 Nov 2026. Not deployed for public use.** There is no routing endpoint on geolith.app or api.geolith.app, no hosted API and no pricing. On Berlin, the router answers byte-identical to Valhalla 3.9.1 on tiles from geolith's own builder. Edge latency is the open problem.

## Done

- **Builder.** `geolith --output-format routing --osm-pbf <pbf> --routing-output <file.glx>` builds the graph: tag rules, parsing, edges, access, turn restrictions, enhancer, hierarchy and shortcuts. `--routing-predicted-speeds <dir>` adds historical speeds.
- **The routing part.** Each graph tile is stored as fixed 64 KiB zstd blocks with a per-tile block directory, in the [.glx specification](/glx/spec) v1, chapter 10. See [The routing part](/routing/routing-part).
- **Router.** The `geolith-router` library answers `/route`, `/isochrone`, `/sources-to-targets`, `/trace-route`, `/trace-attributes` and `/status` with Valhalla-compatible bodies. Costing `auto`, `pedestrian` and `bicycle`. Spoken (`verbal_*`) instructions are included; English only.
- **Traffic.** `date_time` types `0` (current) and `1` (depart at) use historical speeds. Live speeds and closures are supplied by the caller. See [Traffic and live data](/routing/traffic).
- **Worker app.** A Cloudflare Worker serves all six endpoints from R2, block by block, as a test deployment on workers.dev.

### Accuracy against Valhalla 3.9.1

Berlin, same requests, full JSON responses compared byte for byte:

| Set                                                | Byte-identical           |
| -------------------------------------------------- | ------------------------ |
| `/route` on geolith-built tiles, auto              | 100/100, 0 missed        |
| `/route` on geolith-built tiles, walking           | 30/30 (pedestrian)       |
| `/route` on geolith-built tiles, bicycle           | 30/30                    |
| `/route` suite on reference tiles                  | 200/200                  |
| `/sources-to-targets`                              | 60/60                    |
| `/isochrone`                                       | 45/45, plus 12/12 errors |
| Map matching (`/trace-route`, `/trace-attributes`) | 160/160                  |
| Historical speeds (`date_time`)                    | 50/50                    |
| Live speeds                                        | 30/30                    |
| Closures                                           | 5/5                      |

"0 missed" means there is no route Valhalla finds that geolith does not.

### Measured on the edge

A test Worker on workers.dev answers all 100 test routes without memory errors, but slowly from Mumbai. Two runs on 8 Nov 2026:

| Measure                        | Result                                    |
| ------------------------------ | ----------------------------------------- |
| Latency, median                | 7.6 s and 7.7 s                           |
| Latency, p95                   | 27 s to 28 s                              |
| Fetch rounds per route, median | 26 to 27, each a 270 ms to 300 ms R2 read |
| Engine CPU per route, median   | 445 ms and 480 ms                         |
| `/isochrone`, 5-minute contour | Hits the Worker CPU limit                 |

See [Self-hosting](/routing/self-hosting).

## In progress

- **Edge latency.** A block store in KV and the Cache API, as geolith search uses, and spatial read-ahead. The target is a warm median of 400 ms or less.

Not supported yet: `date_time` types `2` (arrive by) and `3` (invariant) return error `199`, and instructions are English only.

## Next, before launch

1. **Administrative boundaries and time zones as builder inputs,** for the driving side and local time.
2. **An out-of-core builder and a country build** (India).
3. **api.geolith.app integration.**
4. **A planet build.**

Only then does routing run on geolith.app or api.geolith.app.

## Later

Overture Maps transportation, elevation and GTFS transit; see [How it works](/routing/how-it-works#inputs-now-and-planned).
