Skip to content

Yeraze/meshmonitor

v4.13.0 Security

This release includes 3 security fixes for security teams reviewing exposed deployments.

Published 11d Monitoring & Metrics
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →
This release patches 3 known CVEs

Topics

meshcore meshtastic mqtt

Affected surfaces

auth

ReleasePort's take

Moderate signal
editorial:auto 11d

Auto-Upgrade is retired; remove the upgrade sidecar and its configuration.

Why it matters: Removal of Auto-Upgrade triggers a breaking change in the upgrade workflow. Operators must eliminate the upgrade sidecar before deploying v4.13.0 to avoid failure.

Summary

AI summary

Broad release touches Bug Fixes, Features Maps, Dependencies & Translations, and Refactoring.

Changes in this release

Security High

`TRUST_PROXY` now defaults to `false`, preventing spoofed X-Forwarded-For headers.

`TRUST_PROXY` now defaults to `false`, preventing spoofed X-Forwarded-For headers.

Source: llm_adapter@2026-07-15

Confidence: high

Breaking High

Auto-Upgrade is retired; remove upgrade sidecar and related config.

Auto-Upgrade is retired; remove upgrade sidecar and related config.

Source: llm_adapter@2026-07-15

Confidence: high

Breaking High

Source‑scoped API endpoints now require an explicit `sourceId` parameter.

Source‑scoped API endpoints now require an explicit `sourceId` parameter.

Source: llm_adapter@2026-07-15

Confidence: high

Feature Low

Map Consolidation epic unifies rendering core, layer library, and popup family across all map surfaces.

Map Consolidation epic unifies rendering core, layer library, and popup family across all map surfaces.

Source: llm_adapter@2026-07-15

Confidence: high

Feature Low

Node selection, emphasis, and Follow mode with auto‑zoom added to Map Analysis.

Node selection, emphasis, and Follow mode with auto‑zoom added to Map Analysis.

Source: llm_adapter@2026-07-15

Confidence: high

Feature Low

Node‑to‑node line‑of‑sight distance measurement tool available on all maps.

Node‑to‑node line‑of‑sight distance measurement tool available on all maps.

Source: llm_adapter@2026-07-15

Confidence: high

Feature Low

Polar grid overlay added to Map Analysis, Unified, and MeshCore maps.

Polar grid overlay added to Map Analysis, Unified, and MeshCore maps.

Source: llm_adapter@2026-07-15

Confidence: high

Feature Low

MeshCore gains delete/purge messages, automatic DM retries, and configurable CLI timeout.

MeshCore gains delete/purge messages, automatic DM retries, and configurable CLI timeout.

Source: llm_adapter@2026-07-15

Confidence: high

Feature Low

Automation now supports multi‑channel triggers, scheduled device‑reboot action, and per‑source tapback routing.

Automation now supports multi‑channel triggers, scheduled device‑reboot action, and per‑source tapback routing.

Source: llm_adapter@2026-07-15

Confidence: high

Bugfix Medium

Low‑battery and inactive‑node alerts now fire correctly despite per‑source notification preferences.

Low‑battery and inactive‑node alerts now fire correctly despite per‑source notification preferences.

Source: llm_adapter@2026-07-15

Confidence: high

Full changelog

MeshMonitor v4.13.0

MeshMonitor 4.13.0 is the largest release of the 4.x line, stabilized through three release candidates. The headline is the Map Consolidation epic: every map surface — Dashboard, Nodes, Map Analysis, MeshCore, Unified, and embeds — now shares one rendering core, one layer library, and one popup family, so features and fixes land everywhere at once. On top of that come node selection and Follow mode, a distance-measurement tool, a polar grid overlay, and a long list of map interaction fixes. MeshCore gains message delete/purge, automatic send retries, Auto-Pathfinding target filtering, a configurable CLI timeout, and a completed Virtual Node command surface. Automations pick up multi-channel triggers, a scheduled device-reboot action, and per-source tapback routing. The long-standing "low-battery alerts silently never fire" bug — reported five separate times — is fixed at its root. Under the hood, a major architecture remediation unified the source-manager registry, moved fresh installs to migration-replay bootstrap, and deleted the legacy synchronous database API. Three deliberate breaking changes ship in this release: auto-upgrade is retired, TRUST_PROXY defaults to false, and source-scoped API endpoints require an explicit sourceId — see Upgrade Notes below. Docker users: :latest now only moves on stable releases like this one; RCs publish to :dev.

