MeshMonitor v4.6.0
Summary
MeshMonitor 4.6 introduces the embedded MQTT broker — a built-in MQTT server that bridges packets bidirectionally between Meshtastic sources, with optional geographic bounding-box filtering for incoming MQTT traffic. The bridge gains an interactive map editor for drawing the bbox visually and a smart initial-bbox heuristic that seeds the filter from your already-detected node positions. The MeshCore stack closes several gaps: channel and DM messages now persist to the database (so history survives restarts), the TCP-transport default port is fixed, and the channels view picks up a CRUD UI for create/edit/delete. The Meshtastic neighbor-info display is fixed for multi-source deployments — the frontend now correctly scopes the fetch to the active source, and the backend defensively refreshes lastHeard on MyNodeInfo and configComplete so the freshness filter doesn't drop entries from the local node mid-session. MeshCore radio parameters are no longer corrupted on save: the native backend now correctly scales between UI MHz/kHz and the wire-format kHz/Hz integers the meshcore.js library expects. Desktop bundle improvements: fresh installs no longer auto-create a phantom Meshtastic source against the old 192.168.1.100 placeholder when only MeshCore companions are configured, and MeshCore connect errors now surface a real diagnostic instead of undefined. The auto-upgrade watchdog health-check timeout grows from 120s to 600s (configurable via env var) so larger DBs on ARM-class hardware don't flap during boot. The API gains a server-side fix for duplicate packets reported by multi-source consumers. CI now fails fast on the first failing system test, and a MESHTASTIC_NODE_PORT synonym is now honoured on fresh installs alongside MESHTASTIC_TCP_PORT.
Features
- Embedded MQTT broker + bidirectional bridges — #3053
- MQTT bridge:
mqttClientProxyMessageto the embedded broker — #3054 (follow-up to #3003) - MQTT bridge: interactive map editor for the filter geographic bounding box — #3064
- MQTT bridge: seed bbox from detected node positions on first enable — #3066
Bug Fixes
- Neighbor info missing in UI: scope the frontend fetch to the current source + defensively refresh local-node
lastHeardonMyNodeInfo/configComplete— #3049 (fixes #3025) - MeshCore radio parameters can't be saved: scale between UI MHz/kHz and wire-format kHz/Hz integers in the native backend — #3050 (fixes #3048)
- API: duplicate packets in
/api/packet-logsfor multi-source deployments — #3052 (fixes #3051) - MeshCore: persist channel + DM messages to the DB; fix TCP-transport default port — #3058 (fixes #3057)
- Auto-upgrade watchdog: raise health-check timeout to 600s and make it configurable via env var — #3056 (fixes #3055)
- MESHTASTIC_NODE_PORT env var not respected on fresh installs — #3062 (fixes #3061)
- Desktop: stop creating a phantom Meshtastic source on MeshCore-only installs; surface a real MeshCore connect error instead of
undefined— #3065 - UI: drop the "(USB)" suffix from the MeshCore source-type label — #3043
CI / DevOps
- System tests: fail-fast on first failing test, drop retry attempt — #3060
Docs
- Embedded MQTT broker — configurator option, feature documentation, blog post — #3063
Issues Resolved
- #2600 — [FEAT] More Meshcore support
- #3025 — [BUG] Meshtastic NeighborInfo: response received but not shown in UI
- #3048 — [BUG] Meshcore shows wrong radio parameters and can't be updated
- #3051 — [BUG] API: duplicate packets
- #3055 — Auto-upgrade watchdog 120s health-check timeout too short for large-DB instances on slow ARM hardware
- #3057 — [MeshCore] MeshCore, channels and persistence
- #3061 — [BUG]
MESHTASTIC_NODE_PORTnot respected
Upgrade Notes
Desktop bundle behaviour change (#3065). Fresh installs that don't set MESHTASTIC_NODE_IP in the environment now create the auto-default Meshtastic source as enabled=0 instead of enabled=1. Users upgrading from 4.5.x desktop builds keep their existing sources as-is, but a fresh install / fresh DB will require explicitly enabling the Meshtastic source via the Sources page. Docker users who set MESHTASTIC_NODE_IP themselves are unaffected.
Embedded MQTT broker (#3053) is opt-in. Existing installs without an MQTT broker source configured see no behaviour change.
Full Changelog
🚀 MeshMonitor v4.6.0
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:4.6.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.