// 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.
Right-click a card for actions (direct message, request position/profile, show on map). ★ favorites are yours alone.
// Chat + Rooms
One surface for every conversation: pick a room (or a direct message) on the left; the thread and the composer follow. Room receipts are honest: ✓ relayed appears when another node is heard relaying your message (one automatic retry after ~15 s, then click to resend). Direct messages are addressed to one node, PKI-encrypted by the radios when keys are known, and get a real ✓ delivered from the receiver's own ACK.
Room threads drive this selection; it remains the channel polls post to.
Polls ride the selected chat channel above. Incoming polls appear here with vote buttons; results tally live from VOTE traffic.
// Rooms — manage
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.
// Map
Pick a layer: OSM Dark street tiles (OpenStreetMap data via CARTO, needs internet), Satellite (Esri imagery), Google (needs internet + your own Google Maps API key), or Offline plot — the relative grid that works with no network at all, which is the field fallback. Nodes in amber, your own radio in green. Waypoints carry a category marker: ▲ CAMP · ● WATER · ■ FUEL · ★ VIEW · ✕ HAZ · ◆ GEN. On tile layers, drag to pan; click a marker for details.
// 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.
Node Type represents who or what this node is used for. It is what this node IS on everyone's map and node cards — a person, a vehicle, a fixed station. It is NOT the radio's Device type: that's the radio's mesh job (Scout / Sentinel / Drifter), set in Settings. A radio mounted in a vehicle is still a Scout — or a Sentinel if it relays; "Vehicle" lives here. Station means fixed sensing gear — a weather station or sensor platform, out there unattended.
Your Category says what you — the person — are out doing. Category is the per-kind descriptor, the same word rooms use: a Person's Category is this list, a Vehicle's Category is its vehicle type, a Tracker's is its tracker type. This picker belongs to Person profiles only: when your Node Type is a vehicle, a station, or a tracker, it switches off — the kind's own Category field above carries the descriptor instead, and a person's Category stays off the wire.
Audiences decide who gets your profile when they ask for it: Public — anyone who asks. Friends — nodes on your friend list. Room — members of your in-scope rooms. Request only — nobody automatically; you approve each request. Invisible / Never — never shared. Medical has its own picker because it's the sensitive part — and it is never included in a public broadcast, whatever either picker says.
Stores the FULL profile — medical included — plus both audience settings inside your connected radio. From then on the radio answers profile requests itself, enforcing your audiences, even with this PC off. Wait for the "radio confirmed" status: the radio echoes your profile's fingerprint back as the receipt. Radios on older firmware without the storage module will report "did not confirm". The copy on this PC remains your editing draft — and it's what stock-firmware radios (like a T1000-E) rely on, since they can't store profiles themselves.
Push to mesh
The channel the three profile actions below send on.
Broadcast profile — sends your whole profile from the form to everyone in earshot on that channel; their devices file it onto your node card. Medical is never included in a broadcast, and a broadcast has no acknowledgment — there is no receipt.
Send PROF? request — asks the one node in the target box for its profile. Whether it answers is decided by that node's audience setting: public answers anyone, friends/room answer if you qualify, ask-first means its owner decides, off means silence — and a radio with no profile stored on it stays silent by design. The answer is filed onto that node's card here.
Send PROFH beacon — sends only a fingerprint of your profile (an 8-character hash — no content). Devices that hold your profile compare it with the fingerprint they have cached: unchanged, nothing to do; changed, they send a PROF? request to fetch the update. The cheap way to say "my profile changed."
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
// Settings
Admin frames go to your node over the encrypted local link — nothing here touches anyone else's radio. Every write is a full-section read-modify-write: the console re-reads the section from the radio, changes only the fields you touched, and sends the whole section back, so settings made elsewhere are never zeroed. Most writes reboot the radio to apply. No LoRa region editing (regulatory) — the region recovery tool lives under Advanced settings, at the bottom of the menu.
Owner & identity
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.
Status message
One line the node advertises about itself (a module setting — statusmessage), e.g. where it sits or when it is staffed.
Connect a radio to edit its status message.
Device & behavior
Connect a radio to edit its device settings.
Channels
Channels on this radio (read-only)
| # | Name | Role | Key |
|---|---|---|---|
| Connect to read channels. | |||
Channel slots are managed from the Chat + Rooms tab. Key shows PSK length only — never the key itself.
Disable a secondary channel
Position & GPS
Connect a radio to edit its position settings.
Connect a radio to edit GPS sensitivity.
Connectivity
Bluetooth
If this radio never appears in phone scans, Bluetooth is off in its config. Changing this writes bluetooth.enabled — the radio reboots to apply; give it ~15 s.
Connect a radio to edit Bluetooth pairing.
WiFi
WiFi on = the radio starts its own access point (or joins a saved network). Changing this writes network.wifi_enabled; RADIO CONFIG on the Connect tab also reports the state. The radio reboots to apply.
Connect a radio to edit its WiFi network.
Joining a network reboots the radio. If this console is linked to the radio over that same WiFi, reconnect after it comes back.
Power & battery
The Sentinel / Drifter survival kit. Deep-sleep timing and battery calibration live in Advanced settings → Power deep sleep.
Connect a radio to edit its power settings.
Display & units
This console
Applies to node distances and map readouts in this console only. Temperature follows: °F with miles, °C with kilometers.
The radio's screen
Connect a radio to edit its screen settings.
LoRa & broadcast
Connect a radio to edit its LoRa settings.
Custom bandwidth / spread factor / coding rate, frequency overrides and the remaining RF internals live in Advanced settings → LoRa deep RF. Region is never edited here — the read-out and the region recovery tool live in Advanced settings → Region recovery.
Sensors & IoT
Telemetry
How often the radio measures and reports itself and its sensors. This firmware finds environment sensors on its own — there is no sensor-type setting to pick.
Connect a radio to edit its telemetry settings.
Detection sensor
One GPIO pin the radio watches — a door switch, a motion sensor, a float switch. On a trigger it posts “<name> detected” to the mesh.
Connect a radio to edit its detection sensor.
Paxcounter
Counts the WiFi and Bluetooth devices it can hear — a people-flow sensor for a gate, trailhead or camp entrance. Only radios built with paxcounter support report counts.
Connect a radio to edit its paxcounter.
Alerts & outputs
External notification
Drives pins on the radio when traffic arrives — an LED, a buzzer, a vibration motor — so a headless node can still get your attention.
Connect a radio to edit its external notification.
Canned messages
Pre-written messages the radio itself can send from a rotary encoder or up/down buttons — no phone needed. The message texts live in a separate store on the device; this page sets the module and its input hardware.
Connect a radio to edit its canned messages.
Messages & storage
Store & forward
Holds messages for nodes that are temporarily out of range and hands them over when they come back. A fleet usually wants ONE server node — the Sentinel on the hill — not every radio storing mail.
Connect a radio to edit store & forward.
Gateway & MQTT
MQTT bridge
Gateways mesh traffic to an MQTT broker wherever the radio can reach the internet. Bridged traffic leaves the mesh — think about which channels are marked for uplink before enabling it.
Connect a radio to edit its MQTT settings.
LoRa-side MQTT flags
These two switches live in the radio's LoRa config, not the MQTT module — they decide how this radio treats MQTT-born traffic.
Connect a radio to edit its LoRa config.
Neighbors & mesh
Neighbor info
Each radio periodically reports the nodes it hears directly (one hop, with signal strength) — together that's the who-hears-whom map of the mesh, the coverage picture you plan relays from. It costs airtime, so the firmware floor is one report every 4 hours.
Connect a radio to edit neighbor info.
Node actions & backup
Node actions
Reboots in ~5 seconds. The serial link will drop — reconnect after it comes back.
Backup & firmware
Backup exports your convoys, profile and settings as an encrypted file and can re-provision a wiped radio. Firmware flashes Outpost builds over USB.
Danger zone
Delete node database wipes every node this radio has learned (stock Meshtastic's nodedb_reset) — owner, channels, and config are kept; the radio reboots and relearns the mesh from scratch. Factory reset wipes everything, like a fresh flash. Both ask twice: first click arms, second click fires.
About
© OFFGRID TACTIX · OUTPOST — offgridtactix.com
Advanced settings
Deeply technical settings, grouped the way stock Meshtastic groups them. Wrong values here can silently break mesh compatibility or RF legality, strand the radio's own controls, or lock you out of it — which is why they live down here. The usual rules still apply: every group stays locked until the console has read that part of the radio's config this session, and every save is a full-section read-modify-write.
LoRa deep RF
The RF internals behind LoRa & broadcast. The modem preset, hop limit and TX power stay in the basic category — nothing here duplicates them. Custom bandwidth / spread factor / coding rate only take effect while Use a modem preset is OFF over there; with a preset on, the firmware ignores them.
Connect a radio to edit its LoRa config.
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.
Security & keys
Connect a radio to edit its security settings.
Network infrastructure
Fixed-infrastructure addressing. The WiFi on/off switch, the network it joins and the NTP server live in Connectivity — this page is the rest of the network section.
Connect a radio to edit its network settings.
Device hardware & role override
Role override (raw stock list)
This writes the same device.role field as the friendly Device type picker in Device & behavior — it just offers the full stock list by name and number, for parity with other clients. The deprecated ROUTER_CLIENT is excluded; the two TAK roles belong to the ATAK ecosystem and pair with the TAK module (Modules — wired integrations). Prefer the friendly picker for everyday use.
Connect a radio to edit its device settings.
Hardware pins
Board-level definitions. A wrong button pin can strand the device's only physical control — check the board's pinout before touching these.
Connect a radio to edit its device settings.
Position hardware & flags
GPS wiring overrides and the exact contents of the position packets this node sends. Intervals, smart position and GPS mode live in Position & GPS.
Connect a radio to edit its position settings.
Power deep sleep
The sleep-state machinery behind Power & battery. Bad values here can make a node unreachable for very long stretches — think before stretching the timers on a node you can't physically reach.
Connect a radio to edit its power settings.
Display hardware fit
Panel-specific fit. Wrong values garble the radio's own screen; the everyday screen settings (timeout, flip, clock) live in Display & units.
Connect a radio to edit its display settings.
Modules — wired integrations
Peripheral and developer modules for wired rigs — the module sections the basic categories don't cover. Same disciplines: locked until read, whole-section read-modify-write on save.
Serial
Connect a radio to edit its serial module.
Audio (Codec2 voice)
Connect a radio to edit its audio module.
Remote hardware
Lets other nodes read and drive this radio's GPIO pins over the mesh. Only the pins listed here are exposed — leave the list tight.
Connect a radio to edit its remote-hardware module.
Traffic management
Mesh-traffic shaping on this node. Mis-set, these can starve or flood the mesh — change one thing at a time and watch the packet log.
Connect a radio to edit its traffic management.
TAK (ATAK ecosystem)
Team and role this node reports to ATAK. Pairs with the TAK / TAK_TRACKER device roles (role override, in Device hardware & role override). Meaningless outside an ATAK deployment.
Connect a radio to edit its TAK module.
Ambient lighting
The radio's addressable LED output (NeoPixel-class), when the board has one wired.
Connect a radio to edit its ambient lighting.
Range test
Periodically broadcasts a numbered test packet so a second node can log where coverage ends. Sender interval 0 = listen only.
Connect a radio to edit its range test module.
// 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.