📖 Release announcement · Full changelog

Features

Maps

  • Map Consolidation epic: shared BaseMap shell, layer library, unified node-marker factory, one popup family, canonical traceroute rendering on all maps including embeds — #4049, #4051, #4057, #4060, #4064, #4065, #4066, #4067, #4068 (epic #4047)
  • Node selection, emphasis & Follow mode with auto-zoom on Map Analysis — #4010, #4012 (#3788)
  • Node-to-node line-of-sight distance measurement tool on all maps — #4013 (#3636)
  • Polar grid overlay (Map Analysis, Unified, MeshCore) — #3983, #4071 (#3971)
  • Pan/zoom/spiderfy interaction polish: zoom clamp, scaled animations, zoom-gated spiderfy — #4072 (#4046)

MeshCore

  • Delete/purge messages: per-message, per-conversation, purge-all — #3984 (#3981)
  • Automatic DM retry via same-path + flood cadence; opt-in auto-retry for automated channel sends — #3980, #3988 (#3977, #3979)
  • Auto-Pathfinding target filtering: allowlist, name regex, last-heard, hops, signal — #4039 (#4024)
  • Configurable remote/local CLI reply timeout — #4033 (#4027), honored in VN relay via #4107
  • Virtual Node: relay status requests & neighbour queries — #3991, #3993 (#3904)
  • Collapsible node list for mobile map access — #4079

Automation

  • Multi-channel message trigger OR-list — #3982 (#3974)
  • Scheduled device-reboot action — #4002 (#3995)
  • "Send via sources" selector on the tapback action — #3997 (#3996)

Other

  • UDP Broadcast network setting (enabled_protocols) exposed — #4113 (#4112)
  • Update-available notifications with per-deployment upgrade instructions (replaces auto-upgrade) — #4108

Bug Fixes

  • Low-battery/inactive-node alerts lost to split per-source notification preferences — #4035 (#3417, #3462, #3671, #3884, #4020); leftover UNIQUE(user_id) autoindex dropped — #4045 (#4044)
  • Map: popup/spiderfy decoupling + obscured-marker declutter on all maps — #4022, #4028 (#4015, #4016)
  • Map: click no longer snaps view back or freezes interaction; wheel zoom, zoom-to-node, chunk-reload self-heal — #4071, #4080, #4082, #4098
  • Map: Null Island / out-of-range positions filtered from markers and line endpoints — #4077, #4078, #4099, #4101, #4103
  • Map: ROUTER_LATE renders as repeater tower — #4076 (#4075); tileset switch no longer remounts/flickers the raster layer — #4097
  • Dashboard map: neighbor lines honor the configured map endpoint — #4055 (#4042), thanks @temalo
  • MeshCore: automation DM triggers populate fromName — #3978 (#3973); DM destinations resolve as pubkey strings — #4019 (#4018)
  • MeshCore: exact decrypt-and-match for "repeaters relayed" echo — #3987 (#3979); unscoped replies for unnameable trigger scopes — #4003 (#3998)
  • MeshCore: danger-guard no longer fires on dotted config paths — #4029 (#4025); non-functional Stats quick-action removed — #4031 (#4026)
  • MeshCore Virtual Node: boot race & listen-error zombie fixed — #4001 (#4000, #3975); login relays admin flag + firmware level — #4095 (#4094); CLI-type messages relay via CLI path — #4107 (#4106)
  • Auth: proxy-auth auto-provisioning failed on pre-v3.7 SQLite databases (stale CHECK constraint) — #4120 (#4119)
  • Permissions: virtual-channel canRead grants honored on all per-source read surfaces — #4116 (#4093)
  • Automation: multi-source resolution & test fixes — #4007, #4019

Security

  • TRUST_PROXY defaults to false — direct clients can no longer spoof X-Forwarded-For past the login rate limiter — #3968
  • CSRF-token prefix and hot-path request details no longer logged to the browser console — #3970
  • Process-level unhandledRejection/uncaughtException safety net — #3967

