> ## Documentation Index
> Fetch the complete documentation index at: https://docs.altnautica.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Project structure

> Directory maps and key files for the ADOS repositories: Mission Control, the agent, Extensions, the MCP server and the Android GCS.

ADOS spans several repositories. Their licences are listed on [Open source](/getting-started/open-source). This page is the reference for how each one is laid out. Generated output, dependencies and build folders (`node_modules/`, `dist/`, `target/`, virtual environments) are left out.

## Mission Control

**Repository:** [github.com/altnautica/ADOSMissionControl](https://github.com/altnautica/ADOSMissionControl)

**Stack:** Next.js 16, React 19, TypeScript, Zustand 5, Tailwind CSS 4, Leaflet, CesiumJS, Convex, Electron.

```text theme={"theme":{"light":"github-light","dark":"github-dark"}}
ADOSMissionControl/
├── src/
│   ├── app/                     # Next.js App Router
│   │   ├── page.tsx             # Dashboard (home)
│   │   ├── plan/                # Mission planner
│   │   ├── simulate/            # 3D simulation and replay (Cesium)
│   │   ├── flight-logs/         # Flight log review and reports
│   │   ├── mcp/                 # MCP server connections
│   │   ├── config/              # App settings (data, firmware, input, notifications, plugins, theme, video, ...)
│   │   ├── pair/                # Add a node over the LAN
│   │   ├── community/           # Changelog and contact
│   │   └── api/                 # Route handlers (auth, LAN pairing proxy, firmware and manifest fetch, ...)
│   ├── components/              # React components by area
│   │   ├── dashboard/           # Fleet dashboard
│   │   ├── drone-detail/        # Per-vehicle tabs, FC panel navigation and routing
│   │   ├── fc/                  # Flight controller configuration panels
│   │   ├── cockpit/             # Flight cockpit
│   │   ├── flight/              # Flight controls
│   │   ├── planner/             # Mission planning
│   │   ├── simulation/          # Simulation
│   │   ├── map/                 # Map layers
│   │   ├── hardware/            # Ground station hardware views
│   │   ├── connect/             # Connect dialog and transport panels
│   │   ├── plugins/             # Extension host and UI slots
│   │   ├── vision/              # Vision views
│   │   ├── shared/, ui/         # Shared components and primitives
│   │   └── ...
│   ├── stores/                  # Zustand stores
│   ├── lib/                     # Core libraries
│   │   ├── protocol/            # MAVLink and MSP: parser, adapters, encoders, transports
│   │   ├── video/               # WebRTC (WHEP and MQTT-signalled) and MSE playback
│   │   ├── agent/               # Agent client: pairing, status, capabilities
│   │   ├── plugins/             # Extension runtime, capabilities, slot registry
│   │   ├── dronecan/, can/      # DroneCAN
│   │   ├── mission/, patterns/  # Mission model and survey patterns
│   │   └── ...
│   ├── hooks/                   # React hooks (use-panel-params.ts and others)
│   ├── mock/                    # Demo mode: flight engine, mock protocol, demo fleet
│   ├── i18n.ts                  # Translation setup
│   └── types/
├── locales/                     # Translations, one JSON file per language (en.json is the source)
├── convex/                      # Convex backend: schema, HTTP actions, cloud relay tables
├── electron/                    # Desktop app (main process, native UDP and TCP sockets, updater)
├── tools/
│   ├── sitl/                    # ArduPilot SITL launcher and WebSocket bridge
│   ├── mavlink-bridge/          # Local bridge for UDP and TCP links from a browser
│   ├── mqtt-bridge/             # Mosquitto broker deployment
│   ├── video-relay/             # RTSP to fragmented MP4 over WebSocket
│   ├── selfhost/                # All-in-one self-host stack
│   └── deploy/                  # Self-host deploy tool
├── public/                      # Static assets
├── scripts/                     # Build and maintenance scripts
├── tests/
├── package.json
├── next.config.ts
├── CONTRIBUTING.md
└── SELFHOSTING.md
```

### Key files

| File | What it does |
| - | - |
| `src/lib/protocol/types/protocol.ts` | The `DroneProtocol` interface every adapter implements |
| `src/lib/protocol/mavlink-adapter.ts` | The MAVLink adapter for ArduPilot and PX4 |
| `src/lib/protocol/mavlink-adapter-frame-handlers.ts` | `routeFrame()`: message id to handler |
| `src/lib/protocol/msp-adapter.ts` | The MSP adapter for Betaflight and iNav |
| `src/lib/protocol/mavlink-crc-extra.ts` | CRC\_EXTRA and payload lengths for every decoded message |
| `src/stores/drone-manager.ts` | Connected vehicles, their adapters and the selected vehicle |
| `src/stores/drone-manager-bridge.ts` | `bridgeTelemetry()`: adapter callbacks to stores |
| `src/stores/telemetry-store.ts` | Ring-buffered telemetry |
| `src/hooks/use-panel-params.ts` | The parameter hook every configuration panel uses |
| `src/components/drone-detail/fc-nav-items.tsx` | The list of flight controller configuration panels |
| `src/components/drone-detail/FcPanelRouter.tsx` | Maps a panel id to its component |
| `src/lib/video/webrtc-client.ts` | WHEP and MQTT-signalled WebRTC client |
| `convex/schema.ts` | Convex database schema |
| `convex/http.ts` | Convex HTTP actions the agent calls (`/agent/status`, `/agent/commands`, ...) |

## Drone Agent and Ground Agent

**Repository:** [github.com/altnautica/ADOSDroneAgent](https://github.com/altnautica/ADOSDroneAgent)

**Stack:** Rust (a Cargo workspace in `crates/`, tokio, axum) and Python 3.11 or later, managed by systemd. One codebase serves every profile.

```text theme={"theme":{"light":"github-light","dark":"github-dark"}}
ADOSDroneAgent/
├── crates/                          # Rust workspace
│   ├── ados-supervisor/             # Gates, starts and supervises the systemd units
│   ├── ados-mavlink-router/         # FC serial link, MAVLink IPC fan-out, vehicle-state snapshot, :8765 WebSocket
│   ├── ados-control/                # Native HTTP front on :8080
│   ├── ados-cloud/                  # Cloud relay: status heartbeat, command poll, MQTT relays, WebRTC signaling
│   ├── ados-video/                  # Video pipeline: ffmpeg, MediaMTX and radio tap supervision
│   ├── ados-radio/                  # WFB-ng link: adapter selection, monitor mode, TX, frequency hopping
│   ├── ados-groundlink/             # Ground data plane: WFB receive, video fan-out, mesh
│   ├── ados-net/                    # Ground uplink matrix: wired, Wi-Fi station, cellular, failover
│   ├── ados-display/                # OLED and LCD rendering, panel probe
│   ├── ados-hid/                    # Touch, buttons, gamepads and the front-panel arbiter
│   ├── ados-gpio/                   # GPIO output (buzzer, LED)
│   ├── ados-crsf/                   # CRSF and ExpressLRS RC control lane
│   ├── ados-config-tunnel/          # Config over radio (MAVLink TUNNEL)
│   ├── ados-swarmbus/               # Swarm state bus (2 Hz position beacons)
│   ├── ados-swarm-control/          # Onboard swarm control laws and task allocation
│   ├── ados-vision/                 # Vision engine host: frame rings, model registry
│   ├── ados-offload/                # Perception offload for drones without an NPU
│   ├── ados-plugin-host/            # Plugin RPC host and capability-token checks
│   ├── ados-logd/                   # Black-box log and telemetry store (SQLite), :8090
│   ├── ados-macpin/                 # Stable MAC pinning for adapters that randomize it
│   ├── ados-hal-probe/              # Probe-first hardware capability detection
│   ├── ados-config/                 # Config loading for the Rust services
│   ├── ados-protocol/               # IPC wire contracts and contracts.toml
│   ├── ados-capabilities-codegen/   # Generates the capability and contract tables for Rust, Python and TypeScript
│   ├── ados-sdk/                    # Rust plugin SDK
│   ├── ados-installer/              # Step-graph installer
│   └── ados-tui/                    # Terminal dashboard (`ados` with no subcommand)
├── src/ados/                        # Python package
│   ├── api/                         # Residual FastAPI app, behind ados-control on an internal socket
│   ├── bootstrap/                   # profile_detect.py: fallback profile detection
│   ├── cli/                         # The `ados` command
│   ├── core/                        # Config models, IPC helpers, generated contracts
│   ├── hal/                         # Board detection and board profiles (hal/boards/*.yaml)
│   ├── plugins/                     # Python plugin runtime support
│   ├── sdk/                         # Python plugin SDK
│   ├── services/                    # Entry points for Python-backed units
│   ├── setup/                       # Setup facade
│   ├── dashboard/, cockpit/         # Built web bundles served by ados-control
│   └── __init__.py                  # Agent version
├── dashboard/                       # Agent dashboard web app (source)
├── cockpit/                         # On-box cockpit web app (source)
├── web-shared/                      # Code shared by the two web apps
├── data/systemd/                    # Unit files
├── schemas/                         # Agent config and plugin manifest JSON schemas
├── scripts/                         # install.sh bootstrap, build and release helpers
├── vendor/                          # WFB-ng and the RTL8812EU driver
├── docs/                            # Reference material
├── tests/
├── pyproject.toml
├── CONTRIBUTING.md
└── README.md
```

### Key files

| File | What it does |
| - | - |
| `crates/ados-supervisor/src/registry.rs` | The unit catalog: categories, profile and role gates, crash-loop handling |
| `crates/ados-protocol/contracts.toml` | Every IPC contract and its version |
| `crates/ados-control/src/routing.rs` | Which routes are native and which prefixes go to the residual API |
| `crates/ados-cloud/src/mqtt/mod.rs` | The MQTT topics and broker selection |
| `src/ados/bootstrap/profile_detect.py` | The fallback hardware fingerprint used when no profile is set |
| `src/ados/hal/boards/*.yaml` | Board profiles |
| `data/systemd/*.service` | The unit files |
| `scripts/install.sh` | The installer bootstrap |
| `src/ados/__init__.py` | The agent version |

The unit list is on [Systemd services](/drone-agent/systemd-services).

## Extensions

**Repository:** [github.com/altnautica/ADOSExtensions](https://github.com/altnautica/ADOSExtensions)

```text theme={"theme":{"light":"github-light","dark":"github-dark"}}
ADOSExtensions/
├── extensions/                  # First-party Extensions, one directory each
│   ├── follow-me/
│   ├── mavlink-gimbal-v2/
│   ├── siyi-pod/
│   ├── thermal-camera-flir-lepton-usb/
│   ├── vision-nav/
│   └── world-engine/
├── packages/
│   ├── create-ados-plugin/      # Plugin scaffolder
│   ├── plugin-sdk/              # TypeScript SDK for the Mission Control side
│   └── extension-ui/            # Shared UI primitives for first-party Extensions
├── scripts/                     # Lint, pack, sign and submit
├── docs/
├── Cargo.toml, pyproject.toml, package.json
└── README.md
```

## MCP server

**Repository:** [github.com/altnautica/ADOS-MCP](https://github.com/altnautica/ADOS-MCP)

```text theme={"theme":{"light":"github-light","dark":"github-dark"}}
ADOS-MCP/
├── src/
│   ├── server.ts, cli.ts, index.ts   # Server and command-line entry points
│   ├── transport/                    # MCP transports
│   ├── auth/, gate/                  # Scopes and confirmation for actions that move an aircraft
│   ├── audit/                        # Call audit trail
│   ├── discovery/, registry/         # Finding and tracking nodes
│   ├── catalog/                      # Tool catalog
│   ├── plane/                        # Node and fleet access
│   └── param-metadata/
├── catalog/
├── test/
└── package.json
```

## Android GCS

**Repository:** [github.com/altnautica/ADOSAndroidGCS](https://github.com/altnautica/ADOSAndroidGCS)

**Stack:** Kotlin, Jetpack Compose, Gradle.

```text theme={"theme":{"light":"github-light","dark":"github-dark"}}
ADOSAndroidGCS/
├── app/                 # Application module
├── feature/             # Screens: cockpit, configure, connect, fleet, logs, node, plan, settings
├── core/                # Shared modules: agent, cloud, data, database, designsystem, extensions, link, map, mavlink, model, skills, video
├── radio/               # Radio modules: rx, usb
├── build-logic/         # Gradle convention plugins
├── baselineprofile/
└── settings.gradle.kts
```

## Paths on a running node

| Path | Purpose |
| - | - |
| `/etc/ados/config.yaml` | Main agent configuration |
| `/etc/ados/profile.conf` | The node's profile, written at install |
| `/etc/ados/pairing.json` | Pairing state and key (mode 0600) |
| `/opt/ados/bin/` | Rust service binaries |
| `/opt/ados/venv/` | Python virtual environment |
| `/run/ados/mavlink.sock` | MAVLink IPC socket |
| `/run/ados/state.sock` | Vehicle-state socket (length-prefixed msgpack, see [Agent services](/architecture/agent-services#vehicle-state-socket)) |
| `/run/ados/api-internal.sock` | Residual API socket behind `ados-control` |
| `/run/ados/logd-query.sock` | Black-box query socket |

## Next steps

<CardGroup cols={2}>
  <Card title="Code recipes" icon="code-pull-request" href="/architecture/contributing-guide">
    Add a panel, a decoder, a store or a service.
  </Card>

  <Card title="Contributing" icon="code-branch" href="/getting-started/contributing">
    Set up a development environment and open a pull request.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.