Project Structure
ADOS lives in two repositories. Both are open-source under GPLv3.ADOS Mission Control (GCS)
Repository: github.com/altnautica/ADOSMissionControl Stack: Next.js 16, React 19, TypeScript, Zustand, Tailwind CSS, Leaflet, CesiumJSADOSMissionControl/
├── src/
│ ├── app/ # Next.js App Router pages
│ │ ├── page.tsx # Dashboard (home)
│ │ ├── command/ # Drone Command tab
│ │ ├── plan/ # Mission Planning tab
│ │ ├── simulate/ # Simulation tab (Cesium 3D preview/replay)
│ │ ├── config/ # App configuration
│ │ ├── pair/ # Add-a-node local pairing flow
│ │ ├── flight-logs/ # Flight log review
│ │ ├── hud/ # Standalone HUD (kiosk mode)
│ │ ├── community/ # Changelog, roadmap, kanban
│ │ └── api/ # Route handlers (auth, LAN-pairing proxy)
│ │
│ ├── components/ # React components
│ │ ├── command/ # Command tab components
│ │ ├── fc/ # Flight controller config panels (60+ panels)
│ │ ├── drone-detail/ # Per-drone detail tabs (overview, parameters, configure, ...)
│ │ ├── planner/ # Mission planning components
│ │ ├── simulation/ # Simulation components
│ │ ├── hardware/ # Ground station Hardware tab
│ │ ├── map/ # Leaflet map layers
│ │ ├── hud/ # HUD overlay widgets
│ │ ├── plugins/ # Plugin host and UI slots
│ │ ├── vision/ # Vision engine UI
│ │ ├── fleet/ # Fleet sidebar and drone cards
│ │ ├── dashboard/ # Dashboard panels and drone-detail tab descriptors
│ │ ├── shared/ # Shared components
│ │ └── ui/ # Shared UI primitives
│ │
│ ├── stores/ # Zustand state stores (more than 70 files)
│ │ ├── telemetry-store.ts
│ │ ├── drone-manager.ts
│ │ ├── video-store.ts
│ │ ├── ground-station-store.ts
│ │ ├── settings-store.ts
│ │ ├── parameter-store.ts
│ │ └── ...
│ │
│ ├── lib/ # Core libraries
│ │ ├── protocol/ # MAVLink + MSP protocol layer
│ │ │ ├── mavlink-parser.ts # Streaming v1/v2 parser
│ │ │ ├── mavlink-adapter.ts # MAVLinkAdapter (83 decoders)
│ │ │ ├── msp-adapter.ts # MSPAdapter (34 decoders, 21 encoders)
│ │ │ ├── drone-protocol.ts # DroneProtocol interface
│ │ │ ├── mavlink-constants.ts # Sensor-status maps and parsing
│ │ │ ├── mavlink-crc-extra.ts # CRC_EXTRA, payload lengths
│ │ │ └── encoders/ # 8 encoder modules
│ │ ├── video/
│ │ │ ├── webrtc-client.ts # WHEP + P2P MQTT WebRTC
│ │ │ └── mse-player.ts # MediaSource fallback
│ │ ├── agent/ # Local-first pairing client + capability inference
│ │ ├── plugins/ # GCS plugin capabilities and slot registry
│ │ └── utils/
│ │
│ ├── hooks/ # Custom React hooks
│ │ ├── use-panel-params.ts # Parameter read/write for panels
│ │ ├── use-visible-tabs.ts # Capability-driven tab visibility
│ │ └── use-ground-station-subscriptions.ts
│ │
│ ├── mock/ # Demo-mode mock engine + 7 simulated drones
│ │
│ └── ... (locales live at the repo root)
│
├── locales/ # i18n translations (16 languages)
│ ├── en.json
│ ├── hi.json
│ ├── ja.json
│ └── ...
│
├── convex/ # Convex backend (OSS standalone)
│ ├── schema.ts # auth tables plus custom application tables
│ ├── profiles.ts
│ ├── communityChangelog.ts
│ ├── cmdDroneStatus.ts # Cloud relay drone status
│ ├── cmdDroneCommands.ts # Cloud relay command queue
│ └── ...
│
├── tools/
│ ├── sitl/ # ArduPilot SITL launcher + TCP-to-WS bridge
│ ├── mqtt-bridge/ # Mosquitto + MQTT-to-Convex bridge (Docker)
│ └── video-relay/ # RTSP-to-fMP4 relay (Docker)
│
├── public/ # Static assets
├── electron/ # Electron wrapper for desktop builds
├── package.json
├── next.config.ts
├── tailwind.config.ts
└── tsconfig.json
Key files to know
| File | What it does |
|---|---|
src/lib/protocol/drone-protocol.ts | The interface every protocol adapter implements |
src/lib/protocol/mavlink-adapter.ts | MAVLink v2 adapter with 83 decoders and 33 command handlers |
src/lib/protocol/msp-adapter.ts | MSP adapter for Betaflight with 34 decoders and 105 virtual params |
src/stores/drone-manager.ts | Central coordinator between protocol and stores |
src/stores/telemetry-store.ts | Ring-buffered telemetry with attitude, GPS, battery history |
src/lib/video/webrtc-client.ts | WHEP and P2P MQTT WebRTC client |
src/hooks/use-panel-params.ts | Universal parameter hook used by every flight controller config panel (60+) |
src/stores/settings-store.ts | Persisted user settings |
convex/schema.ts | Convex database schema for the OSS standalone backend |
ADOS Drone Agent
Repository: github.com/altnautica/ADOSDroneAgent Stack: Rust (Cargo workspace, tokio, axum) plus Python 3.11+ (FastAPI, structlog), systemd-managed. The long-running and safety-critical services are Rust binaries incrates/; Python handles AI and vision, the plugin runtime, setup, HAL detection, and the residual web API.
ADOSDroneAgent/
├── crates/ # Rust services and shared libraries (Cargo workspace lives here)
│ ├── ados-supervisor/ # Process orchestrator: gates and supervises the systemd units
│ ├── ados-mavlink-router/ # FC serial link, MAVLink IPC fan-out, vehicle-state snapshot
│ ├── ados-control/ # Native HTTP front on :8080 (status/pairing/command API)
│ ├── ados-cloud/ # Cloud relay: heartbeat push, command poll, MQTT + WebRTC signaling
│ ├── ados-video/ # Video pipeline: ffmpeg / MediaMTX / wfb_tee supervisor
│ ├── ados-radio/ # WFB-ng TX manager: monitor mode, FHSS hop, watchdogs (drone)
│ ├── ados-groundlink/ # WFB receive, channel acquisition, video fan-out, mesh (ground)
│ ├── ados-net/ # Ground-station uplink matrix: priority failover + health probe
│ ├── ados-display/ # OLED / SPI-LCD render engine, drivers, boot-time probe
│ ├── ados-hid/ # Touch calibration, PIC arbiter, button + gamepad daemons
│ ├── ados-gpio/ # GPIO output substrate (buzzer / LED, software PWM)
│ ├── ados-vision/ # Vision host: frame rings, model registry, plugin bridge
│ ├── ados-plugin-host/ # Plugin RPC host: per-plugin socket + capability-token gating
│ ├── ados-logd/ # Durable SQLite log + telemetry store, queryable on :8090
│ ├── ados-macpin/ # Stable-MAC pinning for adapters that randomize each boot
│ ├── ados-hal-probe/ # Probe-first hardware-capability detection
│ ├── ados-protocol/ # IPC wire contracts: framing, plugin RPC, vehicle-state codec
│ ├── ados-capabilities-codegen/ # Generates the capability catalog (Python/Rust/TS) from capabilities.toml
│ ├── ados-sdk/ # Rust plugin-author SDK (IPC client, driver traits, runner)
│ ├── ados-installer/ # Step-graph installer that turns a fresh SBC into a paired agent
│ └── ados-tui/ # Terminal dashboard launched by `ados` with no subcommand
│
├── src/
│ └── ados/ # Python: AI/vision, plugin runtime, setup, HAL, residual API
│ ├── __init__.py # Version (single source of truth)
│ ├── core/ # IPC helpers, config models, identity, pairing, health probe
│ ├── services/ # Python-backed units and driver/manager glue
│ │ ├── api/ # Residual FastAPI (internal socket, behind ados-control)
│ │ ├── health/ # CPU / RAM / temperature monitor
│ │ ├── peripherals/ # USB and sensor manager
│ │ ├── discovery/ # mDNS advertisement
│ │ ├── ground_station/ # Ethernet, WiFi-client, modem managers
│ │ ├── setup_webapp/ # First-boot setup and captive portal
│ │ └── ...
│ ├── api/
│ │ ├── runtime.py # API runtime facade
│ │ └── routes/ # FastAPI route modules (config, pairing, plugins, ...)
│ ├── hal/
│ │ └── boards/ # Board profile YAMLs (17 profiles)
│ ├── plugins/ # Plugin manifest, signing, IPC (Python plugin runtime)
│ ├── sdk/ # Python plugin-author SDK (driver, vision, testing)
│ ├── setup/ # Universal setup facade and models
│ ├── cli/ # Click CLI (ados, status, update, ...)
│ └── bootstrap/
│ └── profile_detect.py # Hardware fingerprint scoring
│
├── data/
│ └── systemd/ # All systemd unit files (~39 units)
│ ├── ados-supervisor.service
│ ├── ados-mavlink.service
│ ├── ados-control.service
│ ├── ados-api.service
│ ├── ados-cloud.service
│ ├── ados-logd.service
│ ├── ados-video.service
│ ├── ados-wfb.service
│ ├── ados-hostapd.service
│ ├── ados-oled.service
│ └── ...
│
├── scripts/
│ ├── install.sh # One-line installer bootstrap (fetches the Rust installer)
│ ├── drivers/ # Out-of-tree driver build helpers
│ └── ...
│
├── docs/
│ ├── oem/ # Integrator deployment and provisioning notes
│ └── ground-station/ # Ground station reference
│
├── pyproject.toml
├── README.md
└── CONTRIBUTING.md
Key files to know
| File | What it does |
|---|---|
src/ados/__init__.py | Version string used by package metadata, API status, and setup status |
crates/ados-supervisor/src/registry.rs | The service catalog: profile gates, role gates, and the circuit breaker |
crates/ados-mavlink-router/ | Reads FC serial, fans MAVLink to /run/ados/mavlink.sock, serves the :8765 WS |
crates/ados-control/ | The native HTTP front on :8080 |
crates/ados-video/ | Camera encode and MediaMTX supervision (drone) |
src/ados/api/runtime.py | Residual FastAPI runtime facade, reached behind the Rust front |
src/ados/bootstrap/profile_detect.py | Score-based hardware fingerprint for air vs ground |
src/ados/hal/boards/*.yaml | Board-specific GPIO, UART, video, and navigation config |
scripts/install.sh | The one-line installer bootstrap |
Config files on a deployed system
| Path | Purpose |
|---|---|
/etc/ados/config.yaml | Main agent configuration (profile, cloud, network, video) |
/etc/ados/profile.conf | Detected profile with fingerprint snapshot |
/opt/ados/bin/ | Installed Rust service binaries |
/opt/ados/venv/ | Installed Python virtual environment |
/run/ados/mavlink.sock | Runtime MAVLink IPC socket |
/run/ados/state.sock | Runtime JSON telemetry socket |
/run/ados/api-internal.sock | Internal FastAPI socket behind the Rust front |
/var/ados/logd/logs.db | Durable log and telemetry store (ados logs query) |
What is next
- Contributing Guide for how to add features to both repos
- Agent Services for the systemd architecture
- MAVLink Protocol for the protocol layer