Refactoring (remediation epic #3962)

  • One unified source-manager registry (MeshCore included) — #4004, #4017; shared scheduler classes — #4005, #4009, #4014
  • Fresh installs bootstrap via migration replay; createTables() deleted; schema-drift tripwire — #3992, #4034, #4040, #4041
  • Legacy sync database API deleted; misc.ts split into domain repositories — #4023, #4030, #4032, #4036, #4043, #4048
  • { success, error, code } response envelope helpers — #3990; fail-closed source scoping — #3976
  • Route-test harness with real auth middleware — #3986; lint ratchet (CI lint now blocking) — #3972, #3989, #3985
  • Source-scoped API hardening: sourceId required on per-source endpoints — #4053, #4054, #4056, #4058, #4059, #4061, #4062, #4063

CI / DevOps

  • Docker tags: pre-releases publish :dev; :latest reserved for stable — #4102
  • Log volume trimmed: routine activity moved to debug, new trace tier, message bodies redacted — #3994
  • System tests: sourceId wiring + retired-endpoint expectations — #4052, #4069, #4121
  • 4.13 documentation refresh: source-scoped API, release tracks, updating guide, blog — #4105, #3966

Removed

  • In-app Auto-Upgrade retired — watchdog sidecar, upgrade endpoints (now 410 FEATURE_RETIRED), and the Settings panel removed; update notifications remain — #4108

Dependencies & Translations

  • Production group (9 updates), helmet, protobufjs, lucide-react, re2, TypeScript/ESLint toolchain; meshcore.js fork pinned to SHA — #3969, #4083–#4092
  • Translations from Hosted Weblate — #4006

Issues Resolved

#3636, #3788, #3963, #3971, #3973, #3974, #3975, #3977, #3979, #3981, #3995, #3996, #3998, #4000, #4015, #4016, #4018, #4020, #4024, #4025, #4026, #4027, #4042, #4044, #4046, #4047, #4075, #4093, #4094, #4106, #4112, #4119

Upgrade Notes

Three deliberate breaking changes — please review before upgrading:

  1. Auto-Upgrade is retired. If you used the upgrade sidecar: remove docker-compose.upgrade.yml from your compose command, docker rm -f meshmonitor-upgrader, and drop AUTO_UPGRADE_ENABLED. For unattended updates use Watchtower. Full checklist: Updating MeshMonitor.
  2. Behind a reverse proxy? Set TRUST_PROXY explicitly (e.g. TRUST_PROXY=1 for one proxy hop). It now defaults to false; without it, proxied deployments will rate-limit logins by the proxy's IP.
  3. API consumers: source-scoped endpoints require sourceId. The bundled UI is unaffected. External scripts should consult the API source-scoping guide.

Docker users tracking release candidates: switch to the :dev tag — :latest now only moves on stable releases.

Thanks to @temalo for the Dashboard neighbor-lines fix, and to everyone who filed the detailed bug reports this release is built on. 🎉

Full Changelog: https://github.com/Yeraze/meshmonitor/compare/v4.12.5...v4.13.0

🚀 MeshMonitor v4.13.0

📦 Installation

Docker (recommended):

docker run -d \
  --name meshmonitor \
  -p 8080:3001 \
  -v meshmonitor-data:/data \
  ghcr.io/Yeraze/meshmonitor:4.13.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.

Breaking Changes

  • Auto‑Upgrade retired; remove upgrade sidecar, config flags, use Watchtower for unattended updates.
  • `TRUST_PROXY` defaults to `false`; must be set explicitly when behind a reverse proxy.
  • All source‑scoped API endpoints now require an explicit `sourceId` parameter.

Security Fixes

  • CVE‑2026‑XXXXX — `TRUST_PROXY` defaults to `false`, preventing spoofed `X-Forwarded-For` through the login rate limiter (GHSA‑xxxx).
  • Removed CSRF-token prefix and hot‑path request details from browser console logs.
  • Added process‑level safety net for unhandledRejection/uncaughtException events.

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track Yeraze/meshmonitor

Get notified when new releases ship.

Sign up free

About Yeraze/meshmonitor

All releases →

Related context

Earlier breaking changes

  • v4.7.2 Route `destination` field now rejects non‑8‑hex nodeId or 64‑hex publicKey, returning HTTP 400.

Beta — feedback welcome: [email protected]