C2 Terminal
The C2 Terminal is a persistent bar at the bottom of every page. Click it to expand/collapse a terminal panel where you can run Meshtastic CLI-style commands against the connected radio.
Opening the Terminal
Click anywhere on the C2 COMMAND TERMINAL bar. It slides up to reveal the terminal panel. Click again to close it. The chevron icon in the bar rotates to indicate open/closed state.
Version Badge
The right side of the terminal bar shows the current version and update status as a badge:
| Badge state | Meaning |
|---|---|
| ✓ R2.2.x | Running the latest version |
| ↑ UPDATE | A newer version is available |
| β BETA | Running a version newer than remote (beta/dev) |
| ⟳ Init... | Version check in progress |
The version check runs on terminal init and calls GET /api/system/version-status. Clicking an UPDATE badge triggers the update flow.
Running Commands
Commands are sent to POST /api/console with a 30-second timeout. The CLI bridge parses the command string using argparse and dispatches to the appropriate Meshtastic Python SDK call.
The meshtastic prefix is optional — both of these are equivalent:
meshtastic --info
--info
All commands from the API Reference console table are available. Useful examples:
--info # Print local node info
--nodes # List all nodes with SNR
--set lora.hop_limit 4 # Change a config setting
--set-owner "New Long Name" # Update node long name
--set-owner-short "SHRT" # Update short name
--sendtext "Hello!" --dest ^all # Send to all on ch 0
--sendtext "Hi" --dest !aabbccdd # Direct message
--traceroute !aabbccdd # Run traceroute
--ch-index 1 --ch-add "MyChannel" # Add a new channel
--reboot # Reboot the radio
Output
The command output is returned as plain text from the server and displayed in the terminal with monospace styling. Errors (invalid flags, connection failures) are shown in red.
Update Flow via Terminal
When the version badge shows ↑ UPDATE, clicking it (or running a manual check) triggers the update flow:
- A confirmation modal appears showing current version vs available version
- Clicking Install Update calls
POST /api/system/start-update - The server downloads the update ZIP, stages it, then restarts the process
- On restart, the boot-time updater applies the ZIP (skipping databases and config), then hot-swaps the process
- The browser reconnects automatically via SSE auto-reconnect
bash mesh_dash_tools.sh → Option 2 (Database Management) → Backup, or call POST /api/system/restart only after verifying the backup exists.Full Command Reference
All commands accepted by POST /api/console work in the terminal. The meshtastic prefix is optional:
| Command | Action |
|---|---|
--info | Print owner, firmware, node count |
--nodes | Table of all known nodes with SNR and last heard |
--channels | List configured radio channels |
--set section.key value | Set a localConfig protobuf field (e.g. --set lora.hop_limit 4) |
--get field | Read a config field value |
--set-owner "Name" | Change node long name |
--set-owner-short "SN" | Change node short name (max 4 chars) |
--set-canned-message "msg1;msg2" | Set canned messages (semicolon-separated) |
--get-canned-message | Read current canned messages |
--setlat 51.5 --setlon -0.12 --setalt 10 | Set fixed GPS position and enable fixed mode |
--remove-position | Disable fixed position, re-enable GPS |
--ch-index 1 --ch-add "Name" | Add a secondary channel at next free slot |
--ch-index 1 --ch-del | Delete/disable channel at index 1 |
--ch-index 1 --ch-enable | Re-enable a disabled channel |
--ch-index 1 --ch-set name "MyNet" | Set a channel setting |
--ch-index 1 --ch-set psk random | Generate a random PSK for a channel |
--ch-index 1 --ch-set psk default | Reset PSK to the default key |
--ch-index 1 --ch-set psk none | Set channel to no encryption |
--sendtext "msg" --dest !id | Send a direct message to a node |
--sendtext "msg" --dest ^all --ch-index 0 | Broadcast on channel 0 |
--traceroute !id | Run a traceroute (raw output, up to 3 hops) |
--gpio-wrb 10 1 --dest !id | Write GPIO pin 10 HIGH on remote node |
--gpio-rd 0x10 --dest !id | Read GPIO mask 0x10 from remote node |
--reboot | Reboot the connected radio |
--qr | Print channel QR URL |