Skip to main content
Runs the Axol web control panel: a small local server that lets you drive the robot from a browser instead of a terminal. It serves the built web UI and a JSON/WebSocket API that starts, streams, and stops the core operations — teleoperation, gravity compensation, data collection, and policy inference — in-process. With the quick install, this command already runs as a root systemd service (axol.service) that starts at boot, restarts automatically, and keeps itself in sync with the latest release — you don’t run it by hand. Manual invocation is for development installs:
axol serve                    # https://localhost:8001 (LAN-reachable)
axol serve --port 9000
axol serve --open             # also open a browser window on startup
axol serve --host 127.0.0.1   # localhost only
axol serve --no-tls           # plain HTTP instead of HTTPS
For a guided walkthrough of the control panel — connecting the Axol host, Axol, and ZED box, and running each operation — see the Web Control Panel guide.
FlagDescription
--host HOSTInterface to bind. Default 0.0.0.0 (reachable on the LAN); use 127.0.0.1 for localhost only.
--port INTPort to listen on. Default 8001.
--openOpen a browser window on startup. Off by default.
--no-tlsServe plain HTTP instead of HTTPS. TLS is on by default.

TLS

TLS is on by default so a browser on an HTTPS origin (e.g. the hosted VR app at axol.almond.bot) can reach this machine without mixed-content blocking. On first run a self-signed certificate is generated in ~/.almond/vr/certs/ — the same certificate the VR teleop WSS server uses, so accepting it once covers both the control panel and VR teleop. To connect from a browser on another machine, open the printed LAN URL once and accept the certificate warning. Pass --no-tls to disable TLS entirely (plain HTTP).

Building the web UI

The server looks for the built web bundle at web/app/dist (a repo checkout only — quick installs have no checkout). If it isn’t there, axol serve still runs and the API is available; use the hosted UI at axol.almond.bot, which connects to the server directly. To serve the UI locally instead, build it once with:
cd web
npm install
npm run build --workspace=packages/axol-vr-client
npm run build --workspace=app
See the Installation page for details.

What it serves

PathDescription
/controlThe control panel UI (operations, connections, settings).
/vrThe VR teleop interface (same build).
/Redirects by device — headset browsers to /vr, everything else to /control.
/api/*JSON + WebSocket API used by the UI.
The operations launched from the panel run in-process inside the serve process — the same Python entry points as the teleop, gravity-comp, collect-data, and run-policy CLI commands. Anything those commands need on the host (CAN, the lerobot/sim extras, ZED access) is required here too.