Skip to content

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.

  • versatiles

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