github Yeraze/meshmonitor v4.7.2

4 hours ago

MeshMonitor v4.7.2

A maintenance release focused on Channel Database robustness, message-ordering correctness, and request-input validation. The MQTT default-channel bootstrap no longer crashes on pre-v3.7 SQLite installs that still carry the legacy CHECK (psk_length IN (16, 32)) constraint, and a long-requested Import from URL flow lets admins paste a Meshtastic channel URL and save its channels as virtual decryption-key rows in one step. Messages from nodes with bad RTCs (year 1970 or 2065) now sort by server-side receipt time instead of the radio's claimed timestamp, so channel and DM lists stay in the order MeshMonitor actually saw the traffic. A long-standing crash where a 64-char public key pasted as a destination overflowed the PG bigint column is fixed: routes now treat 64-hex inputs as a publicKey lookup, malformed inputs return HTTP 400, and the underlying repository guard catches the entire class of bug regardless of the entry point. A new MQTT bridge direction mode ("publish only" / "subscribe only" / "bidirectional") silences the permission-denied spam on public servers like mqtt.meshtastic.org.

Features

  • #3191 Import channels from a Meshtastic URL — paste https://meshtastic.org/e/#…, MeshMonitor decodes the embedded ChannelSet and lets you select which channels to save as virtual rows (with editable names and PSK preview).
  • #3189 MQTT bridge direction-mode dropdown — publish_only for public servers that reject SUBSCRIBE, subscribe_only for read-only monitoring, bidirectional (default) preserves existing behavior.

Bug Fixes

  • #3185 Channel Database — drop legacy psk_length IN (16, 32) CHECK constraint that blocked the MQTT default-channel bootstrap on databases created before the v3.7 baseline. Adds migration 071 that detects and rebuilds the table on affected SQLite installs (no-op for fresh / PG / MySQL). Fixes #3184.
  • #3188 Nodes — reject out-of-range nodeNum and resolve publicKey destinations. Six routes (DM / traceroute / position / NodeInfo / NeighborInfo / telemetry) now route 8-hex strings to parseInt, 64-hex strings to a publicKey lookup, and everything else to HTTP 400. Defense-in-depth guard in NodesRepository.getNode / getNodesByNums catches the bug at the DB boundary too. Fixes #3186.
  • #3190 Messages — sort by server-side ingest time (receivedAt), not the radio's reported timestamp. Channel + DM lists and per-node "last message" aggregations are now stable under bad-clock senders. Display is unchanged — the bubble still shows the radio's claimed time so misconfigured nodes remain visible. Fixes #3187.

Dependencies

  • #3180 Bump pg from 8.20.0 to 8.21.0.
  • #3179 Bump helmet from 8.1.0 to 8.2.0.
  • #3181 Bump protobufjs from 8.3.0 to 8.4.2.
  • #3182 Bump production-dependencies group across 1 directory with 9 updates.
  • #3176 Bump development-dependencies group with 3 updates.

Issues Resolved

  • #3184 MQTT channel_database bootstrap fails with CHECK constraint when primary channel uses AQ==
  • #3186 nodeNum overflow causes DrizzleQueryError: invalid input syntax for type bigint
  • #3187 Nodes with bad time stay at the bottom of channels tab

Upgrade notes

  • Pre-v3.7 SQLite installs will pick up migration 071 on first boot. It rebuilds the channel_database table to drop the legacy CHECK constraint. Rows + ids + the idx_channel_database_enabled index are preserved. Fresh installs and PG/MySQL installs are a no-op.
  • API behavior change: routes that take a destination field (DM / traceroute / position / NodeInfo / NeighborInfo / telemetry requests) now return HTTP 400 for inputs that aren't an 8-hex nodeId or a 64-hex publicKey. Clients passing already-parsed numeric destination values are unaffected.
  • No schema changes for messages — receivedAt is computed from the existing messages.createdAt column, exposed as a new field on the wire.

Full changelog: v4.7.1...v4.7.2

🚀 MeshMonitor v4.7.2

📦 Installation

Docker (recommended):

docker run -d \
  --name meshmonitor \
  -p 8080:3001 \
  -v meshmonitor-data:/data \
  ghcr.io/Yeraze/meshmonitor:4.7.2

🧪 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.