Skip to content

defidude/Electastic

Repository files navigation

Electastic

A cross-platform Meshtastic desktop client for Mac, Linux, and Windows.

Connect to your Meshtastic devices over Bluetooth, USB Serial, or WiFi — no python, no phone required.

Originally ported from Joey's (NV0N) Meshtastic Mac Client and the Denver Mesh community. This is a full rewrite in Electron + React + TypeScript to support all platforms.

Warning

This is an early release. A lot of things might be buggy. This may or may not be updated over the coming days/weeks. So far it has only been tested on a Mac with a T-Deck in Bluetooth Pairing Mode.


Setup

Prerequisites

  • Node.js 20+ (LTS recommended — download here)
  • npm 9+ (included with Node.js)
  • Build tools for compiling the native SQLite module:
    • Mac: Xcode Command Line Tools — run xcode-select --install
    • Linux: sudo apt install build-essential python3 (Debian/Ubuntu)
    • Windows: Visual Studio Build Tools with the "Desktop development with C++" workload
  • A Meshtastic device (any hardware running Meshtastic firmware)

Mac

git clone https://github.com/Denver-Mesh/meshtastic-client
cd meshtastic-client
npm install
npm start

Note: npm install automatically compiles the native SQLite module for Electron via electron-rebuild. If it fails, make sure Xcode Command Line Tools are installed.

On first Bluetooth connection, macOS will show a system popup requesting Bluetooth permission — you must accept. If you accidentally denied it, go to System Settings > Privacy & Security > Bluetooth and toggle Electastic on.

Linux

git clone https://github.com/Denver-Mesh/meshtastic-client
cd meshtastic-client
npm install
npm start

BLE requires BlueZ installed. If Bluetooth doesn't work, try launching with --enable-features=WebBluetooth. For serial access, add yourself to the dialout group:

sudo usermod -a -G dialout $USER
# Then log out and back in

Windows

git clone https://github.com/Denver-Mesh/meshtastic-client
cd meshtastic-client
npm install
npm start

Should work out of the box. If serial isn't detected, make sure you have the correct USB drivers for your device (e.g., CP210x or CH340 drivers).


Connecting Your Device

  1. Power on your Meshtastic device
  2. Put it in Bluetooth pairing mode (if connecting via BLE)
  3. Open Electastic and go to the Connection tab
  4. Select your connection type (Bluetooth / USB Serial / WiFi)
  5. Click Connect and select your device from the picker
  6. Wait for status to show Configured — you're connected!

Building the Distributable

# Build for your platform
npm run dist:mac      # macOS → .dmg + .zip in release/
npm run dist:linux    # Linux → .AppImage + .deb in release/
npm run dist:win      # Windows → .exe installer in release/

The distributable is output to the release/ directory.


Features

  • Bluetooth LE — pair wirelessly with nearby Meshtastic devices
  • USB Serial — plug in via USB cable
  • WiFi/HTTP — connect to network-enabled nodes
  • Chat — send/receive messages across channels with delivery indicators (ACK/NAK) and emoji reactions (tapback)
  • Channel Management — create and configure channels with custom names and PSK encryption
  • Node List — all discovered nodes with SNR, battery, GPS, last heard
  • Node Detail Modal — click any node or sender name for full info
  • Map — interactive OpenStreetMap with node positions
  • Telemetry — battery voltage and signal quality charts
  • Radio Config — region, modem preset, device role, GPS, power, Bluetooth, display settings
  • Admin — reboot, shutdown, factory reset, trace route, node removal, DB export/import/clear
  • Persistent Storage — messages and nodes saved locally via SQLite
  • Dark UI — custom scrollbar, tab icons, polished chat bubbles

Connection Types

Platform Bluetooth Serial HTTP
macOS Yes Yes Yes
Windows Yes Yes Yes
Linux Partial Yes Yes

Tech Stack

Component Technology
Desktop Electron
UI React 19 + TypeScript
Styling Tailwind CSS v4
Meshtastic @meshtastic/core (JSR)
Maps Leaflet + OpenStreetMap
Charts Recharts
Database SQLite (better-sqlite3)
Build esbuild + Vite + electron-builder

Project Structure

src/
├── main/           # Electron main process (window, BLE handler, SQLite)
├── preload/        # Context bridge (IPC)
└── renderer/       # React app
    ├── components/ # All UI panels (Chat, Nodes, Map, Config, etc.)
    ├── hooks/      # useDevice — Meshtastic device state management
    └── lib/        # Transport setup, TypeScript types

Troubleshooting

npm install fails during electron-rebuild

You're missing build tools for compiling the native SQLite module:

  • Mac: xcode-select --install
  • Linux: sudo apt install build-essential python3
  • Windows: Install Visual Studio Build Tools with the "Desktop development with C++" workload

BLE connection fails with "Connection attempt failed"

  • Make sure your device has Bluetooth enabled and is in pairing mode
  • On macOS: Check System Settings > Privacy & Security > Bluetooth
  • Try disconnecting fully first, then reconnecting
  • If the device picker never appears, restart the app

Serial port not detected

  • Ensure your USB drivers are installed for your device (CP210x, CH340, etc.)
  • On Linux, add yourself to the dialout group: sudo usermod -a -G dialout $USER

App crashes on launch (macOS distributable)

  • This may be a native module signing issue — try rebuilding: npm run dist:mac
  • If building from source: make sure npm install completed without errors

App shows "disconnected" but device is still on

  • The Bluetooth connection can drop silently. Click Disconnect, then Connect again
  • For serial: the USB cable may have been bumped — reconnect

License

MIT — see LICENSE

Credits

See CREDITS.md. Special thanks to Joey (NV0N) for the original Meshtastic Mac Client that inspired this project, and the Denver Mesh community.

About

A Meshtastic desktop client, supports LoRa devices over BLE, Serial, and WiFi

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages