Skip to content

Latest commit

Β 

History

188 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

release go report card license build codecov release powered by just conventional commits macOS go reference github commit activity hovnokod

Glitched-out terminal Meshtastic messenger.

meshX β€” BitchX-style log, glitched status bar, per-sender nick colors, threaded replies

An irssi-style chat client for your LoRa radio with a vintage BBS aesthetic β€” maxheadroom palette, β–‘β–’β–“β–ˆ glitch borders, BitchX-style rotating splash, mutt-grade keyboard, and ham-radio slash-commands baked in.

✨ Features

  • πŸ“‘ Connects to your Meshtastic radio over USB serial, TCP, or Bluetooth LE
  • πŸ”΅ Bluetooth LE workflow β€” meshx ble scan / pair / list / connect / fav to save multiple radios by uuid or friendly name and switch between them without re-pairing
  • ⌨️ irssi-style modal UI β€” input always live, Esc drops to scrollback nav
  • πŸ“œ mutt-grade message log β€” dense one-row-per-message, zebra-striped, j/k walks
  • πŸ“» Ham-radio slash-commands β€” /cq, /73, /qth, /rs, /qrz, /sk, /mesh, + 9 more
  • πŸ‘₯ BitchX-style bracketed users grid β€” [ @KC7XYZ ] tiles with IRC sigils
  • 🌈 Maxheadroom 80s-neon palette β€” cyan / mesh-green / magenta / pink, matches grind + tlock
  • 🎨 BitchX-style rotating ASCII splash β€” different graffiti logo every launch
  • πŸ” Live / search across log / channels / users with n / N cycling
  • β‡₯ Tab completion β€” commands, #channels, nicks; irssi nick-addressing quirk included
  • πŸ“Œ Stable tmux-pane channel tabs + Alt+1..4 quick-hop
  • ❓ Scrollable ? help overlay β€” every keybinding and command, vim-scrollable
  • πŸ’Ύ bbolt-backed history β€” message log, node cache, and paired BLE devices survive restarts (~/.meshx/meshx.bolt)

πŸ”§ Install

curl -fsSL https://github.com/retr0h/meshx/raw/main/install.sh | sh

Installs to ~/.local/bin (or /usr/local/bin as root) β€” SHA256 checksums verified. Override with MESHX_INSTALL_DIR=/some/path or pin a version with MESHX_VERSION=1.1.1.

Build from source

git clone https://github.com/retr0h/meshx.git
cd meshx
go build -o meshx .
install -m 755 meshx ~/.local/bin/meshx

πŸš€ Quick start

meshx           # auto-connect to a plugged-in radio (USB β†’ saved BLE)
meshx --help    # usb, tcp, ble subcommand trees

Full command + keybinding reference in docs/commands.md.

πŸ”Œ How it works

meshX is a Meshtastic client. It connects to a radio you already own (T-Beam, Heltec, RAK, Station G2, etc.) over one of three transports and reads the mesh:

  1. USB serial (default) β€” plug the radio in; auto-detect port
  2. TCP β€” radios with WiFi expose port 4403, or connect to meshtasticd
  3. Bluetooth LE β€” meshx ble pair <uuid> saves a device, then meshx ble connect <name> opens the TUI over Bluetooth

All three speak Meshtastic's protobuf protocol and funnel through one Client interface, so the UI is oblivious to which transport's carrying the packets. meshX subscribes to FromRadio, emits ToRadio for sends, and surfaces everything in a scrollable terminal chat UI with vim/irssi ergonomics.

Every report (/rs, /ping, /tr, /whois) pulls from node state that maps 1:1 to real Meshtastic protobuf fields.

πŸ’‘ Inspiration

meshX sits at the intersection of three lineages:

  • irssi β€” the input-first modal UI, the /command dispatcher, and the stable bottom status line with channel tabs come straight from irssi. Alt+n channel hop too.
  • BitchX β€” the rotating graffiti ASCII splash (different logo every launch), the bracketed [ @nick ] users grid, and the unapologetic neon palette are pure BitchX. (RIP caf.)
  • mutt β€” the dense one-row-per-message log, j/k scrollback nav, r reply on selection, and the modal input ↔ nav distinction come from mutt.
  • vim β€” every window scrolls with j/k/h/l/gg/G/Ctrl+D/Ctrl+U, Ctrl+W for window nav, / + n/N for search.
  • tmux β€” Ctrl+N / Ctrl+P channel cycle and the giant flash-digit pane picker.
  • grind, tlock β€” sibling retr0h projects; meshX reuses their maxheadroom palette, β–‘β–’β–“β–ˆ block-border language, and block-art primitives.

πŸ—ΊοΈ Roadmap

  • πŸ”‘ PSK import β€” /channel add <meshtastic://url> paste a shared-channel link and join without manually typing the PSK
  • πŸ“± QR code share β€” /channel share <name> emits the meshtastic:// URL as ASCII QR for phone-side scanning
  • πŸ”’ Channel mint + delete β€” /channel new <name> generates a random AES256 PSK locally and pushes via AdminMessage_SetChannel; /channel del <name> disables a slot
  • 🎨 Low-color fallback palette β€” detect $COLORTERM / $TERM and swap hex values for 16-color ANSI when the terminal doesn't support 24-bit color

πŸ“š Docs

License

The MIT License.

About

πŸ“‘ Glitched-out terminal Meshtastic messenger β€” irssi-style chat for your LoRa radio.

Topics

Resources

Code of conduct

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages