// the find
Affirmatech/MeshSense
MeshSense directly connects to your Meshtastic node via Bluetooth or WiFi and continuously provides information to assess the health of your mesh network.
MeshSense is a desktop app, with a headless mode, that monitors a Meshtastic mesh through a connected node over Bluetooth or WiFi. It maps the nodes it can see and shows signal reports and trace routes. It is aimed at people who run a Meshtastic node and want a live view of the mesh around them.
- The layers are split cleanly. The api/ service appears to own the device connection and state (state.ts, wss.ts), and the Svelte UI is a client of it. The same backend therefore serves the Electron window and the --headless mode.
- Headless mode is a real use case. The ACCESS_KEY separates remote connections that get full permissions from those that do not, so a monitoring box can be watched from another machine without handing out control.
- Bluetooth is handled on the Node side. webbluetooth is vendored as a submodule and built against D-Bus on Linux, which is the hard part of reaching a Meshtastic node over BLE on that platform.
- Arm64 AppImages and the Raspberry Pi OS notes show that a Pi is a supported target, not an afterthought.
- The last push was 2025-10-23, almost a year before today. The dev setup depends on a git submodule (meshtastic-js), a native build (cmake, libdbus-1-dev), and a custom update.mjs. Adopting it means trusting that all three keep working.
- Headless mode is Electron under xvfb-run with GPU flags turned off. It works, but a server install carries a browser runtime and a virtual display to run what is essentially a Node service.
- ACCESS_KEY is one shared secret with full permissions. The README describes no per-user accounts, rotation, or TLS. That is acceptable on a home LAN and a poor fit for anything reachable from outside without a reverse proxy in front of it.
- The README admits that Vite hot reload duplicates state subscriptions and tells developers to refresh the browser. That points to incomplete subscription cleanup in the state layer, which is the kind of bug that surfaces as duplicated log entries in production too.