Multi-Radio

16 Radios, One Dashboard

Connect up to 16 Meshtastic radios to a single MeshDash instance. Each radio gets its own isolated database, its own SSE data stream, and its own connection configuration. Monitor your base station, relay nodes, and distant receivers — all from one tab.

Multi-Radio Slot Architecture
node_0
Primary
USB Serial · Base Station
Always present — your first radio
Own DB Own SSE Own Config
slot_1
Relay Node
TCP · Hilltop Relay
Second radio via network
Own DB Own SSE Own Config
slot_2
Distant RX
MQTT · Remote Observer
No physical radio needed
Own DB Own SSE Own Config
slot_3
MeshCore
MeshCore · Alt Protocol
MeshCore node on serial
Own DB Own SSE Own Config
All slots → single MeshDash dashboard
How It Works

Isolated Slots, Unified View

Each radio slot is fully independent. Databases don't share data. SSE streams don't cross-contaminate. Connection configs are per-slot. But the dashboard UI gives you a single pane of glass over all of them.

Isolated Databases

Every slot gets its own SQLite database file. Node data, messages, packets, and telemetry for one radio never mix with another. Delete a slot and its database is gone — no side effects on other slots.

node_0 → meshtastic_data.db
slot_1 → meshtastic_data_a3f2c1.db
slot_2 → meshtastic_data_7b9e4d.db
...

Per-Slot SSE Streams

Each slot has its own Server-Sent Events stream. The dashboard multiplexes all active streams into a single connection, so you see real-time updates from every radio simultaneously — no polling, no missed packets.

  • Per-slot connection status events
  • Per-slot node updates and packet streams
  • Multiplexed into one browser connection
  • Slot selector in topbar switches context instantly

Independent Configs

Each slot has its own connection type, host, port, and label. Mix Serial, TCP, MQTT, and MeshCore on the same instance. The primary slot (node_0) uses your .env config; additional slots are configured from the dashboard.

  • Primary slot (node_0) — configured via .env
  • Additional slots — configured from dashboard UI
  • Mix any connection type per slot
  • Stable database UUID — survives reconnects
Use Cases

Why Run Multiple Radios?

🏠

Base Station + Relay

One radio at home on USB Serial as your primary node. Another on a hilltop connected via TCP, relaying packets from beyond your local range. Both monitored from one dashboard — see which packets came through which radio, compare SNR from each position.

📡

Multi-Band Monitoring

Run radios on different regions or frequencies simultaneously. One on EU_868, one on US_915, one on AU_915 — each with its own channel configuration and packet database. Spot interference patterns and cross-band relay opportunities.

🌐

MQTT Observer + Local Radio

Keep your physical radio as the primary slot for two-way communication, then add an MQTT slot to observe the wider mesh. See what's happening across the network without switching dashboards or tools.

🔬

A/B Testing

Run two identical radios with different antenna configurations or firmware versions. Compare real-world SNR, RSSI, and throughput side by side using MeshDash's analytics with isolated data per radio slot.

Management

Slot Management from the Dashboard

The primary slot (node_0) is always present and configured via .env. Additional slots are added, renamed, and removed from the dashboard UI — no config file editing required.

Adding a Slot

  1. Click Add Radio in the topbar slot switcher
  2. Choose a connection type (Serial, TCP, BLE, MQTT, MeshCore)
  3. Configure connection details (port, host, MQTT region, etc.)
  4. Give it a label (e.g. "Hilltop Relay", "EU_868 Observer")
  5. MeshDash creates an isolated database and starts the connection

Removing a Slot

  1. Select the slot from the topbar switcher
  2. Click Remove Radio
  3. MeshDash stops the connection and removes the slot
  4. Optionally purge the slot's database file
  5. Primary slot (node_0) cannot be removed — only disconnected

Things to Know

  • Maximum 16 additional slots — plus the primary node_0. That's 17 radios maximum.
  • Node Config is per-slot — in "All Radios" view, Node Config is intentionally disabled. Select a specific radio to configure it.
  • Channel config reads from primary — channel configuration in "All Radios" mode comes from node_0. Per-radio channel inspection is coming in a future update.
  • Database files are per-slot — each slot's SQLite database is independent. Removing a slot and purging deletes that database permanently.
  • Primary slot can't be removednode_0 is permanent. You can disconnect it, but you can't delete it.
Configuration

Multi-Radio Configuration

The primary radio is configured in .env. Additional slots are managed from the dashboard. Here are the connection types available for each slot.

Type Config Key Primary (.env) Additional Slots
USB Serial MESHTASTIC_CONNECTION_TYPE=SERIAL MESHTASTIC_SERIAL_PORT=/dev/ttyACM0 Dashboard UI — port, baud
TCP / WiFi MESHTASTIC_CONNECTION_TYPE=TCP MESHTASTIC_HOST + MESHTASTIC_PORT Dashboard UI — host, port
Bluetooth BLE MESHTASTIC_CONNECTION_TYPE=BLE MESHTASTIC_BLE_MAC Dashboard UI — MAC address
MQTT MESHTASTIC_CONNECTION_TYPE=MQTT MQTT_BROKER, MQTT_PORT, etc. Dashboard UI — broker, region, channel
MeshCore MESHTASTIC_CONNECTION_TYPE=MESHCORE MESHCORE_TRANSPORT, etc. Dashboard UI — transport, host, port
Web Serial Dashboard UI only Dashboard UI — browser picker

Ready to connect your radio array?

Hardware Guide → Install MeshDash →