Getting started
Read this online at docs.routing-earth.com.
routing-earth-utils (CLI is re) is the client software to initialize a local Valhalla graph extract and to consume daily/weekly graph delta updates with up-to-date OSM road data.
Requirements
- Python ≥ 3.12 (binary wheels for Linux x86_64/aarch64, macOS arm64, Windows amd64)
- A paid routing-earth.com API key with an entitlement for your scope & cadence (get one at routing.earth)
- Disk: syncing briefly holds two copies of the extract plus the downloaded bundles (~2× the extract size)
Install
=== "uv"
```sh
uv tool install routing-earth-utils
# or, inside a project:
uv add routing-earth-utils
```
=== "pip"
```sh
pip install routing-earth-utils
```
This installs the re command.
Authentication
The CLI reads your API key from the environment (or pass --api-key):
export RE_API_KEY="re_..."
The key is only ever sent as a Bearer header to the routing.earth API.
401 means the key is invalid, 403 means it has no entitlement for
the requested scope & cadence.
re init - Seed the extract
Pick a scope (planet or a region id, e.g. germany) and a cadence
(daily, weekly or monthly) matching your plan, then:
re init --tar-extract tiles.tar --scope germany --cadence daily
This downloads the current full snapshot, verifies its signature, and writes a ready-to-serve extract:
initialized tiles.tar at dataset_id 20260718 (germany/daily)
Serve it
Point Valhalla at the tar in your valhalla.json:
{
"mjolnir": {
"tile_extract": "/path/to/tiles.tar"
}
}
re sync - Keep it current
re sync --tar-extract tiles.tar
This downloads the diff bundle chain, applies it tile by tile, and atomically swaps the new extract into place. If your extract is too far behind, we might decide to pull a fresh full graph.
Every step along the chain is verified via our bundle signatures (Ed25519), and a per-tile checksum check adds additional security. Any failure aborts the sync and leaves your current extract untouched.
Operationally, run re sync on a scheduler with e.g. a 15 mins cadence:
# e.g. crontab, for a daily cadence
*/15 * * * * RE_API_KEY=re_... re sync --tar-extract /srv/valhalla/tiles.tar
Exits with code:
0on success (including "already current")1on any failure
!!! note "Picking up the new extract" The swap is an atomic rename. A running Valhalla keeps serving the old extract from its memory map until it reopens the file — restart or reload the service after a successful sync to serve the new data.
re status - Check local graph's update status
re status --tar-extract tiles.tar
{"tar_extract": "tiles.tar", "dataset_id": 20260718, "scope": "germany", "cadence": "daily", "verdict": "diff-chain", "latest_dataset_id": 20260719, "osm_data_timestamp": "2026-07-19T02:00:00Z"}
Add --offline to simply print the local graph status without requesting our API.
Exits with code:
0onverdict = current1on error2onverdict = diff-chain, i.e. graph needs an update
Using the Python API
Everything the CLI does is available as a library — see the
API reference, starting with
client:
from pathlib import Path
from routing_earth_utils.client import init, sync, tar_status
extract = Path("tiles.tar")
if not extract.exists():
init(extract, scope="germany", cadence="daily")
result = sync(extract)
print(result.verdict, result.to_dataset_id)
Troubleshooting
| Symptom | Cause / fix |
|---|---|
resolver: HTTP 401 (invalid API key) |
$RE_API_KEY unset or wrong — check the export and your account. |
resolver: HTTP 403 (no entitlement for this scope/cadence) |
Your plan doesn't cover this scope × cadence — re-check init arguments against your subscription. |
not an initialized extract |
The tar wasn't created by re init (or is some other file). Seed it with init first. |
already exists — use sync |
init never overwrites; advance an existing extract with sync, or remove it to reseed. |
| Signature / verification errors | Fail-closed by design: the download was rejected and your extract is untouched. The <extract>.work dir is kept for diagnosis (safe to delete; the next run starts clean). Retry; if it persists, contact support. |
| Sync fails with a disk-space error | Copy-on-sync needs roughly the extract's size in free space next to it. |
Increase verbosity with -v (progress) or -vv (debug); diagnostics go to
stderr.
Metadata
Release files for routing-earth-utils 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| routing_earth_utils-0.3.0-cp312-abi3-win_amd64.whl | CPython 3.12 | abi3 | Windows x86-64 | Details |
| routing_earth_utils-0.3.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | CPython 3.12 | abi3 | Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 | Details |
| routing_earth_utils-0.3.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl | CPython 3.12 | abi3 | Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 | Details |
| routing_earth_utils-0.3.0-cp312-abi3-macosx_11_0_arm64.whl | CPython 3.12 | abi3 | macOS 11.0+ ARM64 | Details |
Total release size: 854.0 kB
Release files / routing_earth_utils-0.3.0-cp312-abi3-win_amd64.whl
| Download URL | routing_earth_utils-0.3.0-cp312-abi3-win_amd64.whl |
|---|---|
| Size | 352.3 kB |
| Tags | CPython 3.12 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
f6720b9e526681164847f9fb8941666f7c5d6a02e1109d1ab8eeea5ec60f3fdf
|
|
BLAKE2b-256 checksum How to use checksums |
5e11e352ea8f2e04eba7a3582d30c6bff0af26ac4c2872a76ca052b2e5733ccf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency logRelease files / routing_earth_utils-0.3.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | routing_earth_utils-0.3.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 202.0 kB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
74372fa18919f4ad2dbbf98be98710de16f0a034613964eb0c06a05750e072c6
|
|
BLAKE2b-256 checksum How to use checksums |
a22529cbacfd807e4874c6c9b73a20f306cedc81346ad3cae36dba8b08450295
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency logRelease files / routing_earth_utils-0.3.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | routing_earth_utils-0.3.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 188.4 kB |
| Tags | CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
232b7e9863f85e22dd53497cf7f84a9d07c6ae35d82c0e7d6245878ee769b706
|
|
BLAKE2b-256 checksum How to use checksums |
ec4ef030894e09d8bacf404218d2bb5f3911aeb82b67c2f501de116a6973902d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency logRelease files / routing_earth_utils-0.3.0-cp312-abi3-macosx_11_0_arm64.whl
| Download URL | routing_earth_utils-0.3.0-cp312-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 111.2 kB |
| Tags | CPython 3.12 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
bf70eccc2fc1ee8c5773fef43284991eb245bf4e6e3db1b923afe685bd9dd91b
|
|
BLAKE2b-256 checksum How to use checksums |
6a926c90c211696b560e4785dffaca2606884e4742c83b8bbd14960fef20d795
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency log