self_hosted. It assumes you have already stood up your own Convex backend and MQTT bridge (see Mission Control and Convex and MQTT bridge).
1. Install the agent
The agent installs with a single command on the companion computer. The install script fetches and verifies a prebuilt installer, then provisions every service.A paired-by-code flow only works once the agent already knows where your backend lives. If you are self-hosting, set the server mode first (next section), or pair locally over the LAN from the Add-a-Node card in Mission Control, which needs no cloud at all.
2. Switch the agent to self-hosted mode
The agent reads its configuration from/etc/ados/config.yaml. To use your own backend, set server.mode to self_hosted, fill in server.self_hosted, and mirror the backend URL onto pairing.convex_url.
The :3210 vs :3211 rule
This is the most common self-host mistake, so it gets its own callout. A self-hosted Convex deployment serves two origins on the same host but different ports:| Port | Origin | Serves |
|---|---|---|
3210 | client API (backend) | Browser client functions. This is what NEXT_PUBLIC_CONVEX_URL points at for Mission Control. |
3211 | site (HTTP actions) | The agent’s pairing register, heartbeat, and command endpoints. |
:3211. Its pairing register call (/pairing/register), status heartbeat (/agent/status), and command poll (/agent/commands) are all HTTP actions, which Convex serves on the site origin, not the client API.
So for a backend at https://your-convex.example.com, the agent points at:
3. Apply the change
After editing/etc/ados/config.yaml, restart the supervisor so the new server mode takes effect.
Server modes at a glance
| Mode | Behavior |
|---|---|
local | Default on a fresh install. No cloud. Mission Control reaches the agent directly over the LAN, hotspot, or USB tether. |
self_hosted | Points at your own Convex deployment and MQTT broker. This page. |
cloud | Uses the Altnautica-managed backend. |
Local mode is correct, not a misconfiguration. If you are running a single LAN bench or field setup, you do not need self-hosting at all. Pair the drone over the LAN by hostname or IP from the Add-a-Node card. Self-hosting is for remote and cross-network access, where the agent and the GCS are on different networks and need a relay in between.
MQTT and the rest of the stack
Theserver.self_hosted.mqtt_broker and mqtt_port point the agent at your MQTT bridge. The default self-hosted MQTT port is 8883 (TLS). Telemetry and status publish on ados/{deviceId}/telemetry and ados/{deviceId}/status. See the MQTT bridge page to stand up the broker, and the video relay page for the video path.
For ports and a checklist when something does not connect, see Troubleshooting and ports.