MeshMonitor v4.13.0 is out. This one has a clear headline: the maps grew up. Behind the scenes, every map in the app β Dashboard, Nodes, Map Analysis, MeshCore, Unified, embeds β now shares one rendering core, which means new map features land everywhere at once and map bugs die everywhere at once. On top of that foundation sits a pile of new map tools, a rounder MeshCore experience, smarter automations, and a long-awaited notifications fix.
One map core, many new tricks β
For years, each map surface in MeshMonitor was its own little island β separate marker code, separate traceroute drawing, separate popups. A fix on one map routinely missed the other five. v4.13 consolidates all of them onto a single shared shell, layer library, and popup family. You'll notice it as consistency: traceroutes render identically on every map (embeds included), and popups behave the same wherever you click.
The new toys built on top:
- Node selection and Follow mode on Map Analysis β click a node to highlight it and its links, or tell the map to follow it (with optional auto-zoom) as new positions arrive.
- Distance measurement β pick two nodes on any map and get the line-of-sight distance between them.
- Polar grid overlay β range rings and bearings for the antenna-minded, on Map Analysis, Unified, and MeshCore maps.
- Interaction polish β zoom is clamped to what the tileset actually has, spiderfied clusters no longer collapse when you open a popup, markers hidden exactly underneath another are reachable, and panning or zooming while the map flies to a node now cancels the flight instead of yanking you back. Small things, but you'll feel them.
- Junk positions filtered β nodes reporting (0,0) or impossible coordinates no longer draw markers, or route lines sprinting off toward Null Island.
MeshCore: rounding out the toolkit β
- Delete and purge messages β per message, per conversation, or everything.
- Automatic send retries β DMs that miss their ack retry on the same path and then via flood; automated channel sends (Auto-Responder, automations, Timed Events) get an opt-in retry too.
- Auto-Pathfinding target filtering β stop spending airtime discovering paths to every contact; narrow it by allowlist, name regex, last-heard, hops, or signal strength.
- Virtual Node completions β companion apps connected through MeshMonitor can now send status requests and neighbour queries, receive the full login response (so remote-admin UI unlocks properly), and CLI-type messages are relayed on the CLI path instead of arriving as chat.
- Configurable CLI timeout β slow repeater links no longer race a hardcoded 15-second clock.
- Mobile-friendly node list β the contact list collapses so you can actually reach the map on a phone.
Automations get more expressive β
Message triggers can now match a list of channels instead of exactly one, a new scheduled device-reboot action handles that one flaky node on a nightly cron, and tapback reactions can be routed through an explicit set of sources.
Notifications that actually notify β
If you ever set up low-battery alerts and swore they silently did nothing β you were right, and you weren't alone (it was reported five separate times). Preferences saved from different source pages could split across rows that the eligibility, matching, and delivery stages each read differently, so every check passed and no alert ever fired. v4.13 makes the pipeline read your preferences as one coherent whole, and logs a clear summary whenever someone is skipped.
Quieter logs β
Container logs at the default level are now near-silent when idle: routine per-packet and per-request chatter moved to debug, a new trace level captures the full firehose, and message bodies are no longer written to logs at all. LOG_LEVEL=debug when you need the detail back.
Heads-up: things that changed β
A few deliberate breaks, each with its own writeup:
- Auto-Upgrade is retired. MeshMonitor still tells you when an update is available (and can fire an automation event about it), but the sidecar that performed upgrades is gone. See Retiring Auto-Upgrade in 4.13 and the Updating MeshMonitor guide for the short migration checklist.
TRUST_PROXYnow defaults tofalse. If you run behind a reverse proxy, setTRUST_PROXY=1explicitly β the old default let direct clients spoof their IP past the login rate limiter.- Source-scoped API endpoints require
sourceId. The bundled UI is fully wired; external scripts should read the API source-scoping post. - Docker tags:
:latestnow only moves on stable releases; release candidates publish to:dev. Details in Release Tracks.
Everything else β
Dozens more fixes β proxy-auth on long-upgraded databases, virtual-channel read permissions, MeshCore automation triggers, ROUTER_LATE icons, tileset-switch flicker β plus a major internal architecture cleanup that you shouldn't notice at all, which is the point. The full changelog has every entry.
Thanks as always to everyone filing detailed issues β several of this release's best fixes started as your bug reports. Enjoy!