github Yeraze/meshmonitor v4.6.4

5 hours ago

MeshMonitor v4.6.4

Summary: This release lands the MeshCore path-management series — MeshMonitor can now persist, display, reset, share, live-update, and (optionally) manually edit the forwarding paths between contacts. Alongside it ships major stability work for Passive Mode on large Meshtastic TCP networks (manual resync, startup-grace fast reconnect, per-source staleness override, createdAt-based chat ordering), per-transport visibility toggles on the dashboard map and packet monitor (RF/UDP/MQTT), and a critical bug fix where MQTT-ingested publicKey values were stored as hex while every other path used base64 — silently triggering false-positive "key mismatch" warnings every time a MQTT-seen node later sent NodeInfo over the radio (migration 069 backfills existing hex rows). Also includes new v1 API node-action endpoints, multi-response HTTP auto-responder triggers, per-message source attribution (source_ip/source_path columns), and a Safari/iOS keyboard fix.

Features

MeshCore Path Management (full series)

  • #3123feat(meshcore): persist + reset per-contact forwarding path (slices 1+2). Adds out_path / path_len columns (migration 068), surfaces Hops Away + Path bytes on the contact detail panel, and ships a Reset Path action wrapping CMD_RESET_PATH.
  • #3124feat(meshcore): add Share Contact action. Broadcasts a contact's saved advert as a zero-hop frame via CMD_SHARE_CONTACT.
  • #3127feat(meshcore): live path updates via debounced PathUpdated push. Coalesces flurries from chatty contacts into a single device refresh per 1.5 s window.
  • #3130feat(meshcore): manual path editor, feature-flagged. Adds the meshcoreAdvancedPathEdit setting + an Edit Path… modal for advanced users who want to force a specific hop chain (gated server-side too).

Passive Mode Stability (#3122)

  • #3125fix(stability): per-source Passive Mode + createdAt chat ordering.
  • #3126feat(stability): manual Resync action for Passive Mode sources.
  • #3128feat(stability): startup-grace fast reconnect for Passive Mode.
  • #3129feat(stability): per-source resync staleness override for Passive Mode.

Visibility Toggles

  • #3116feat(packet-monitor): add transport-mechanism filter (UDP/LoRa/MQTT/API).
  • #3117feat(map): per-transport visibility toggles (Show RF / UDP / MQTT).
  • #3118feat(dashboard-map): add Show RF/UDP/MQTT + traceroute + accuracy toggles.

API & Automations

  • #2585feat: add v1 API node action endpoints. Thanks to @tanrax for the contribution.
  • #2881feat: support multiple responses for HTTP auto-responder triggers. Thanks to @chaykin.
  • #3114feat(messages): add source_ip + source_path columns for per-message attribution. Thanks to @rancur.

Bug Fixes

  • #3133fix(mqtt): store ingested publicKey as base64 (not hex). The MQTT NodeInfo ingest path was encoding publicKey as hex while the direct serial/TCP path and the device's security-config handshake both used base64. The mismatch silently broke the key-mismatch detector, firing false-positive 🔐 Key mismatch detected warnings on every NodeInfo arrival for any MQTT-seen node. Migration 069 backfills existing hex-encoded rows (lowercase 32-byte hex matching ^[0-9a-f]{64}$) to base64; idempotent across SQLite / PostgreSQL / MySQL.
  • #3121fix(ios): keep text inputs above Safari keyboard accessory bar. Closes #2994.
  • #3120fix(telemetry): suppress duplicate-packet WARN spam in MQTT ingest. Closes #3119.

Documentation

  • #3115docs: add deployment comparison table to Getting Started.
  • #3131docs: reframe top-level pages as multi-protocol (Meshtastic, MeshCore, MQTT).
  • #3132 — Release housekeeping for 4.6.4 + a new MeshCore Routing & Paths section in docs/ARCHITECTURE_LESSONS.md documenting the load-bearing distinction between Meshtastic traceroute traces and MeshCore sender-supplied forwarding instructions, plus the four user actions (Reset / Share / Set Out-Path / Trace), the 0xFF/-1 sentinel gotcha, and the push-debounce design.

Migrations

  • 068meshcore_nodes_out_path: adds out_path TEXT + path_len INTEGER to meshcore_nodes so the per-contact MeshCore route survives restarts.
  • 069normalize_node_public_keys_to_base64: one-time backfill converting any hex-encoded nodes.publicKey values to base64 to match the canonical encoding used everywhere else. Idempotent.

Issues Resolved

Closes #2994, #3112, #3119, #3122.

Upgrade Notes

Two new migrations run automatically on startup. Migration 069 is the user-visible one: if you've been receiving MeshMonitor's 🔐 Key mismatch detected warnings for nodes whose keys hadn't actually changed (typically nodes you saw via MQTT before they sent direct NodeInfo), those warnings will stop after the migration converts the legacy hex-stored rows. No action required.

Full changelog: v4.6.3...v4.6.4

🚀 MeshMonitor v4.6.4

📦 Installation

Docker (recommended):

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

Don't miss a new meshmonitor release

NewReleases is sending notifications on new releases.