MeshMonitor v4.0.2
Summary
This release is a follow-up to the v4.0.1 hotfix and continues hardening the new multi-source architecture introduced in 4.0. It fixes a Postgres upgrade failure where migration 028 left a legacy single-column UNIQUE constraint on user_notification_preferences.userId that blocked saving notification preferences on any non-default source. It scopes several remaining tabs and queries to the active source — Notifications, Settings, the Virtual Node info panel, and the latest-telemetry-value rollup — fixing cases where users on Source 2+ saw default-source data. It resolves an upgrade-time crash on MySQL where migration 037 attempted to recreate a foreign key with a duplicate name, plus a startup crash in the packet-log retention timer. The unified channel/messages experience now correctly saves channel names, routes cross-source actions to the right node, and stops the source picker from drifting. The Messages composer now supports multi-line input (Enter sends, Shift+Enter inserts a newline). On the database side, composite indexes back the hot per-source query patterns and the default Postgres/MySQL pool size has been raised to keep up with per-source polling fan-out.
Bug Fixes
- fix(notifications): scope channels per-source + drop legacy unique constraint (#2843)
- fix(settings): scope per-source reads to per-source namespace only (#2842)
- fix(upgrade): MySQL migration 037 FK + packet-log timer crash (#2838)
- fix(unified): channel-name save, cross-source routing, picker drift (#2837)
- fix(info): show per-source admin commands status in Virtual Node panel (#2835)
- fix(telemetry): scope getLatestTelemetryValueForAllNodes by sourceId (#2834)
- fix(sources): remove FE virtualNode port == source port block (#2832)
Features
- feat(messages): multi-line compose — Enter sends, Shift+Enter inserts a newline (#2841)
Performance
- perf(db): composite indexes for hot query patterns + raise default PG/MySQL pool size (#2833)
Release
- chore(release): bump version to 4.0.2 (#2844)
Issues Resolved
- #2836 — v4.0.1 hotfix: migration 32/33 hang on MySQL upgrade
- #2768 — Incorrect value on last-traced time
- #2723 — v4.0.0-beta5: all connected nodes use the same script settings
Upgrade Notes
- PostgreSQL users who saw
duplicate key value violates unique constraint "user_notification_preferences_userId_key"when saving notification preferences on a secondary source: this is fixed by new migration 051, which runs automatically at startup and drops the legacy single-column UNIQUE. - MySQL users upgrading from 3.12 → 4.0 who hit the migration 037 foreign-key error or a server crash from the packet-log timer: this is fixed by #2838 and the upgrade should now complete cleanly.
- No manual action required for either fix — both are covered by the automatic migration runner on startup.
Full Changelog: v4.0.1...v4.0.2
🚀 MeshMonitor v4.0.2
📦 Installation
Docker (recommended):
docker run -d \
--name meshmonitor \
-p 8080:3001 \
-v meshmonitor-data:/data \
ghcr.io/Yeraze/meshmonitor:4.0.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.