>_ DevTrendsen

Language

Home

Languages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Security
TypeScript

How to visually monitor your Meshtastic network with MeshSense

If you've ever built an autonomous network using boards like Heltec or TTGO T-Beam with Meshtastic firmware, you've likely encountered the typical observability problem. Nodes are scattered across rooftops, balconies, or backpacks, and staring at a tiny 0.96-inch screen or tapping through a mobile app just to evaluate routes quickly gets old. You want a proper dashboard with a map, signal strength graphs, and packet tracing.

The MeshSense project solves exactly this problem. It's a lightweight open-source application that connects to your Meshtastic node and renders a live map with all network parameters.

What the application can do

The main feature of MeshSense is real-time statistics collection without workarounds and complex integrations. You simply connect it to the base node via Bluetooth or regular Wi-Fi, and the interface starts gathering data from the surrounding area.

Here are the main scenarios where the dashboard saves time:

  • Topology and node map. The application clearly displays which nodes are currently active, their physical GPS locations, and when they last communicated.
  • Route tracing. The traceroute feature lets you instantly see how many intermediate relays a packet passed through and which path was optimal.
  • Signal quality reports. You can monitor SNR and reception levels from each node to fine-tune directional antennas or identify dead zones in the city.
  • Hardware status monitoring. Battery charge, temperature, and telemetry data from remote devices are displayed.

Running on a server and in headless mode

Beyond the Electron desktop version, the project runs well on single-board computers like Raspberry Pi positioned near the base radio station.

A headless mode is available for operation without a graphical interface. MeshSense starts a local web server accessible from any browser on the local network, secured with a secret key:

export ADDRESS=10.0.1.20  # IP-адрес вашей Meshtastic ноды
export PORT=5920          # Порт веб-интерфейса

ACCESS_KEY=mySecretKey ./meshsense-x86_64.AppImage --headless

When running the application on an ARM64 board without a monitor, developers suggest launching AppImage through a virtual framebuffer:

dbus-run-session xvfb-run ./meshsense-arm64.AppImage --headless \
 --disable-gpu --in-process-gpu --disable-software-rasterizer

For Debian or Ubuntu-based systems, install a couple of packages before starting AppImage: libfuse2 for the container itself to function and fonts-noto-color-emoji for icons to display properly in the interface.

Under the hood

The project architecture is split into three components: a Vite-based frontend, a Node.js API backend, and an Electron wrapper.

There's an interesting implementation detail in the code: for direct interaction with radio modules via Bluetooth, the developers built a custom module webbluetooth tied to system libdbus-1-dev and cmake. This means when building locally from source, you'll need to compile the binary binding first:

git clone --recurse-submodules https://github.com/Affirmatech/MeshSense.git
cd MeshSense

# Сборка нативной зависимости для Bluetooth
cd api/webbluetooth
npm i
npm run build:all
cd ../..

# Установка остальных пакетов
./update.mjs

For development, startup is split into two independent processes. The frontend starts on port 59, and the backend on port 59, automatically proxies unhandled routes to Vite:

# В первом терминале (UI)
cd ui
PORT=5921 npm run dev

# Во втором терминале (API)
cd api
export DEV_UI_URL=http://localhost:5921
PORT=5920 npm run dev

In the README, the authors honestly warn about a dev mode bug: when Vite hot-reloads, state event subscriptions sometimes duplicate, causing log lines to appear twice. This is fixed by simply reloading the page in the browser.

Who the project is useful for

MeshSense is a handy utility for radio amateurs, LoRa enthusiasts, and those building decentralized communication networks for hiking, cottages, or backup urban messaging. It eliminates the need to manually parse logs through a serial port or guess why a packet didn't reach the next hill over.

If you already have a home server or Raspberry Pi running with a connected LoRa node, it makes sense to add MeshSense to your startup and get a clean view of the airwaves right in front of you.

Related projects