Multi-Source β
New in 4.0
Multi-Source lets a single MeshMonitor deployment talk to multiple Meshtastic nodes at once over TCP. Serial- and BLE-attached nodes reach MeshMonitor through the Serial Bridge or BLE Bridge sidecar (they present as a TCP endpoint). Everything that used to be a global setting (Virtual Node, auto-responder, auto-traceroute, scheduler, permissions) is now configured per source.
Coming soon
MQTT and MeshCore source types are part of the multi-source architecture but are still in active development. They'll land in a future 4.x release.

What is a Source? β
A source is one upstream connection MeshMonitor speaks to β typically a Meshtastic node. Each source has:
- A type β
meshtastic_tcptoday;mqttandmeshcoreare planned. Serial and BLE nodes connect through the Serial Bridge / BLE Bridge sidecars and appear asmeshtastic_tcpsources pointing at the bridge container. - Its own connection settings (host, port, device path, credentials)
- Its own scheduler (auto-responder, auto-announce, auto-traceroute, auto-ack)
- Its own Virtual Node endpoint (TCP sources only)
- Its own permissions β which users can see/write to it
Sources are stored in the database and managed through the UI, not environment variables.
Where do sources come from? β
Bootstrap (first run) β
On first startup, MeshMonitor creates a single meshtastic_tcp source from these environment variables:
| Variable | Default | Notes |
|---|---|---|
MESHTASTIC_NODE_IP | 192.168.1.100 | Hostname or IP of your node |
MESHTASTIC_TCP_PORT | 4403 | TCP port |
After that first boot, the env vars are informational only. Changing them won't rename or reconfigure the existing source β use the UI instead. This keeps your single-node docker-compose.yml familiar while unlocking multi-node.
Adding more sources β
Open the Sources sidebar on the dashboard (admin only) to:
- Add source β click the + button next to the Sources header, choose a type, fill in connection details, save
- Edit β rename, re-host, re-port, toggle Virtual Node, or change other per-source settings
- Enable / Disable β pause an upstream connection without deleting it
- Delete β remove the connection and its source-scoped data

Changes that alter the upstream target (host, port, heartbeat) automatically restart the connection β no separate restart action is needed. The Sources sidebar is where all post-bootstrap connection changes happen.
Source picker β
Nearly every top-level view has a source picker in the header. It controls which source's data you're looking at:
- Single-source mode β pick one source; the view shows only that source's nodes, messages, telemetry, and traceroutes
- Unified mode (where available) β combines messages/telemetry/traceroutes across all sources while still tagging each row with its originating source
Your picker choice persists per view and per user.
Virtual Node β
Virtual Node is a MeshMonitor feature that lets mobile Meshtastic apps connect through MeshMonitor instead of directly to the node. In 4.0 it is per-source.
- Only
meshtastic_tcpsources support Virtual Node (planned MQTT and MeshCore source types will ignore VN settings when they ship) - Each source can expose its own VN endpoint on its own port
- Ports must be unique across sources β the API rejects collisions with HTTP 409
Enabling on a source β
- Open Dashboard β Edit Source on the TCP source you want to expose
- Expand the Virtual Node section
- Toggle it on
- Choose a port (the previous global default was
4404) - Decide whether to allow admin commands through the VN (reduces security β leave off unless you know you need it)
- Save

Virtual Node config changes are hot-swapped without reconnecting the upstream TCP socket. Changing host/port still triggers a full reconnect.
Docker port mapping β
When you add a VN, publish the in-container port from your docker-compose.yml:
services:
meshmonitor:
ports:
- "8080:3001" # Web UI
- "4404:4404" # Virtual Node for source A
- "4405:4405" # Virtual Node for source B (if you expose a second)The Docker Compose Configurator publishes one VN host port by default (4404). Match the VN port you choose in the UI to one of the published host ports.
Breaking change from 3.x
The old global env vars β ENABLE_VIRTUAL_NODE, VIRTUAL_NODE_PORT, VIRTUAL_NODE_ALLOW_ADMIN_COMMANDS β were removed and no longer have any effect. If you upgraded from 3.x, re-enable VN on each source you want to expose.
Per-Source Permissions β
MeshMonitor's role-based access control treats sources as first-class resources. Admins can:
- Grant a user access to one or more sources
- Restrict read/write/admin actions per source
- Hide entire sources from users who shouldn't see them
Unauthorized endpoints return HTTP 403 β URL-hash route bypasses are blocked.
See Per-Source Permissions for the full model.
What else is per-source? β
Everything that used to be a single global setting is now per-source:
| Feature | Per-source in 4.0 |
|---|---|
| Virtual Node | β |
| Auto-Responder | β |
| Auto-Announce | β |
| Auto-Traceroute filter | β |
| Auto-Ack | β |
| Auto-Delete by Distance | β |
| Auto-Favorite | β |
| Scheduled Messages | β |
| Permissions | β |
| Notifications / Apprise | β (admins and subscribers receive per-source events) |
For global behavior that isn't source-specific (theme, language, map center, push VAPID keys, session policy), use the new Global Settings page β accessible from the dashboard sidebar.
Migration from 3.x β
If you're upgrading from 3.x:
- Keep your env vars β
MESHTASTIC_NODE_IP/MESHTASTIC_TCP_PORTstill seed the first source on a fresh install - Drop removed VN env vars β
ENABLE_VIRTUAL_NODE,VIRTUAL_NODE_PORT,VIRTUAL_NODE_ALLOW_ADMIN_COMMANDSdo nothing in 4.0 - Re-enable VN per source β Dashboard β Edit Source β Virtual Node on each TCP source you want to expose
- Review permissions β the per-source permission matrix may need admin review for non-admin users
- Back up first β use System Backup from the Settings page before upgrading. The sources table is included.
Related β
- Per-Source Permissions
- Store & Forward
- Auto-Responder
- Packet Monitor β now source-aware