Skip to content

acelot/termtastic

Repository files navigation

termtastic

termtastic is a feature-rich handmade Meshtastic® console client written in Rust.

M-Powered Build code size vibecode-free GPL-3.0

messenger messenger_emoji_selector
messenger_reactions_viewer messenger_multiline_message
channels nodes
nodes_help nodes_nodeinfo
settings settings_bitmask_input
connections connections_discovery
logs logs_expanded_view
⚠️ WARNING
Project is under active development, things could be changed completely without notice.

Tech highlights

  • Vibecode-free fully handwritten code
  • Dependency-free single-binary application
  • Fully asynchronous (Tokio channels-based)
  • Optimized for small screens (down to 80x24 characters)
  • Respects the user terminal colors (no fancy opinionated TrueColor schemes)
  • Keyboard-centric UI navigation
  • Minimum use of emoji/non-ascii characters in UI
  • Small memory footprint (~20KB)
  • Supports multiple connection protocols (TCP, BLE, Serial)
  • Could discover devices automatically: BLE paired devices, TCP devices via mDNS, Serial devices
  • Uses standard system directories for storing configuration, database and logs

Features

Note

Unchecked items are not implemented yet.

Chat tab

Channels

  • Scrollable channels list (Primary, Secondary)
  • Direct conversations
  • Display the last message for each channel
  • Purge channel chat feature

Messenger

  • Storing messages in local DB
  • Scrollable chat screen
  • Display the short and long names of node
  • Display the SNR/RSSI for direct nodes
  • Display the number of hops for retranslated messages
  • Display the time of messages
  • Display the reactions (emojis)
  • Display the routing info for the retranslated messages and reactions
  • Ability to see detailed info about reactions
  • Ability to see node info of the selected message author
  • Ability to send broadcast messages to the channels
  • Ability to send direct messages to the nodes
  • Ability to reply to the messages
  • Ability to send the reactions (emojis)
  • Limiting the message length to 200 chars (with counter)

Nodes tab

Nodes list

  • Storing nodes in local DB
  • Scrollable nodes list
  • Ability to start direct conversation with the selected node
  • Display the short and long names of node
  • Display the SNR/RSSI for direct nodes
  • Display the number of hops for the routed nodes
  • Display the ID of the nodes
  • Display the humanized last heard time of the nodes
  • Sort nodes by different fields: last heard, hop count, distance, etc.
  • Nodes fuzzy search
  • Nodes filtering by special tokens
  • Ability to see node info of the selected node

Single node expanded view

  • Display node detailed info
  • Copy public key to clipboard
  • Delete node feature
  • Traceroute feature
  • Ignore feature
  • Add to Favorite feature
  • Position info
  • Telemetry info
  • TBD

Settings tab

General

  • Loading device configuration (generic feature)
  • Saving device configuration (generic feature)
  • Import configuration from the link

App

  • UI

Radio

  • LoRa
  • Channels
  • Security

Device

  • User
  • Device
  • Position
  • Power
  • Display
  • Bluetooth
  • Network

Module

  • MQTT
  • Serial
  • External Notification
  • Store & Forward
  • Range Test
  • Telemetry
  • Canned Message
  • Neighbor Info
  • Ambient Lighting
  • Detection Sensor

Connection tab

  • Scrollable devices list (TCP, BLE, Serial)
  • Connection via TCP
  • Connection via BLE
  • Connection via Serial
  • Device configuration loading during the connection process and storing it into state
  • Storing TCP connections into a config file
  • Discovering of BLE and Serial devices feature
  • Discovering TCP devices through mDNS
  • Reconnection feature with exponential backoff timeouts
  • Ability to set a name for the device

Logs tab

  • Writing logs into files using a daily rolling strategy
  • Mirroring logs into the log list with scroll
  • Ability to expand the single log record (useful for long logs)
  • Ability to copy log record into clipboard

General features

  • RX indicator
  • Online/Total nodes counter

Stack

Feature Library
TUI: Framework Ratatui
TUI: Backend crossterm
TUI: Inputs ratatui-textarea
TUI: Lists tui-widget-list
Interaction with Meshtastic meshtastic
Clipboard functionality arboard
Bluetooth devices discovery bluest
TCP devices discovery mdns-sd
Logging tracing
Async/Channels tokio
Configuration confy, etcetera
Errors anyhow, thiserror
Datetime chrono
Emoji selector emoji
Local DB native_db

Compatibility

✅ – tested, 🔬 – untested, ❌ – not working

Feature 🐧 Linux 🍏 macOS 🪟 Windows
BLE devices discovery 🔬
Serial devices discovery
TCP devices discovery (mDNS)
Copy to clipboard

Download

Source Link
Manual download Releases
Debian PPA 🏗️ TBA
Arch Linux AUR 🏗️ TBA
macOS Brew 🏗️ TBA
Windows Chocolatey 🏗️ TBA

FAQ

How to launch a manually downloaded app on macOS?

To run an unsigned application on macOS, you need to dequarantine it using the command below:

xattr -d com.apple.quarantine ./path/to/termtastic

Application doesn't discover BLE devices on macOS

To use Bluetooth on macOS Big Sur (11) or later, you need to enable the Bluetooth permission for your terminal. You can do it by going to System PreferencesSecurity & PrivacyPrivacyBluetooth, clicking the '+' button, and selecting Terminal (or iTerm or whichever terminal application you use).

Why emojis are glitching/tearing on my terminal?

If you are using foot terminal try to add these lines into your foot.ini config:

[tweak]
grapheme-width-method=wcswidth

The same named option exists in other terminals too. Check your terminal docs.

Why do some emoji appear as squares in Windows Terminal??

Unfortunately, Windows Terminal cannot display some compound emoji such as 1️⃣, 2️⃣, 3️⃣, etc. There is an issue in Github: microsoft/terminal#9708

About

Feature-rich handmade Meshtastic® console client written in Rust

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages