OrcMesh connects to one Meshtastic radio over USB, Bluetooth, or Wi-Fi. The radio — not the PC — sends and receives the actual LoRa packets. OrcMesh gives you a chat client on top of it, plus a monitoring dashboard that surfaces what the mesh is really doing: who's reachable, how many hops away, what's relaying, and how the signal looks.
It's a desktop app, not a web service. Nothing is uploaded anywhere; all history lives in a local SQLite database on your machine.
Every node your radio knows about, plotted and clustered. Populated from the radio's own node database the moment you connect — plus locally persisted history, so the map isn't empty before you've connected anything. Light and dark basemaps.
Twelve live KPI cards covering node counts, packet rates, signal, session totals, and distance extremes. The header shows the radio's actual LoRa configuration — region, modem preset, and channel.
Alongside them: rankings (last heard, most packets, nearby/farthest, strongest signal, messages sent), a live packet-activity chart, a full packet log, and distribution panels breaking traffic down by type, channel, node role, and hardware model.
Every node, sortable and searchable, with a detail panel covering identity, activity, last-hop RF signal, hop counts, and telemetry.
Right-click any node to message it, show it on the map, request its position or telemetry, run a traceroute, favorite it on the radio, or remove it from the radio's node database.
|
Signal and hops — SNR, RSSI, and hop-by-hop reach for a node heard over RF. |
Telemetry — battery, voltage, channel utilization, air-time, and environment sensors when a node reports them. |
Channel messaging across the radio's configured Meshtastic channels, direct messages to any reachable node, and local message history that survives restarts — Meshtastic radios don't store message history themselves, so OrcMesh keeps its own.
When connected over USB/Serial, the Device page provides typed controls for radio and module configuration, owner identity, channels, fixed position, reboot/shutdown, NodeDB reset, and guarded factory resets. Passwords, PINs, PSKs, and cryptographic key material are never read into editable controls or written to logs; secret replacements are write-only.
The Firmware tab discovers official meshtastic/firmware releases for the
target reported by the connected radio. It verifies the release SHA-256,
target/hardware metadata, and image hashes before flashing. Update mode writes
only the application image and preserves settings. Full install requires a
typed confirmation, erases the device, and restores the verified factory,
OTA, and filesystem images at the release-declared offsets. A chip-ID preflight
must identify the expected ESP32 family before either path can write anything.
Firmware flashing is inherently interruption-sensitive. Use a known-good USB cable and do not unplug or power off the radio until OrcMesh reports completion.
A waterfall view of raw RF energy in the LoRa ISM bands. This shows that
activity is happening and where in the band — it does not decode LoRa
packets. Requires an RTL-SDR dongle plus pyrtlsdr and the native librtlsdr
driver; OrcMesh runs normally without any of that.
Just want to run it? Grab the latest build from
Releases, extract,
and run OrcMesh.exe. No installer, no Python needed. Windows x64.
From source (Python 3.12+ x64):
git clone https://github.com/hardcoreerik/OrcMesh.git
cd OrcMesh
.\scripts\bootstrap.ps1
.\scripts\run-dev.ps1| Transport | Notes |
|---|---|
| USB / Serial | Most reliable. Pick the COM port and hit Connect. |
| Bluetooth | Pair the radio in Windows Settings first — Meshtastic radios require OS-level pairing before any app can reach them. OrcMesh detects this case and offers a shortcut to the Bluetooth settings page. |
| Wi-Fi / TCP | Enter the radio's hostname or IP (default port 4403). |
.\scripts\test.ps1 # run the test suite
.\scripts\build.ps1 # build dist\OrcMesh\OrcMesh.exe
.\scripts\run-dev.ps1 -Debug # verbose loggingFor upgrade compatibility, logs remain under %LOCALAPPDATA%\MeshChat\Logs\.
Architecture — PySide6 (Qt 6) desktop app. All blocking Meshtastic I/O runs
on a dedicated QThread; the radio library's PubSub callbacks are marshalled
back to the GUI thread as Qt signals, so widgets are only ever touched from the
main thread. Packets flow through a single deduplicating ingestion pipeline
before reaching the UI or the SQLite store. The map is Leaflet in a
QWebEngineView, bridged over QWebChannel.
- MeshCore network support alongside Meshtastic
- Compact image transmission over the mesh — see docs/mcoreimg-integration.md
Alpha. It works and it's useful, but expect rough edges. Bug reports and issues are welcome.
GPL-3.0-only — see LICENSE.
OrcMesh links the official Meshtastic Python package, which is GPL-3.0 copyleft, so this project is licensed to match. Full dependency licensing is in THIRD_PARTY_LICENSES.md.
Not affiliated with or endorsed by the Meshtastic project.






