MeshMonitor v4.16.2-rc1
Pre-release. Docker images are tagged
4.16.2-rc1only —:lateststill points at v4.16.1.
A fix-driven RC. MQTT-only deployments now show their own data instead of an empty dashboard, and large node sets are usable again: the node list is virtualized and map markers cluster at low zoom, so a mesh fed from a public broker no longer drags scrolling and panning to a crawl. Three iOS 27 mobile layout bugs are fixed — the header title no longer renders inside the system status-bar blur, the collapsed node-list arrow no longer overlaps the Map controls sheet, a long custom POSIX timezone stays inside its field, and MeshCore source pages use the mobile layout in landscape. Map Analysis hop shading now counts only traceroutes the local node took part in, so remote nodes stop rendering as 0-hop. A node's position is picked by the freshest observation rather than the newest lastHeard, which also reconciles manual position-request responses across sources. MeshCore MULTIPART and CONTROL payloads are decoded rather than shown as unknown types. The rest is dependency maintenance.
Features
- feat(meshcore): decode MULTIPART and CONTROL payloads (#5308), building on the payload types added in #5285
Bug Fixes
- fix(mqtt): let MQTT-only deployments see their own data (#5283)
- perf: make large node sets usable — virtualized node list, clustered map markers, one
/api/pollfetch at mount (#5284) - fix(analysis): count hops only from traceroutes the local node took part in (#5290)
- fix(nodes): pick the unified position by observation, not by lastHeard (#5314)
- fix(header): keep top-bar text below iOS 27's home-screen status-bar blur (#5309)
- fix(mobile): hide the node-list arrow under the map sheet, contain long timezones (#5313)
- fix(meshcore): match the shell's bottom-bar query so landscape lays out (#5312)
Dependencies
- mqtt 5.16.0 (#5303), dotenv 18.0.0 (#5301), maplibre-gl 6.10.0 (#5299), lucide-react 1.47.0 (#5300), emoji-picker-react 4.22.2 (#5297)
- docker/build-push-action 7.4.0 (#5307), docker/setup-buildx-action 4.4.1 (#5306), docker/setup-qemu-action 4.4.0 (#5305), codeql-action group (#5304)
- Dev dependencies: puppeteer 25.11.0 (#5298), vitest group (#5294), @tanstack/react-query-devtools (#5302), production and development dependency groups (#5296, #5295)
Issues Resolved
- #5286 — iOS 27 status-bar backdrop-blur bleeds into the fixed AppHeader
- #5291 — node-list arrow overlaps Map controls; custom POSIX timezone overflows its field
- #5289 — Map Analysis hop shading renders remote nodes as 0-hop
- #5292 — unified view position drift from newest-
lastHeardselection - #5293 — manual position-request responses stored per-source only
- #5311 — MeshCore source page keeps its desktop layout in landscape
Thanks
- @zvx-echo6 for the MQTT-only data fix (#5283) and the large-node-set performance work (#5284), both first contributions here
- @bryan-arcus for the MeshCore MULTIPART and CONTROL payload types (#5285)
- NullVoid (
null_v0idon Discord) for the iOS 27 reports and for testing fixes on a device
Known Issues
- iOS 27 home-screen app: on per-source pages the bottom nav bar does not reach the bottom edge, leaving a band of background below it (#5310). Not fixed in this RC.
- The hardware system-test suite's reverse-proxy stage fails on our runner for an environmental reason: it tears down the dev deployment it then depends on. All other checks pass.
Full Changelog: v4.16.1...v4.16.2-rc1
🚀 MeshMonitor v4.16.2-rc1
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:4.16.2-rc1🧪 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.