Skip to content

MeshMonitor v4.10.1 - Automated Remote Favorites Management

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:

  1. Discovers the target's direct neighbors β€” from the node's own NeighborInfo broadcasts, from traceroutes that pass through it, or both.
  2. Filters to the roles worth favoriting β€” Router, Router Late, and Client Base by default, fully configurable.
  3. 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=false env 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 ​

bash
# 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.1

Desktop builds are on the Releases page.

Last updated: