Alpha

Under active development. Breaking changes expected. APIs, installers, and UI may shift between releases.

PHYSICAL UIAvailable

A screen and four buttons.

Every ground node ships with a 128 by 64 OLED and four tactile buttons. A bench engineer is fine with SSH. A field pilot is not. This is the field-ready surface.
Available

Usable today. Early access — some pieces run behind a feature flag and APIs may shift between releases.

5
Status screens
4
Tactile buttons
<120s
Field tap-to-pair

STATUS SCREENS

Five screens. Auto-cycle every five seconds.

A short press freezes on one screen. The OLED uses a 0.96 inch SSD1306 or a 1.3 inch SH1106 over I2C. The buttons need no external resistors.

Link

RSSI, bitrate, FEC repaired, FEC lost, channel.

Drone

Device id, flight mode, battery percent, GPS satellite count.

GCS

Connected client list, HDMI kiosk status, IP addresses.

Net

Access point SSID and IP, tether IP, current uplink and status.

System

CPU, RAM, temperature, uptime, agent version.

OLED hardware
Panel
SSD1306 / SH1106
Interface
I2C
Address
0x3C
Resolution
128 x 64
Buttons
4 tactile
Button GPIO
5, 6, 13, 19

BUTTONS

Four buttons. Two layers.

A short press navigates. A long press (two seconds minimum) fires a layer-two action. Destructive actions require a visible confirm on the OLED before they run.

B1

Short press

Cycle status screens up. Menu up.

Long press

Toggle recording to local storage.

B2

Short press

Cycle status screens down. Menu down.

Long press

Toggle the WiFi access point on or off.

B3

Short press

Select, enter a submenu, confirm.

Long press

Rotate the WFB-ng session key, open a 60s mesh pairing window.

B4

Short press

Back, leave a submenu, cancel.

Long press

Factory reset, a 10 second hold with an on-screen confirm.

MENU TREE

Flat on purpose.

Enter the menu with the select button from any status screen. Every item is reachable in three presses or fewer.

Menu structure
Main
 ├─ Pair with drone
 ├─ Mesh
 │   ├─ Role: direct | relay | receiver
 │   ├─ Accept relay (60s window)   [receiver]
 │   ├─ Join mesh                   [unconfigured or direct]
 │   ├─ Auto-accept: ON | OFF       [receiver]
 │   ├─ Neighbors (list + remove)   [relay or receiver]
 │   ├─ Leave mesh                  [relay or receiver]
 │   └─ Mesh id (view-only)
 ├─ Network
 │   ├─ WiFi access point on/off
 │   ├─ WiFi client scan/join
 │   ├─ Cellular modem status
 │   └─ Uplink priority
 ├─ Radio
 │   ├─ Channel
 │   └─ Bitrate (fixed to the FEC profile)
 ├─ Display
 │   ├─ HDMI resolution
 │   └─ OLED brightness
 ├─ System
 │   ├─ Version
 │   ├─ Reboot
 │   └─ Factory reset
 └─ Back to status

FIELD TAP-TO-PAIR

The magic moment.

Two nodes, no laptop, under two minutes. The OLED and four buttons are the entire provisioning surface. A Curve25519 key exchange runs over the air and the invite bundle is sealed with ChaCha20-Poly1305, scoped to the mesh.

Receiver screen
┌─────────────────────┐
│ [receiver]          │
│                     │
│ Accepting relay     │
│ 60s remaining       │
│                     │
│ Pending: 1          │
│ Accepted: 0         │
│                     │
│ B1 accept  B4 deny  │
└─────────────────────┘
Long-press to open the pairing window. The OLED shows the pending and accepted counts.
Relay screen
┌─────────────────────┐
│ [relay joining]     │
│                     │
│ Scanning for mesh.. │
│                     │
│ Found:              │
│  ados-gs-a4b2  -52  │
│  ados-gs-1f0c  -78  │
│                     │
│ B1 join  B4 cancel  │
└─────────────────────┘
The relay listens on the mesh carrier, lists receivers with link quality, and joins on a tap.

On the receiver, long-press to open the window. On the incoming relay, enter Mesh and pick Join mesh. The relay filters for receivers with an open window and shows them with link quality. Tap to request, tap on the receiver to accept, and the mesh comes up. The wall-clock target is under 120 seconds.

Distributed receive

BURN-IN MITIGATION

OLEDs wear. The agent works around it.

Field units run for long sessions. The OLED driver rotates pixel state and dims the display to stretch panel life.

Auto-dim

Drops to 20 percent brightness after 60 seconds with no button activity.

Pixel invert

Flips every pixel every 10 minutes, invisible during status cycling.

Screensaver

A bouncing logo after 5 minutes idle. Status returns on any button.

GRACEFUL DEGRADATION

Missing hardware is not an error.

If the OLED or the buttons are absent, the agent does not complain. Every menu function is also reachable from the setup webapp or the Mission Control Hardware tab.

No OLED

Status is served over HTTP at the setup webapp, and menu actions are available in the Hardware tab. No boot error, no service crash.

No buttons

Status screens still cycle every five seconds. Menu entry is disabled. Use the setup webapp or the Hardware tab to change config.

A screen and four buttons. Enough for the field.

The full screen reference, menu walkthrough, and button reassignment live in the public docs.

Physical UI docs
Get Early Access