Configuration
Calculon resolves configuration from three levels with increasing priority:
Hardcoded defaults < Config file < CLI arguments
CLI arguments
calculon [OPTIONS]
Options:
-t, --tile-dir <TILE_DIR> Path to the tile directory
--tile-archive <PATH_OR_URL> .gphx archive instead of a tile dir (local path or http(s) URL)
--tile-cache-dir <DIR> Disk cache of decompressed tiles, mapped back from disk
(keeps resident memory at tile-directory levels)
-b, --bind <BIND> Address to bind (default: 0.0.0.0:8002)
--cache-size <CACHE_SIZE> Shared tile cache budget in MB (default: 4096, archives only)
-c, --config <CONFIG> Path to config file (default: calculon.toml in CWD)
A tile source is required: exactly one of --tile-dir or --tile-archive.
Setting both is an error rather than a silent preference, so a typo cannot leave
the server quietly pointed at the wrong data. See
Tile Archives for what an archive is and when to use one.
Config file
Calculon looks for calculon.toml in the current working directory by default. Use --config to specify a different path.
tile_dir = "/data/valhalla/tiles"
# Or read a .gphx archive instead: a local path, or an http(s) URL served with
# range requests (e.g. S3/CloudFront):
# tile_archive = "https://tiles.example.com/france-2026-08.gphx"
# tile_cache_dir = "/var/cache/calculon/tiles"
bind = "0.0.0.0:8002"
# Shared tile cache budget in MB. Bounds archive-backed sources only: directory
# tiles are memory-mapped and bounded by the OS page cache.
cache_size = 4096
[costing.auto]
use_highways = 0.5
use_tolls = 0.5
top_speed = 140
[costing.bicycle]
cycling_speed = 20.0
use_roads = 0.5
[costing.pedestrian]
walking_speed = 5.1
Values in [costing.*] sections set server-wide defaults that apply to every request unless overridden by per-request costing_options.
Auto (driving) options
| Option | Range | Default | Description |
|---|---|---|---|
use_highways |
0.0 - 1.0 | 0.5 | Highway preference (0 = avoid, 1 = prefer) |
use_tolls |
0.0 - 1.0 | 0.5 | Toll road preference (0 = avoid, 1 = prefer) |
use_distance |
0.0 - 1.0 | 0.0 | Distance vs time trade-off (0 = fastest, 1 = shortest) |
top_speed |
10 - 252 | 140 | Maximum speed in kph |
toll_booth_cost |
0+ | 15.0 | Seconds added at toll booths |
destination_only_penalty |
0+ | 600.0 | Penalty for destination-only edges (seconds) |
maneuver_penalty |
0+ | 5.0 | Penalty for name-inconsistent turns (seconds) |
signal_penalty |
0+ | 0.5 | Traffic signal penalty (seconds) |
surface_factor |
0.0 - 1.0 | 0.5 | Surface quality impact on cost |
service_penalty |
0+ | 75.0 | Penalty for service roads (seconds) |
shortest |
bool | false | Pure distance-based routing |
Bicycle options
| Option | Range | Default | Description |
|---|---|---|---|
cycling_speed |
5 - 60 | 18.0 | Base cycling speed in kph |
use_roads |
0.0 - 1.0 | 0.25 | Road preference (0 = avoid roads, 1 = prefer) |
use_hills |
0.0 - 1.0 | 0.25 | Hill preference (0 = avoid, 1 = prefer) |
avoid_bad_surfaces |
0.0 - 1.0 | 0.25 | Bad surface avoidance penalty |
use_living_streets |
0.0 - 1.0 | 0.5 | Living street preference |
maneuver_penalty |
0+ | 5.0 | Penalty for name-inconsistent turns (seconds) |
gate_penalty |
0+ | 300.0 | Penalty for passing through a gate (seconds) |
shortest |
bool | false | Pure distance-based routing |
Pedestrian options
| Option | Range | Default | Description |
|---|---|---|---|
walking_speed |
0.5 - 25 | 5.1 | Base walking speed in kph |
walkway_factor |
0.1+ | 1.0 | Cost factor for walkways (lower = prefer) |
sidewalk_factor |
0.1+ | 1.0 | Cost factor when sidewalk present (lower = prefer) |
alley_factor |
0.1+ | 2.0 | Cost factor for alleys (higher = avoid) |
driveway_factor |
0.1+ | 5.0 | Cost factor for driveways (higher = avoid) |
step_penalty |
0+ | 30.0 | Penalty for steps (seconds) |
use_hills |
0.0 - 1.0 | 0.5 | Hill preference (0 = avoid, 1 = prefer) |
max_hiking_difficulty |
0 - 6 | 1 | Maximum SAC hiking scale |
use_lit |
0.0 - 1.0 | 0.0 | Preference for lit roads (0 = don't care) |
use_living_streets |
0.0 - 1.0 | 0.6 | Living street preference |
maneuver_penalty |
0+ | 5.0 | Penalty for name-inconsistent turns (seconds) |
shortest |
bool | false | Pure distance-based routing |
Option merge
Options are merged in order: hardcoded defaults < config file < per-request costing_options.
[costing.auto]
use_highways = 0.8
use_tolls = 0.2
{
"locations": [...],
"costing": "auto",
"costing_options": {
"auto": {
"use_highways": 0.3
}
}
}
In this example, use_highways is 0.3 (request wins), use_tolls is 0.2 (config wins over hardcoded 0.5), and all other options use hardcoded defaults.