MeshCore graduates from "experimental tab" to first-class source in MeshMonitor. It sits in the dashboard sidebar next to your Meshtastic nodes, has its own per-source permissions, its own multi-pane page, its own telemetry pipeline, and contributes contacts to the unified dashboard map. The 4.5 UI source-add flow is USB-only for MeshCore (Companion or Repeater); TCP-connected companions still work via the legacy env-var bootstrap path.
Source model
- Per-source MeshCore managers — each MeshCore device is its own source row, manageable from the Sources sidebar with no container restart (#3005, #3014)
- Permissions, expanded — the legacy global
+ "meshcore" +permission is gone; migration 058 expanded every grant into the per-source sourcey set (connection, configuration, nodes, messages) - Composite primary key on
+ "meshcore_nodes" +(sourceId, publicKey) — same device under two sources is tracked independently (#3023)
Dashboard + map
- Styled source cards matching the Meshtastic visual vocabulary (#3016)
- Unified dashboard map enumerates every MeshCore source and renders contacts with valid coordinates (#3015)
MeshCore page
- Multi-pane redesign — Nodes / Channels / Direct Messages / Configuration / Node Info (#3005)
- Contact-detail panel below each DM thread — hops, RSSI/SNR, last heard, position, full public key (#3017)
- UI permission gating — write controls dim and explain themselves for read-only users (#3019)
- Visual alignment with Meshtastic Info / Channels / Nodes rows (#3021)
Telemetry
- Local-node telemetry — background poller samples
+ "GetStats core/radio/packets" +,+ "GetDeviceTime" +,+ "DeviceQuery" +every 5 minutes (configurable, on-device, no RF) writing batched+ "mc_*" +rows into the shared telemetry table (#3020) - Node Info page graphing across 1h / 6h / 24h / 3d / 7d ranges
- Telemetry-mode toggles — device-side base / loc / env classes from the Configuration view (#3018)
- Per-node remote telemetry retrieval — scheduled
+ "req_telemetry_sync" +pulls with a per-node interval, gated by a shared 60-second cross-mesh throttle, with decoded LPP values written into the telemetry store (#3022)
Configuration
- Radio preset selector from the official MeshCore preset list, with a Custom fallback (#3015)
- Persistent radio params — bridge propagates device-side errors instead of silently returning success
- Staged edits no longer revert during live push updates
- Location configuration + advert-location policy
- Channel-message senders extracted from the
+ ""Name: body"" +prefix and shown separately
Still Early
MeshCore in MeshMonitor remains new and basic. Known gaps:
- Repeater / Room Server parity trails Companion — local-telemetry poller, remote-telemetry scheduler, and telemetry-mode toggles all need a Companion on the source side
- TCP MeshCore via the UI isn't shipped — TCP companions are env-var bootstrap only in 4.5
- No MeshCore remote-admin equivalent
- No scheduler integrations for auto-responder / auto-announce / auto-traceroute (primitives wired, user-facing features next)
- Minimal MeshCore notifications — apprise and push aren't first-class
- No MeshCore-specific map affordances yet
- MQTT source type still planned
The plan is incremental — one or two MeshCore features per release, keep aligning the UI vocabulary with Meshtastic, gradually close the parity gap.
📖 Updated MeshCore docs · 📝 Full 4.5 blog post
🚀 MeshMonitor v4.5.0
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:4.5.0🧪 Testing
✅ All tests passed
✅ TypeScript checks passed
✅ Docker images built for linux/amd64, linux/arm64, linux/arm/v7
📋 Changes
See commit history for detailed changes.