A terminal user interface (TUI) for monitoring and interacting with Meshtastic mesh networks.
- Real-time packet monitoring - Stream all mesh traffic with color-coded packet types
- Node discovery - Live table of all nodes with signal strength, battery, distance, and more
- Node details - Deep dive into individual nodes with telemetry, position, and message history
- IRC-style chat - Channel-based messaging with support for channels 0-7
- Direct messages - Private conversations with individual nodes (PKI encrypted)
- Reactions & replies - React to messages with emoji and reply with threading
- Channel management - Create, join, and manage channels; invite nodes to channels
- Favorites - Mark important nodes for quick access and alerts
- Device settings - Configure radio, channels, GPS, and device settings
- Advanced tools - Config backup/restore, factory reset, and privacy features
- Persistent storage - Message history and node data saved to SQLite database
pipx installs the application in an isolated environment:
pipx install git+https://github.com/Meshterm/meshterm.gitpip install git+https://github.com/Meshterm/meshterm.git# Clone the repository
git clone https://github.com/Meshterm/meshterm.git
cd meshterm
# Option 1: Install with pip (editable mode for development)
pip install -e .
# Option 2: Use the provided scripts
bin/install # Creates venv and installs dependencies
bin/run # Runs the application- Python 3.8+
- A Meshtastic device connected via USB
Dependencies (installed automatically):
meshtastic- Meshtastic Python SDKtextual- TUI frameworkreverse_geocoder- Offline reverse geocodingpgeocode- Postal code lookups
# Auto-detect device
meshterm
# Specify a port
meshterm /dev/ttyACM0
# If installed from source with bin/install
bin/run [port]Table of all discovered nodes with key metrics. Supports searching, sorting, and quick actions.
Features:
- Search (
/) - Filter nodes by name, ID, or location - Favorites (
f) - Mark nodes as favorites for highlighting and alerts - Invite (
i) - Send channel invitations to selected node - Sorting (
</>) - Cycle through sort columns; (r) reverse direction - PKI indicator - Shows which nodes have completed key exchange
Real-time stream of all packets in the mesh network.
IRC-style chat interface with channel tabs and direct messaging.
Features:
- Channels (
0-7) - Switch between broadcast channels - Direct Messages - Private encrypted conversations (shown as @Name tabs)
- Reactions (
Ctrl+R) - React to messages with emoji - Replies (
Ctrl+E) - Reply to specific messages with threading - Channel Manager (
Ctrl+J) - Manage channels and DMs, start new conversations - Navigation (
Left/Right) - Cycle through channels and open DMs - Close DM (
x) - Close the current DM tab
Comprehensive information about a selected node with DM capability. Select a node from the Nodes view and press Enter to see detailed info, telemetry, position, and message history.
Sub-tabs:
- Messages (
m) - DM conversation with selected node - Info (
i) - Node details and telemetry
Configure your Meshtastic device settings.
Sub-tabs:
- Radio (
r) - LoRa settings (region, modem preset, hop limit) - Channels (
h) - Channel configuration (name, PSK, role) - GPS (
g) - Position settings and manual location - Device (
d) - Device name and role preferences - Advanced (
a) - Backup, reset, and maintenance operations
| Key | Action |
|---|---|
N |
Switch to Nodes view |
L |
Switch to Log view |
C |
Switch to Chat view |
S |
Switch to Settings view |
Left/Right |
Previous/next tab |
V |
Toggle verbose mode (show raw packet data) |
W |
Toggle favorites highlighting |
Ctrl+H |
Show context-aware help |
Q |
Quit |
Esc |
Go back / Cancel |
| Key | Action |
|---|---|
/ |
Search/filter nodes |
Enter or D |
View node details |
f |
Toggle favorite status |
i |
Invite node to channel |
< / > |
Sort by previous/next column |
r |
Reverse sort direction |
Up/Down or j/k |
Navigate table |
Esc |
Clear search or go back |
| Key | Action |
|---|---|
0-7 |
Switch to channel |
Left/Right |
Previous/next channel or DM |
Ctrl+R |
React to a message |
Ctrl+E |
Reply to a message |
Ctrl+J |
Open channel/DM manager |
x |
Close current DM |
Enter |
Send message |
Esc |
Cancel reply / clear input |
| Key | Action |
|---|---|
Up/Down |
Navigate list |
Enter |
Select channel or DM |
x |
Close selected DM |
Tab |
Move to search field |
Esc |
Cancel |
| Key | Action |
|---|---|
m |
Messages sub-tab (DM with node) |
i |
Info sub-tab |
Left/Right |
Previous/next sub-tab |
| Key | Action |
|---|---|
r |
Radio settings |
h |
Channels settings |
g |
GPS/Position settings |
d |
Device settings |
a |
Advanced settings |
Left/Right |
Previous/next sub-tab |
| Type | Color | Description |
|---|---|---|
| TEXT | Green | Text messages |
| POSITION | Blue | GPS position updates |
| TELEMETRY | Yellow | Device metrics (battery, etc.) |
| NODEINFO | Cyan | Node identification |
| ROUTING | Magenta | Routing protocol messages |
| NEIGHBOR | Cyan | Neighbor information |
Meshterm stores data in ~/.meshterm/:
meshterm.db- SQLite database with messages, nodes, and reactionsmeshterm.log- Plain text log of all messagesconfig.json- Application settings (manual location, preferences)
meshterm/
+-- bin/
| +-- install # Setup script
| +-- run # Application launcher
+-- meshterm/
| +-- app.py # Main application
| +-- state.py # State management
| +-- connection.py # Meshtastic device connection
| +-- formatting.py # Display formatting utilities
| +-- storage.py # SQLite storage backend
| +-- views/ # Application views
| | +-- log.py # Packet log view
| | +-- nodes.py # Node table view
| | +-- detail.py # Node detail view
| | +-- chat.py # Chat view
| | +-- settings.py # Settings view
| +-- widgets/ # Reusable UI components
| +-- header_bar.py
| +-- status_bar.py
| +-- node_table.py
| +-- chat_log.py
| +-- chat_input.py
| +-- channel_manager.py
| +-- reaction_picker.py
| +-- help_modal.py
| +-- config_panels.py
+-- README.md
MIT License - See LICENSE file for details.
Contributions are welcome! Please feel free to submit a Pull Request.
- Meshtastic - The mesh networking project
- Textual - TUI framework
- Rich - Terminal formatting library