MeshMonitor v4.12.0-rc2
⚠️ Pre-release / release candidate. Built for testing the 4.12.0 line — not recommended for production. Please report issues.
Summary
This second 4.12.0 release candidate rolls up a large body of multi-source, MeshCore, and Automation work on top of rc1. MeshCore region discovery now actually works end-to-end: it queries only nearby (0-hop) repeaters and routes the request directly so repeaters answer it, and received messages now show the scope/region, hop count, and relay route they arrived on. The Automation Engine gains a "Run a script" action with JSON result variables, cron-scheduled triggers, a geofence map editor, multi-source/unified-channel sends, and {{ }} token highlighting/validation. A cluster of multi-source correctness and security fixes landed — cross-source permission and channel-scoping leaks closed, the "messages vanish after ~1 minute" dedup regression fixed, node identity hidden from unauthenticated users, and manual backups scoped to the selected source. MQTT channel handling was consolidated to identify channels by name + key (no more duplicate raw-slot entries), and a PostgreSQL channel_database tombstone-exhaustion migration failure was fixed. Traceroutes now route over the correct default-keyed channel, and the Map/Map-Analysis views got richer multi-source popups plus a spiderfy auto-collapse fix. Also includes the unmessagable-node DM-UI fix and a dashboard rate-limit (429) fix when toggling sources.
Features
- MeshCore: query only 0-hop repeaters for region discovery + route the query direct (#3765, #3743)
- MeshCore: show the scope/region a received message was sent with (#3762) and hop count + relay route below received messages (#3750) — #3742
- MeshCore: per-message scope/region override (#3704, #3701)
- MeshCore: unread message indicator on the Channels view (#3716, #3703)
- MeshCore: channel "heard repeaters" via self-echo correlation (#3707, #3700)
- Automations: "Run a script" action + JSON result variables (#3746, #3653)
- Automations: fire
trigger.scheduleon a cron schedule (#3726) - Automations: geofence map editor, multi-source/unified-channel send, builder/test-panel UX (#3721)
- Automations: highlight
{{ }}tokens + flag typos in builder text fields (#3727) - Map: filter out Null Island (0,0) positions (#3764, #3763)
- Map Analysis: rich multi-source node popups matching the Unified map (#3692)
Bug Fixes
- Messaging: no DM UI for MeshCore repeaters & Meshtastic unmessagable nodes (#3760, #3766, #3755)
- Unified feed: append-only message feed so windowing can't evict a seen message (#3738) and prevent messages vanishing in multi-source feed (#3736) — #3719, #3720
- Security: scope channel-permission node filter by
sourceId(#3749, #3745); scope dashboard local-node injection lookup to the source (#3757) - Channels: scope channel queries, mark-read & message migration by
sourceId(#3717, #3712) - Auth: hide node identity from unauthenticated users in header and poll API (#3730, #3729)
- MQTT: consolidate channels by name (#3708, #3709); identify channels by name AND key (#3713); attribute same-key channels by packet hash (#3754)
- Migration: rebuild
channel_databaseon PostgreSQL tombstone exhaustion (#3753, #3751) - Traceroute: route over the default-keyed channel + channel dropdowns (#3723); always send on Primary (#3699) — #3696
- MeshCore: keep CLI command-line focus after send (#3761, #3752); resolve room-server author full public key (#3733);
{ROUTE}/{SNR}resolve on routed channel messages (#3737, #3715, #3710); unified radio-op lock (#3728, #3725); serialize 0x8C binary-response consumers (#3722); Discover Regions Sent-payload fix (#3702); stop virtual node server on teardown (#3706); honor packet-monitor Max count (#3693, #3690) - Meshtastic: resolve position-packet channel from decryption context (#3694, #3682)
- Map: spiderfy fix + stop auto-collapse on Map Analysis & Unified maps (#3687, #3685)
- Automations: don't flag valid-but-wrong-trigger
{{ }}tokens as typos (#3739)
Performance
CI / Chore
watch-ci.shinspects only runs for the current head commit (#3747)- Version bumps to 4.12.0-rc1 (#3695) and 4.12.0-rc2 (#3767)
Issues Resolved
Closes #3763, #3755, #3752, #3751, #3745, #3744, #3743, #3740, #3735, #3734, #3732, #3729, #3725, #3720, #3719, #3712, #3711, #3710, #3709, #3703, #3701, #3700, #3698, #3696, #3690, #3689, #3685, #3682.
Thanks
Thanks to the community testers and issue reporters who drove the MeshCore region/scope and multi-source work this cycle — especially @m0urs for detailed, persistent reports on region discovery and channel behavior.
Full changelog: v4.12.0-rc1...v4.12.0-rc2
🚀 MeshMonitor v4.12.0-rc2
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:4.12.0-rc2🧪 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.