Releases: Yeraze/meshmonitor
MeshMonitor v3.8.6
What's New
Features
- Configurable Analytics Provider Settings — Add optional web analytics to your MeshMonitor instance. Supports Google Analytics (GA4), Cloudflare Web Analytics, PostHog, Plausible, Umami, Matomo, and custom scripts. Configured via the Settings tab with automatic CSP integration. #2200 — closes #2198
- Last Hop Filter for Packet Monitor — Filter packets by the last relay node that forwarded them. #2199
- Analytics Documentation — New docs page covering all supported analytics providers, configuration, CSP handling, and privacy considerations. #2203
Bug Fixes
- Upgrade Watchdog — Accept both
.ymland.yamlextensions for Docker Compose files, fixing auto-upgrade failures for some users. #2201 — closes #2197 - Packet Monitor UI — Improve button contrast and detail popup readability. #2195
- Virtual Node — Match physical radio's channel protobuf encoding exactly. #2193
- Virtual Node Config — Only suppress duplicate
wantConfigIdrequests, not new ones. #2192 — closes #2191 - Dashboard Widgets — Filter empty distance buckets from dashboard widgets. #2190
- Message Queue — Fix message queue service bugs and unskip all tests. #2189
Performance
- Batch SQL Operations — Convert N+1 delete loops to batch DELETE operations and optimize COUNT queries. #2187, #2188
- SQL COUNT Optimization — Use SQL
COUNT(*)instead of loading entire tables for count queries. #2185
Other
- Translations update from Hosted Weblate. #2168
- Remove unused legacy functions from meshtasticManager.ts. #2186
Full Changelog: v3.8.5...v3.8.6
🚀 MeshMonitor v3.8.6
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:3.8.6🧪 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.
MeshMonitor v3.8.5
What's New
Features
- Packet Monitor as Sidebar Tab — The Packet Monitor is now available as a dedicated sidebar tab in addition to the map panel (#2180, closes #2179)
- Dedicated Packet Monitor Permission — New
packetmonitor:readpermission controls access to the Packet Monitor. Packets are filtered server-side based on channel and DM permissions (#2181) - Dashboard Widgets — Added hop distribution, distance distribution, and heatmap dashboard widgets (#2164, closes #2162)
Bug Fixes
- Virtual Node config loop — Fixed config request loop caused by cached rebooted messages (#2182)
- MeshCore contacts — Fixed contacts not auto-updating on map and monitor page (#2165)
- Backup modal UI — Wider modal, styled buttons, improved spacing (#2163)
- Mobile message input — Full-width text input with buttons below (#2161)
Performance
- SQL COUNT optimization — Use
COUNT(*)instead of loading entire tables for count queries (#2185) - Batch DELETE operations — Convert N+1 delete loops to batch DELETE statements (#2187)
Maintenance
- Removed 1,182 lines of unused legacy functions from meshtasticManager.ts (#2186)
- Removed debug leftovers and fixed desktop version (#2183)
- Added tested hardware configurations documentation (#2166, #2167)
- Translation updates from Weblate (#2128)
Dependency Updates
- mysql2 3.18.2 → 3.19.0 (#2178)
- express-rate-limit 8.2.1 → 8.3.0 (#2177)
- pg 8.19.0 → 8.20.0 (#2176)
- recharts 3.7.0 → 3.8.0 (#2175)
- puppeteer 24.37.5 → 24.38.0 (#2174)
- Production dependencies group update (#2173)
- Development dependencies group update (#2172)
- docker/login-action 3 → 4 (#2171)
- docker/setup-buildx-action 3 → 4 (#2170)
- docker/setup-qemu-action 3 → 4 (#2169)
- actions/upload-artifact 4 → 7 (#2094)
- actions/download-artifact 7 → 8 (#2095)
Action Required for Admins
The new packetmonitor:read permission is granted to all users (including Anonymous) by default. If you need to restrict Packet Monitor access, review user permissions in Settings → Users.
System Test Results
Test Run: 2026-03-09
| Test Suite | Result |
|---|---|
| Configuration Import | ✅ PASSED |
| Quick Start Test | ✅ PASSED |
| Security Test | ✅ PASSED |
| V1 API Test | ✅ PASSED |
| Reverse Proxy Test | ✅ PASSED |
| Reverse Proxy + OIDC | ✅ PASSED |
| Virtual Node CLI Test | ✅ PASSED |
| Backup & Restore Test | ✅ PASSED |
| Database Migration Test | ✅ PASSED |
| DB Backing Consistency | ✅ PASSED |
Unit Tests: 139 test files, 2,938 tests passed
Full Changelog: v3.8.4...v3.8.5
🚀 MeshMonitor v3.8.5
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:3.8.5🧪 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.
MeshMonitor v3.8.4
MeshMonitor v3.8.4
MeshCore hotfix release.
What's Changed
Bug Fixes
- fix: add defensive guards to MeshCore node rendering (#2158) — Closes #2157
- fix: MeshCore repeater serial protocol — three bugs (#2159)
Details
MeshCore Nodes crash (#2158):
Enabling "Show MeshCore" on the Nodes page crashed when contacts had null SNR/RSSI values. Added type validation in mapContactsToNodes() and defensive guards in the render path.
MeshCore Repeater protocol (#2159) — contributed by @NearlCrews:
Three bugs prevented MESHCORE_FIRMWARE_TYPE=repeater from working:
firmwareTypeenv var was ignored when connecting via API- Wrong line terminator (
\ninstead of\r) caused repeater to ignore all commands - Missing wake-up sequence and wrong response parsing for repeater CLI format
Issues Resolved
- #2157 — [BUG] Connecting Meshcore device results to "Nodes failed to Load" error
Full Changelog: v3.8.3...v3.8.4
🚀 MeshMonitor v3.8.4
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:3.8.4🧪 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.
MeshMonitor v3.8.3
MeshMonitor v3.8.3
What's Changed
Bug Fixes
- fix: resolve MeshCore display issues on Nodes page (#2151) — Closes #2154
- fix: enable receiving incoming messages on MeshCore companion devices (#2150) — Closes #2149
Refactoring
- refactor: reorganize Settings page into focused sections (#2148)
- refactor: frontend review batch 1 — shared modal, toast theming, accessibility (#2152)
- refactor: frontend review batch 2 — design tokens, CSS split, lucide icons (#2153)
- refactor: frontend review batch 3 — error boundaries, context splitting (#2155)
Features
- feat: add favorite lock toggle and filter (#2147)
Documentation
- docs: add better-sqlite3 rebuild troubleshooting to LXC guide (#2146)
Issues Resolved
- #2149 — [BUG] Meshcore Messaging only sends but cannot receive
- #2154 — [BUG] Telemetry Dashboard Search Broken
Full Changelog: v3.8.2...v3.8.3
🚀 MeshMonitor v3.8.3
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:3.8.3🧪 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.
v3.8.2
What's Changed
New Features
- Chat auto-scroll to new messages — When near the bottom of a chat, new incoming messages automatically scroll the view. Works for both channel messages and DMs. Also adds a "Jump to Bottom" button to the DM tab. (#2143, #2142)
Bug Fixes
- Fix lock icon on auto-favorites — Auto-favorited nodes no longer show a lock icon; only manually-locked favorites display 🔒 (#2144)
- Enable save for Dim Inactive Nodes settings — Fix save button not enabling when changing dim inactive node settings (#2140, #2138)
- Normalize homoglyphs in autoresponder matching — Autoresponder now matches messages with homoglyph characters (#2137, #2136)
Other
- docs: fix outdated paths and values in ARCHITECTURE_LESSONS.md (#2139)
- chore: bump version to 3.8.2 (#2145)
🚀 MeshMonitor v3.8.2
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:3.8.2🧪 Testing
✅ All unit tests passed (2921 tests)
✅ All system tests passed
✅ TypeScript checks passed
🚀 MeshMonitor v3.8.2
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:3.8.2🧪 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.
MeshMonitor v3.8.1
What's Changed
New Features
- Time Offset Security Detection — Detect and flag mesh nodes whose clock is significantly out of sync (default threshold: 30 minutes, configurable via
TIME_OFFSET_THRESHOLD_MINUTESenv var). Displays in a new "Time Offset" section on the Security tab with human-readable offset and the node's reported time. (#2130) - LOG_LEVEL environment variable — Configure server log verbosity via environment variable (#2124)
Bug Fixes
- Suppress ghost node resurrection after reboot — Prevents nodes from reappearing after server restart (#2129, #2123)
- Resolve test upgrade staying pending with Invalid Date — Fix firmware upgrade test getting stuck (#2127, #2125)
Other
🚀 MeshMonitor v3.8.1
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:3.8.1🧪 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.
MeshMonitor v3.8.0
MeshMonitor v3.8.0
Highlights
Gateway OTA Firmware Updates (Experimental) — Administrators can now check for, download, and flash Meshtastic firmware updates directly from the MeshMonitor UI via a step-by-step wizard in System Settings. Supports Stable, Alpha, and custom firmware URLs with automatic config backup, live progress streaming, and hardware-matched binary selection. Docker deployments only.
New Features
- Gateway OTA firmware updates (#2110) — Closes #2108
- Bell and position broadcast buttons (#2117) — Closes #2113, #2114
Bug Fixes
- Disable OTA firmware updates on Tauri desktop builds (#2120)
- Prevent auto-favorites from overriding manual favorites (#2115) — Closes #2111
Documentation
- Message delivery status icon documentation and confirmed CSS fix (#2121) — Closes #2118
- Add Utilization Alert to user scripts gallery (#2112) — Closes #2109
Full Changelog: v3.7.6...v3.8.0
🚀 MeshMonitor v3.8.0
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:3.8.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.
MeshMonitor v3.7.6
What's Changed
Bug Fixes
- Accept new nodeNum on same-device reboot — when firmware reboots with a different nodeNum, MeshMonitor now accepts it and merges the old node's metadata instead of rejecting it. The old approach caused identity mismatches where MeshMonitor used the old nodeNum while the firmware broadcast on the new one (#2106)
- Fix isLocked desync for node names changed outside MeshMonitor — node names changed via the Meshtastic app (or after factory reset) are now properly picked up. The
isLockedflag was incorrectly blocking NodeInfo updates, the authoritative source for node identity (#2106) - Prevent duplicate outgoing messages in chat (#2104) — closes #2027
New Features
- Per-node cooldown for geofence triggers — prevent repeated geofence alerts for the same node within a configurable time window (#2105) — closes #2103
Dependencies
- Bump mysql2 from 3.17.4 to 3.18.2 (#2102)
- Bump maplibre-gl from 5.18.0 to 5.19.0 (#2101)
- Bump @types/supertest from 6.0.3 to 7.2.0 (#2100)
- Bump pg and @types/pg (#2099)
- Bump globals from 17.3.0 to 17.4.0 (#2098)
- Bump production-dependencies group with 4 updates (#2097)
- Bump development-dependencies group with 3 updates (#2096)
Full Changelog: v3.7.5...v3.7.6
🚀 MeshMonitor v3.7.6
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/app/data \
ghcr.io/yeraze/meshmonitor:latestUpgrade: Pull the latest image and restart your container.
🚀 MeshMonitor v3.7.6
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:3.7.6🧪 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.
MeshMonitor v3.7.5
What's Changed
New Features
- Resizable node list sidebar — drag to resize the sidebar to your preference (#2079)
- Multi-channel AutoAnnounce and AutoResponder — configure automation on any channel, not just primary (#2078)
- Search filtered by user permissions — search results now respect channel/resource permissions (#2090)
- Purge position history — new action to clear position history for a node, plus taller actions dropdown (#2086) — closes #2082
- Dedicated chat bubble theme variables — improved text contrast and theming support for chat bubbles (#2088) — closes #2084
Bug Fixes
- Prevent ghost duplicate node on reboot — fix for devices that reboot with a different nodeNum creating phantom entries (#2091)
- Exclude MQTT-bridged nodes from auto-favourite — nodes with 0 hops via MQTT are no longer auto-favourited (#2087) — closes #2085
- Sort dropdown overflow with long translations — fix sidebar overflow with long i18n strings (#2083) — closes #2081
- Allow commas in embed allowed origins — input field now correctly accepts comma-separated origins (#2077)
Maintenance
- Extract channel checkbox inline styles to CSS classes (#2089)
- Replace trivy-action with direct Trivy install for security scan CI (#2080)
- Stop system tests from rebuilding Docker image redundantly — eliminates redundant builds and potential BuildKit cache corruption (#2092)
Full Changelog: v3.7.4...v3.7.5
🚀 MeshMonitor v3.7.5
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:3.7.5🧪 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.
v3.7.4
What's Changed
Bug Fixes
- fix: allow any origin when embed allowedOrigins is blank (#2075) — Closes #2070
- fix: prevent stale position broadcasts from overwriting fixed position (#2071)
- fix: add embed.html to armv7 Dockerfile (#2067)
- fix: use --entrypoint in Docker smoke tests (#2068)
Documentation
- docs: exclude design plans from published docs (#2074)
- docs: fix embed maps URL examples to match actual route (#2072)
Issues Resolved
Full Changelog: v3.7.3...v3.7.4
🚀 MeshMonitor v3.7.4
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:3.7.4🧪 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.