Getting Started¶
The fastest way to run WebATM is with Docker — no Python or Node toolchain needed. If you plan to modify the code, run it from source instead and see the Development Workflow.
Option 1: Docker (recommended)¶
Requires Docker 20.10+ with Docker Compose 2.0+. The repository's
docker-compose.yml defines both build variants: the standalone webatm
service (enabled by default) and a commented-out webatm-integrated service
that bundles the BlueSky simulator in the same container. Both pull prebuilt
images from GHCR, so no local build is needed.
Standalone (webatm)¶
Connects to a BlueSky server you run yourself (by default on the Docker
host, via BLUESKY_SERVER_HOST=host.docker.internal).
-
Start with Docker Compose (pulls
ghcr.io/amvlab/webatm:latest) -
Open the web interface at http://localhost:8082
-
View logs
-
(Optional) Mount your BlueSky working directory
Mounting your local BlueSky directory into the container enables the in-app file manager for
scenario/,plugins/,settings.cfg, andoutput/. Uncomment thevolumes:block of thewebatmservice indocker-compose.ymland point the host side at your BlueSky directory:The part before the colon is the path on your machine; the part after is where it appears inside the container. Enter that container-side path (
/bluesky) in the web UI under Settings → BlueSky base path, and apply the mount withdocker compose up -d(the container is recreated automatically).
Integrated (webatm-integrated)¶
A single container that ships the simulator itself, with Start/Stop/Restart controls and a live server log in the UI — see the Integrated Build for details.
-
Enable the service: uncomment the
webatm-integratedservice indocker-compose.yml. Both services default to host port 8082, so also comment out the standalonewebatmservice (or map one of them to a different host port to run both side by side). -
Start with Docker Compose (pulls
ghcr.io/amvlab/webatm-integrated:latest) -
Open the web interface at http://localhost:8082 — the server lifecycle controls are in Settings, and the server log has its own console tab.
-
View logs
-
(Optional) Persist BlueSky's config directory
BlueSky lives inside the container at
/home/webatm/bluesky(settings.cfg,scenario/,plugins/,output/), so by default its state is lost when the container is recreated. To keep it across restarts, uncomment thevolumes:block of thewebatm-integratedservice and point the host side at a directory of your choice:Unlike the standalone variant, no UI configuration is needed — the file manager is pre-wired to that path. Apply the mount with
docker compose up -d.
Building images locally
To run from source instead of the published GHCR images, build the
image first and point the service's image: at it:
Option 2: Prebuilt release (source, no Node.js)¶
Use this to run WebATM directly from source without installing Node.js or building the frontend yourself. You still clone the repo for the Python source, then drop in two tarballs that contain the runtime assets that aren't checked into git: a small per-version code tarball and a larger static-asset tarball that changes rarely.
-
Clone the repository
-
Download and extract the prebuilt code tarball
Grab the latest
webatm-prebuilt-<version>.tar.gzfrom the Releases page and extract it from the repo root:This lands:
WebATM/static/dist/— prebuilt webpack bundlesWebATM/static/vendor/— third-party CSS/fonts (FontAwesome, MapLibre)
-
Download and extract the static-asset tarball
Grab the assets tarball pinned by the repo's
.assets-versionfile (e.g.webatm-assets-v1.tar.gz) from the Releases page and extract it from the repo root:This lands:
WebATM/static/tiles/— offline basemap (world.pmtiles) and navigation overlay (navdata.pmtiles)WebATM/static/glyphs/— map fontsWebATM/static/navdata/— navigation database
This bundle changes rarely (only when tiles, fonts, or navdata roll), so a single download usually carries across many code releases.
-
Install Python dependencies and start
-
Open the web interface at http://localhost:8082
-
(Optional) Enable the offline basemap
The assets tarball already includes
WebATM/static/tiles/world.pmtiles. To use it, open Settings → Map Display Configuration → Offline (Local PMTiles) in the web UI — see Offline Use (PMTiles).
Option 3: Running from source¶
| Requirement | Version | Notes |
|---|---|---|
| Python | 3.13+ | managed with uv |
| Node.js | 22+ | with npm, for building the TypeScript frontend |
| BlueSky | 1.1.0+ | automatically managed by WebATM |
BlueSky compatibility
WebATM works best with the amvlab fork of BlueSky, and is also compatible with the latest BlueSky from TU Delft.
-
Clone the repository
-
Install Python dependencies (with uv)
This creates a virtual environment and installs the runtime and development dependencies pinned in
uv.lock. Prefix commands withuv run(e.g.uv run python WebATM.py) to use that environment, or activate it withsource .venv/bin/activate. -
Build frontend assets
-
Start the application
-
Open the web interface at http://localhost:8082
Everything beyond running the app — linting, type checking, the test suites, rebuilding the frontend on change, and building this documentation site — is covered in the Development Workflow.