MeshMonitor v4.16.1-rc4
⚠️ Pre-release. This is a release candidate for testing. Docker images are published without the
:latesttag — pullghcr.io/yeraze/meshmonitor:4.16.1-rc4explicitly.
Two surfaces got real attention this round. Mesh invitations move out of the channel list into a Beacons button with a count: the old stacked cards grew with every beaconing neighbour and squeezed the message list to a sliver on a phone, and because beacons re-advertise on their own interval there was no end state where they stayed gone — so there is now a searchable, sortable table behind that button, plus a permanent Mute for a mesh you never want to hear from again. Auto Traceroute gains a per-filter AND/OR mode: its five node filters were a hard-coded union, so ticking a channel could only ever widen the traced set, and an operator running one preset per channel had no way to say "only trace LongTurbo". The channel picker now shows channel names rather than raw ids.
On the fix side, MeshCore node discovery no longer works exactly once per connection — a single unsettled radio op used to park the operation chain for the life of the connection, so every later command silently never reached the serial port. lastHeard only moves forward now, and every receive path stamps it. NodeInfo enrichment stops being undone by blank values, which also restores the short names that had vanished from the map. Rounding out: channel reorder works by touch on mobile, an unconfigured MESHTASTIC_NODE_IP is no longer dialled forever, and a sourceId identifier is quoted properly in the packet-log delete.
Features
- Table-backed beacons list behind a button with a count — #5235
- Auto Traceroute: per-filter AND/OR modes and named channels — #5241
Bug Fixes
- MeshCore: bound
runExclusiveRadioOpso a stuck radio op can't park the chain forever — #5244 - MeshCore:
lastHeardonly moves forward, and every receive path stamps it — #5242 - NodeInfo: stop blank values from undoing enrichment, and un-stub map labels — #5234
- Channels: let the reorder handle be dragged on touch — #5240
- Sources: stop connecting to a
MESHTASTIC_NODE_IPnobody configured — #5239 - Packet log: quote the
sourceIdidentifier in theclearPacketLogsdelete — #5238
Dependencies
- Bump lucide-react from 1.44.0 to 1.45.0 — #5222
Issues Resolved
- #5243 — MeshCore node discovery works exactly once per connection: one unsettled radio op parks
radioOpChainforever - #5232 — Mobile: stacked Mesh Invitations cards eat viewport, block message list scroll
- #5231 — NodeInfo Enrichment leaves fields blank on v4.16.1-rc3; map short names vanish
- #5230 — Auto Traceroute: multi-select channel filter to scope eligible nodes
- #5237 — Not using Meshtastic but server continually tries to connect to default IP address
- #5233 — Mobile: cannot reorder Channels — drag handle long-press selects text instead of starting drag
Thanks
- @nate8088 for #5243 — a report with
straceoutput on the serial fd, the decoded frame, a timing table across three connections, and the root cause traced to the exact unsettled op. The fix is essentially the one filed. - NullVoid (Discord) for the Auto Traceroute channel-scoping request, and NodeZero for the mobile invitation-card and NodeInfo reports.
Upgrade Notes
No breaking changes, no manual migration steps. One new database migration (166) adds a nullable mutedAt column to mesh_beacon_offers; it runs automatically on first boot and is idempotent on SQLite, PostgreSQL and MySQL.
Auto Traceroute's new per-filter modes default to OR — the behaviour every install already had — so existing filter configurations are unchanged until you deliberately switch one to AND.
Full changelog: v4.16.1-rc3...v4.16.1-rc4
🚀 MeshMonitor v4.16.1-rc4
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:4.16.1-rc4🧪 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.