versatiles
| Version | 2026.144.1443 |
| Repo | superproject |
VersaTiles CLI (versatiles-rs) + tile server — convert/serve/probe tile containers, serving vector tiles over HTTP on port 8090
Installs the versatiles-rs single Rust binary at /usr/local/bin/versatiles
(convert / serve / probe / dev for the .versatiles, .pmtiles, .mbtiles and
.tar tile-container formats), plus a supervisord-managed wrapper that runs
versatiles serve on port 8090 (host-mapped 28090). The wrapper always
includes the public download.versatiles.org/osm.versatiles source so the
service starts cleanly on a fresh deploy before any local shortbread tiles
exist, then appends local /workspace/tiles/shortbread/ containers as the OSM
DAG produces them. The convert subcommand is symmetric (PMTiles ↔ .versatiles
↔ MBTiles round-trip). Every fact below is observable: the installed binary,
the linked convert subcommand, the serve wrapper, the running service, the
reachable port, and the HTTP 200 a known OSM tile endpoint returns.
Services
Section titled “Services”versatiles
Acceptance plan
Section titled “Acceptance plan”This candy’s plan: — the runnable spec charly check executes against a live deployment. check: steps are idempotent probes; run: steps change state.
| Intent | Step |
|---|---|
run |
command=set -euo pipefail # The release asset name follows the pattern # versatiles-linux-gnu-x86_64.tar.gz (gnu BEFORE x86_64, # verified against v4.0.0). musl variants also ship; we # pick gnu since the versa image’s other Rust binaries # (martin) also use the gnu glibc variant. ASSET=$(curl -fsSL “https://api.github.com/repos/versatiles-org/versatiles-rs/releases/latest” \ | jq -r ‘.assets[].browser_download_url’ \ | grep -E ‘versatiles-linux-gnu-x86_64.tar.gz$’ \ | head -1) if [ -z “$ASSET” ]; then echo “ERROR: could not find versatiles-rs linux-x86_64-gnu tarball” >&2 curl -fsSL “https://api.github.com/repos/versatiles-org/versatiles-rs/releases/latest” \ | jq -r ‘.assets[].name’ >&2 exit 1 fi TMPDIR=$(mktemp -d) cd “$TMPDIR” curl -fsSL “$ASSET” -o vt.tar.gz tar -xzf vt.tar.gz # The tarball lays out versatiles directly at the archive # root (no inner directory). Find it generically so a future # layout change doesn’t silently break. BIN=$(find . -name versatiles -type f -executable | head -1) install -m 0755 “$BIN” /usr/local/bin/versatiles cd / rm -rf “$TMPDIR” |
run |
write=/usr/local/bin/versatiles-wrapper.sh |
check |
the versatiles binary is installed and executable at /usr/local/bin/versatiles |
check |
the installed binary reports its version |
check |
the convert subcommand is compiled into the binary (not a stripped-down build) |
check |
the supervisord serve wrapper is installed and executable at /usr/local/bin/versatiles-wrapper.sh |
check |
the versatiles service is running under the init system |
check |
the serve port is reachable on the host loopback |
check |
a known OSM tile endpoint returns HTTP 200 |
check |
command=set -euo pipefail SRC=/workspace/tiles/pmtiles/monaco.pmtiles # If the OSM DAG hasn’t run yet on this deploy, skip the # check cleanly — the notebook’s R10 end-to-end covers the # post-DAG state. The check here covers the static binary # surface; the DAG path is exercised by the notebook test. if [ ! -f “$SRC” ]; then echo “SKIP: $SRC not present yet (OSM DAG has not run on this deploy)” exit 0 fi TMP=$(mktemp -d) trap “rm -rf $TMP” EXIT versatiles convert “$SRC” “$TMP/monaco.versatiles” versatiles convert “$TMP/monaco.versatiles” “$TMP/monaco-roundtrip.pmtiles” test -s “$TMP/monaco.versatiles” test -s “$TMP/monaco-roundtrip.pmtiles” # Probe both ends to verify they’re readable + parseable. versatiles probe “$SRC” >/dev/null versatiles probe “$TMP/monaco-roundtrip.pmtiles” >/dev/null |