MeshMonitor v4.10.1 lands a feature that's been a recurring pain point for anyone running infrastructure: keeping the favorites list current on routers you can't physically reach.
Why favorites matter (and why they're a chore) β
Meshtastic gives you a zero-hop cost between favorited routers β a real, measurable routing benefit. But that only holds if each router's favorites list actually reflects its current neighbors. As a mesh grows, keeping that list up to date means either walking to the node and managing it over Bluetooth, or spamming meshtastic --set-favorite-node from a terminal with no visual confirmation. Neither scales.
Automatic Favorites Management β
v4.10.1 adds an Automatic Favorites Management section to a node's Remote Admin page. Point it at a remote router or base station you administer, and MeshMonitor keeps that node's favorites list current for you.
Each cycle (default: once every 24 hours), it:
- Discovers the target's direct neighbors β from the node's own NeighborInfo broadcasts, from traceroutes that pass through it, or both.
- Filters to the roles worth favoriting β Router, Router Late, and Client Base by default, fully configurable.
- Favorites the new ones and re-asserts a few existing ones, with per-cycle caps (default 1 each) so it stays a polite citizen of the mesh.
It's a heavy operation β every favorite is several packets plus a session-passkey handshake β so the defaults are deliberately conservative. Set it and let it tick along in the background.
"Wait, you do get an ACK" β
The original design assumed favorite commands were fire-and-forget over LoRa β sent blindly, with no confirmation. Then users told us that wasn't true: setting a remote favorite does come back acknowledged.
They were right. We went into the Meshtastic firmware to confirm exactly what happens, and it turns out MeshMonitor's admin packets already request a response β so the target node's AdminModule returns an explicit routing ACK after it processes the command. We were simply throwing that ACK away.
Now we capture it. Every favorite shows its result:
- β confirmed β the remote received, authorized, and processed the command.
- β± no ack β nothing came back in time (it may still have applied).
- β rejected β the remote refused it (e.g. a bad/expired session key).
The same confirmation now appears as a toast on the manual Set Favorite / Remove Favorite buttons in Node Management, too β so even one-off remote favorites tell you whether they stuck.
One honest caveat we kept visible in the UI: an ACK proves the remote processed the request. If the favorited node isn't in the remote's node database yet, the firmware accepts and ACKs the command but the favorite is a no-op there until that node is known. That's exactly why the re-favorite pass exists β it re-sends previously assigned favorites, un-confirmed ones first, to recover anything that didn't stick.
Saving airtime: Maximum neighbor age β
NeighborInfo discovery doesn't need to ask the mesh for fresh data every single cycle. A new Maximum neighbor age setting (default 24 hours) tells MeshMonitor to reuse an on-file NeighborInfo record if it's newer than that window, instead of spending airtime on another request. Set it to 0 to always request fresh.
Also in 4.10.1 β
- Disable link previews (#3416): a global Settings β Link Previews toggle (and a
LINK_PREVIEWS_ENABLED=falseenv override) that stops MeshMonitor from making any outbound request to render OpenGraph cards β across every message surface, Meshtastic, MQTT, and MeshCore. Defaults to on, so nothing changes unless you turn it off. - Per-channel notification sounds: pick a different "new message" tone per channel from a bundled set of nine original, runtime-synthesized sounds (plus Silent and a Preview button), scoped per source.
- Guided firmware half-flash recovery (#3413): a guided flow to recover a device left in a half-flashed state, with an online check before it tries.
Plus fixes to MeshCore hop-count decoding, the direct-message notification-sound row, and the favorites checkbox layout.
Upgrade β
# Docker
docker pull ghcr.io/yeraze/meshmonitor:4.10.1
docker compose down && docker compose up -d
# Helm
helm repo update
helm upgrade meshmonitor meshmonitor/meshmonitor --version 4.10.1Desktop builds are on the Releases page.