// Uplink
Link this console to your radio over USB serial. The radio speaks the same protobuf phone API as the Android app — everything here interops with it.
Windows 11: plug the T-Deck / radio in over USB. If no COM port appears, install the CP210x (Silicon Labs) or CH9102 USB-serial driver for your board, then re-select the port.
The radio's own debug output shares the serial wire with the framed data stream. Lines like “Client set channel 1” or “Ignore unauthorized admin payload” appear here — the ground truth for whether a pushed setting actually applied.
// Nodes on the mesh
Live view of every node heard via NodeInfo broadcasts and received packets. Cards show the node's Outpost profile (handle, party, vehicle), rig links, and mesh stats (SNR, distance, altitude, battery, last heard) whenever they're known. Medical info is never shown here. Your own radio is tagged SELF.
// Chat — mesh text
Real chat with the mesh: plain mesh text (port 1) on any channel, readable by any client. Your messages are amber, everyone else's are cyan-edged. Incoming text on any channel lands here, tagged with its channel. Delivery receipts: a ✓ appears when another node is heard relaying your message; unheard messages retry automatically with a fresh packet ID (up to 3 attempts), then show ✗ — click to retry by hand.
Receiving is channel-agnostic — sending uses the channel selected here.
// Polls — group votes
Polls ride the selected chat channel above. Incoming polls appear here with vote buttons; results tally live from VOTE traffic.
// Map — offline grid
No tiles, no network — a relative local grid. Nodes in amber, your own radio in green. Waypoints from OVL1 traffic carry a category marker: ▲ CAMP · ● WATER · ■ FUEL · ★ VIEW · ✕ HAZ · ◆ GEN. Click a marker for details. (Night mode renders markers in red — shape still distinguishes category.)
// Rooms — private groups
A room is one secondary mesh channel (1–7) with its own key and a category: CONVOY (offroad groups), BASECAMP (camp/RV — bulletin-first), or TRAIL (hikers — safety-first). All Outpost traffic on a room channel is relayed by strangers' nodes but unreadable to them. Invite codes are fully interoperable with the Android app — create here, join there, or the reverse.
Channels on this radio
| # | Name | Role | Key |
|---|---|---|---|
| Connect to read channels. | |||
Create room
Join room
My rooms (stored on this PC)
Honest limits: encryption hides content, not presence — your radio still appears in nearby users' node lists. Anyone handed an invite code can read convoy traffic; rotate by creating a fresh convoy.
// Operator profile
Stored only on this PC (localStorage). Share it on the mesh when you choose — wire format is byte-compatible with the Android app's OVL1:PROF encoding.
Push to mesh
Privacy: medical is included only when you explicitly allow it here — it is never in public broadcasts. The Android app enforces the same rule.
// Test bench
Fire any OVL1 packet type at the mesh and watch the decoded replies roll in. This is the desk-testing rig for firmware and app behavior.
SOS beacon
SOS profile card
Trail assist
Waypoint
Breadcrumb
Check-in / chat
Hazard pin
Overdue escalation
Uses your saved profile for handle / party / descriptor.
Raw text (port 1)
Plain text on the selected channel.
Packet log — decoded live
// Radio admin
Owner, position, channels, and node actions on your own radio. Admin frames go to your node over the encrypted local link — nothing here touches anyone else's radio. No LoRa region editing (regulatory).
Node owner
Applies immediately on the radio; the mesh learns it on the next NodeInfo broadcast. This is the name other nodes see — set it after a flash wipe.
Position broadcast
Low-profile quiets position chatter to ~1×/day. It is obfuscation, not invisibility — anyone in RF range can still hear the radio transmit.
Region (recovery)
Region is normally set on the device and is deliberately not offered as a setting. This recovery button exists for one case: a flash that wiped the radio's config, leaving the region UNSET — in that state the radio cannot transmit at all, not even to deliver admin commands to itself. It writes US only, read-modify-write: every other LoRa setting (preset, hop limit, TX power) goes back exactly as the radio reported it.
Disable a secondary channel
Node actions
Reboots in ~5 seconds. The serial link will drop — reconnect after it comes back.
Channels on this radio (read-only)
| # | Name | Role | Key |
|---|---|---|---|
| Connect to read channels. | |||
Channel slots are managed from the Convoys tab. Key shows PSK length only — never the key itself.
// Firmware — flash the radio
Flash Outpost firmware onto a T-Deck (ESP32-S3) over USB using the ESP ROM bootloader protocol — the same tech as the stock web flasher. No extra tools, no drivers beyond your board's USB-serial.
The flasher resets the board into download mode automatically via DTR/RTS — this works on the T-Deck in most cases. If it can't connect: hold BOOT, tap RESET (or hold BOOT while plugging in USB), then hit FLASH again.
The T-Deck resets into Outpost on its own. Open the Connect tab and hit CONNECT to link the fresh radio — then Backup → Re-provision pushes your convoy channels back onto it.
// Backup — encrypted
Backs up everything this console stores: the convoy list including private keys, your full profile, and console settings. Encrypted in your browser with a passphrase you choose — the passphrase is never stored anywhere. Lose it and the backup is unrecoverable. Pair it with the Firmware tab: back up before flashing, restore and re-provision after.
Export
PBKDF2-SHA256 · 250,000 iterations · 16-byte salt →
AES-GCM-256 · 12-byte IV. Downloads as
outpost-backup-YYYYMMDD-HHMM.json containing only
{version, salt, iv, ciphertext} — no plaintext keys.
Import / restore
Push the convoy channels saved on this PC onto the linked radio.
Restore is all-or-nothing: the file is fully validated before anything is written, so a wrong passphrase or corrupt file can never half-apply.