Skip to content
Projects

whyyor/tuimessenger has 42 GitHub stars and 3 forks. GitHot measured +12 stars in 24 hours. Last checked 2026-11-15 06:30 UTC. Last push 2026-11-13.

How these counts are measured

42 stars3 Forks +12 in 24h

Measured star growth

in 24h
+12
in 7 days
Collecting history
in 15 days
Collecting history
in 1 month
Collecting history

Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.

About

WhatsApp, Telegram, Slack and Instagram in one terminal app — local bridges,

Developer Tools

README.md

Original

tuimessenger icon

tuimessenger

All your networks in one terminal app: WhatsApp, Telegram, Slack and Instagram.

https://github.com/user-attachments/assets/ae873a26-9749-4212-a7ee-1de875292123

  • Every network in one app, with your chats, sessions and media kept on your machine.
  • Keyboard first: Ctrl+k jumps to any chat, Ctrl+p has every command; reply, react and open photos without the mouse.
  • AI help when you want it: let your coding agent read your chats and draft replies (tuimessenger integration install claude, codex or opencode).
  • Light: under 100 MB of RAM with all your networks connected, where desktop messengers often take 1.5–2 GB.

⚠️ Bridges carry a risk of the network flagging or banning your account. Proceed with caution.

Install

Script (macOS and Linux, no sudo; installs to ~/.local/bin, run it again to update):

curl -fsSL https://raw.githubusercontent.com/whyyor/tuimessenger/main/install.sh | sh

Homebrew (macOS and Linux):

brew install whyyor/tap/tuimessenger

Download: grab the archive for your system from Releases, unpack it and put tuimessenger somewhere on your PATH (e.g. ~/.local/bin). The binaries aren't signed by Apple, so on macOS a browser download is blocked the first time; clear that once with xattr -d com.apple.quarantine ./tuimessenger (Homebrew installs don't need this).

Nix:

nix run github:whyyor/tuimessenger -- tui          # try it
nix profile install github:whyyor/tuimessenger    # install it

From source: see Building.

Linux binaries need glibc 2.35 or newer (Ubuntu 22.04, Debian 12, Raspberry Pi OS and later). A Nerd Font in your terminal makes the icons show up; yazi is used as the file picker when it's installed.

Quick start

  1. Start it: tuimessenger tui, choose Complete setup (backend and client on this machine) and pick a password. The password protects the local server; other clients on this machine log in with it.
  2. Connect your networks: Ctrl+p → Networks → pick one and follow the steps: a QR code or pairing code for WhatsApp, phone number and code for Telegram, a browser login for Slack and Instagram. The browser login opens Chrome, Chromium, Brave, Edge or Helium (TUIMESSENGER_BROWSER picks another) and closes it when you're done; without one, you paste the cookies instead. For Telegram, first create your keys: log in at my.telegram.org → API development tools → create an app (any name) → paste api_id and api_hash into the Networks panel.
  3. Chat: Ctrl+k jumps to any chat, Enter sends, Ctrl+p shows every command and key.

Keep the backend running

By default the backend (the bridges to your networks) runs inside the app and stops when you quit it. If you want your networks connected all the time, run it as a background service:

tuimessenger service install    # a launchd agent on macOS, a systemd user unit on Linux; starts with your login
tuimessenger service status     # is it running, and does it answer
tuimessenger service uninstall  # back to running inside the app

Messages keep arriving while the app is closed, and if a bridge ever crashes only the service restarts: the app stays open and reconnects. After upgrading tuimessenger, run tuimessenger service install again to restart it.

Configure

Theme, colours, preferences and keys all live in one file, ~/.config/tuimessenger/tuimessenger.yaml. tuimessenger writes a commented template there the first time it starts, and only ever reads it, so it's at home in your dotfiles. All of opencode's themes are built in (Ctrl+p → Theme previews them live), and your own opencode-format themes work too. tuimessenger config checks the file for mistakes, and editors with the YAML language server complete and check it as you type.

Every setting: docs/config.md.

Keys

Key What it does
F1 Every key and command, searchable (also Ctrl+p → Keys and commands; ? in Ctrl+p lists only keys)
Ctrl+p Command palette: every command, chat and key (> commands, @ chats, ? keys)
Ctrl+k Jump to a chat (then Ctrl+p to peek without sending "seen")
↑ ↓, 1–8 Browse chats / open an unread chat (home screen)
Ctrl+; or Alt+v Select messages (visual mode): j/k move, 1–6 quick react, + reactions, Space opens media, i message info
Ctrl+e Emoji picker
Alt+u Mark a chat unread
Shift+Enter New line
Ctrl+c Clear the input (Ctrl+z brings it back)

Every key can be changed in tuimessenger.yaml.

Where things are

macOS Linux
Data (chats, sessions, media, config.yaml) ~/Library/Application Support/tuimessenger ~/.local/share/tuimessenger
Logs ~/Library/Logs/tuimessenger ~/.local/state/tuimessenger
  • Your settings: ~/.config/tuimessenger/tuimessenger.yaml and your themes in ~/.config/tuimessenger/themes/ (see Configure). What you change in the app (Ctrl+p) is saved in tui/config/terminal.yaml in the data folder; tuimessenger.yaml wins over it.
  • tui/client.db is the client's copy of your chats; tui/config/drafts.json keeps what you left typed in each chat (✎ in the chat list), so it's still there when you come back, even after a restart.
  • Logs: tuimessenger.log (backend), terminal.log and client.log (client), and crash.log, which keeps the stack trace if the app ever crashes. Please attach it to bug reports.
  • macOS notifications come from small apps tuimessenger sets up in ~/.local/opt/tuimessenger/notifiers: one per network (WhatsApp, Telegram, Slack, Instagram), so each shows its own icon and can be muted on its own in System Settings → Notifications, and tuimessenger.app for the rest. The first notification from each asks for permission; closing that prompt with × counts as "Don't Allow". To turn them back on: System Settings → Notifications → the network's entry (e.g. WhatsApp) → Allow notifications.

Building

Go 1.26+ and a C compiler (cgo, for SQLite). Always build with the goolm and sqlite_fts5 tags (the Makefile does this):

make build   # or: go build -tags goolm,sqlite_fts5 ./cmd/tuimessenger
make test
make vet

Without goolm, the build looks for the libolm C library (olm/olm.h not found).

Releases: a vX.Y.Z tag on main builds the binaries for macOS and Linux, publishes the GitHub release and updates the Homebrew formula (.github/workflows/release.yml).

What's next

  • Signal.
  • Running the backend on another machine, like a Raspberry Pi, with the terminal app connecting to it.
  • More Linux testing: it builds and runs on x86_64 and arm64, but most use so far is on macOS. Reports welcome.

Credits

tuimessenger is built on the work of others:

  • The terminal client (internal/tui, internal/rpc, internal/hicli, internal/rainbow) comes from gomuks by Tulir Asokan and contributors, via the fork whyyor/gomuks, and was imported with its git history.
  • The network bridges are the mautrix bridges (WhatsApp, Telegram, Meta, Slack) and the mautrix-go bridge library.
  • Notifications on macOS are shown by terminal-notifier by Eloy Durán and Julien Blanchard (MIT), bundled with tuimessenger's name and icon; see THIRD_PARTY_NOTICES.md.

License

tuimessenger is licensed under the GNU Affero General Public License, version 3 or (at your option) any later version (see LICENSE). Imported files keep their original license headers: parts of the client are under the Mozilla Public License 2.0 (internal/hicli/LICENSE).