andros/meshtastic.el: Chat client for Meshtastic LoRa mesh networks in Emacs - meshtastic.el - Andros's repositories
This website requires JavaScript.
andros/meshtastic.el
Watch
Star
Fork
You've already forked meshtastic.el
Code
Issues
Pull Requests
Actions
Packages
Projects
Releases
Wiki
Activity
10 Commits
1 Branch
0 Tags
main
Add File
New File
Upload File
Apply Patch
Code
Clone
HTTPS
Tea CLI
Open with VS Code
Open with VSCodium
Open with Intellij IDEA
Download ZIP<br>Download TAR.GZ<br>Download BUNDLE
andros
f295b959b1
Add test instructions to README and ignore melpazoid artifacts
2026-05-20 17:19:54 +02:00
tests
Fix two bugs found in API doc review
2026-05-20 16:52:21 +02:00
.gitignore
Add test instructions to README and ignore melpazoid artifacts
2026-05-20 17:19:54 +02:00
.pre-commit-config.yaml
Fix channel send crash, add tests, pre-commit and uv setup
2026-05-20 16:48:48 +02:00
LICENSE
Initial release of meshtastic.el
2026-05-14 15:40:19 +02:00
meshtastic-bridge.py
Fix two bugs found in API doc review
2026-05-20 16:52:21 +02:00
meshtastic.el
Show Connecting... status and auto-refresh statistics on connect
2026-05-20 17:11:50 +02:00
pyproject.toml
Fix channel send crash, add tests, pre-commit and uv setup
2026-05-20 16:48:48 +02:00
README.md
Add test instructions to README and ignore melpazoid artifacts
2026-05-20 17:19:54 +02:00
uv.lock
Fix channel send crash, add tests, pre-commit and uv setup
2026-05-20 16:48:48 +02:00
README.md
meshtastic.el
Chat client for Meshtastic LoRa mesh networks in Emacs, inspired by ERC and rcirc.
Requires Emacs 28.1 or later and the meshtastic Python package.
Connects directly to a Meshtastic device over USB serial. No server or intermediate proxy required.
How it works
LoRa Radio Python bridge Emacs<br>+-----------+ +-------------------+ +---------------+<br>| Meshtastic|| meshtastic-bridge || meshtastic.el |<br>| Device | USB | .py (subprocess) | JSON | (this package)|<br>+-----------+ +-------------------+ +---------------+<br>Physical Reads/writes serial Chat buffers<br>device Emits JSON events Send / receive
A Meshtastic device sends and receives messages over LoRa radio.
meshtastic-bridge.py connects to the device via serial, forwards received messages as JSON lines to stdout, and accepts JSON commands on stdin.
meshtastic.el spawns the bridge as a subprocess, parses its output, and provides chat buffers.
Buffers
Welcome screen (M-x meshtastic)
Meshtastic
Connection<br>Port: /dev/ttyUSB0<br>Status: Connected<br>Node: Hilltop Relay (!a1b2c3d4)
Statistics<br>Nodes: 12<br>Channels: 2
[c] Channels [n] Nodes<br>[g] Refresh [q] Quit
Channel list (M-x meshtastic-channels)
ID Name Role<br>0 LongFast Primary<br>1 HikingGroup Secondary
Node list (M-x meshtastic-nodes)
Hops Name Node ID Last heard<br>0 🟢 Hilltop Relay !a1b2c3d4 now<br>1 🟢 Solar Node 7 !d4e5f6a7 12m<br>2 🟢 BaseStation K9 !b8c9d0e1 5m<br>3 ⚫ Mountain Peak !f2a3b4c5 1h
Chat buffer (channel or DM)
[08:15] Good morning mesh!<br>[08:20] Morning! Signal is great today<br>[08:21] Copy that, 3 hops from here<br>[08:45] Anyone near the trailhead?<br>[09:02] I can see 12 nodes from up here<br>[09:05] Confirmed ✓<br>[09:30] Just set up a new repeater<br>#LongFast> _
Features
Channel list : browse available Meshtastic channels.
Node list : browse all mesh nodes sorted by hop count, with online indicator and last-heard time.
Chat buffers : read and send messages with an ERC-like prompt interface.
Direct messages : open a DM chat with any node by pressing RET in the node list.
Message buffer : messages received since the bridge started are kept in memory and shown when a chat buffer opens.
Delivery indicator : sent messages show · (sent to bridge), ✓ (bridge confirmed send) or ✗ (failed).
Desktop notifications : get notified when new messages arrive in background buffers.
Input history : navigate previous inputs with M-p / M-n.
Traceroute : press t on a node to send a traceroute via the CLI.
Keymap
Channel and node list buffers
Key<br>Description
RET<br>Open channel chat or DM with node
0-7<br>Open channel by number (channels)
Send traceroute to node (nodes)
Refresh list from device
Quit buffer
Chat buffers
Key<br>Description
RET<br>Send message
M-p<br>Previous input from history
M-n<br>Next input from history
C-c C-l<br>Reload buffered messages
Requirements
Emacs 28.1+
Python 3 with the meshtastic package:
pip install meshtastic
A Meshtastic device connected via USB serial.
Installation
MELPA
M-x package-install RET meshtastic RET
use-package with :vc (Emacs 29+)
(use-package meshtastic<br>:vc (:url "https://git.andros.dev/andros/meshtastic.el"<br>:rev :newest)<br>:config<br>(setq meshtastic-serial-port "/dev/ttyUSB0"))
use-package with :load-path
(use-package meshtastic<br>:load-path "/path/to/meshtastic.el"<br>:config<br>(setq meshtastic-serial-port "/dev/ttyUSB0"))
Manual
Clone the repository and place the files on your load-path:
git clone https://git.andros.dev/andros/meshtastic.el.git
Add to your init...