Monitor and interact with tmux/Byobu sessions from your phone
Project description
Trustmux
A mobile companion for tmux / Byobu sessions. Run a lightweight daemon on your workstation; monitor and interact with your terminal sessions from your phone over your Tailscale network. No relay server — terminal data stays between your devices.
Works with plain tmux and with byobu. Byobu users get the live status bar chips; plain tmux users get everything else.
Two tiers:
- Free — PWA. Install one icon per machine directly from the browser.
- Paid — Native Flutter app with full ANSI colors, multi-machine management, and biometric auth.
Requirements
- tmux (byobu optional but recommended)
- Python 3.10+
- Tailscale installed, running, and connected
Install
Homebrew (macOS / Linux)
brew tap dustinkirkland/trustmux
brew install trustmux
trustmux-enable # configure tailscale serve + start daemon
trustmux-pair # generate pairing code; enter on phone
pip (PyPI)
pip install trustmux
trustmux-enable
trustmux-pair
Debian / Ubuntu (.deb)
sudo dpkg -i trustmux_7.0_all.deb
trustmux-enable
trustmux-pair
Add the PPA for automatic updates:
sudo add-apt-repository ppa:dustinkirkland/trustmux
sudo apt install trustmux
Daily use
trustmux-ctl start # start daemon
trustmux-ctl stop # stop daemon
trustmux-ctl restart # restart daemon
trustmux-ctl status # show URL and running status
trustmux-ctl log # tail the daemon log
trustmux-pair # generate a pairing code for a new device
trustmux-unpair # list paired devices and remove them
Setup from source
cd mobile/
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
./trustmux-enable
./trustmux-pair
Configuration
| Path | Purpose |
|---|---|
~/.config/trustmux/tokens.json |
Paired device session tokens (mode 0600) |
~/.config/trustmux/trustmux.sock |
Admin Unix socket (mode 0600) |
~/.config/trustmux/trustmux.log |
Daemon log (mode 0600) |
~/.config/trustmux/machines.json |
Optional: sibling machines for the machine selector |
Multiple machines
[
{ "name": "work", "url": "https://work-machine.tail1234.ts.net" },
{ "name": "personal", "url": "https://personal.tail1234.ts.net" }
]
Security
- Daemon binds to
127.0.0.1:7432only — not reachable from the network - All traffic encrypted by Tailscale WireGuard; HTTPS via
tailscale serve - No relay server — terminal data never leaves your Tailscale mesh
- Pairing codes: 6-digit, 5-minute TTL, single-use, max 10 attempts
- Session tokens: 256-bit random, stored at mode 0600
Tests
cd mobile/
python3 -m unittest tests.test_daemon -v
Troubleshooting
502 Bad Gateway — tailscale serve is running but daemon isn't: trustmux-ctl start
"Serve not enabled" — visit the URL printed by tailscale serve --bg 7432
Phone can't reach URL — ensure Tailscale is active on the phone
Need to re-pair — run trustmux-pair and enter the new code on the device
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file trustmux-7.1rc1.tar.gz.
File metadata
- Download URL: trustmux-7.1rc1.tar.gz
- Upload date:
- Size: 58.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8082d6738035579e76adea1ce75ba25316c97d47009100b5d49ce008547ea982
|
|
| MD5 |
d58285b9788dced2f5d4ac5ddbf39e40
|
|
| BLAKE2b-256 |
59ab89683701616374c988d9348a386454d0e7cb076f73085196de8a7d9c40b1
|
Provenance
The following attestation bundles were made for trustmux-7.1rc1.tar.gz:
Publisher:
pypi-publish.yml on dustinkirkland/byobu
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trustmux-7.1rc1.tar.gz -
Subject digest:
8082d6738035579e76adea1ce75ba25316c97d47009100b5d49ce008547ea982 - Sigstore transparency entry: 1663437782
- Sigstore integration time:
-
Permalink:
dustinkirkland/byobu@945a459ae550a4656d9dcbdf387677e1e8eb6898 -
Branch / Tag:
refs/tags/trustmux-v7.1rc1 - Owner: https://github.com/dustinkirkland
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@945a459ae550a4656d9dcbdf387677e1e8eb6898 -
Trigger Event:
push
-
Statement type:
File details
Details for the file trustmux-7.1rc1-py3-none-any.whl.
File metadata
- Download URL: trustmux-7.1rc1-py3-none-any.whl
- Upload date:
- Size: 48.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16f5bd0e2f90ec46cec09bbd68c2388088ed4ad2003cf24c13d489c115016c46
|
|
| MD5 |
e1ab4d3da59f13722c5a490a7187cce5
|
|
| BLAKE2b-256 |
3ee6841cc09bf2835b21c68b00c9d957258a2335cd7fd70a6c225ad04b1b2a9c
|
Provenance
The following attestation bundles were made for trustmux-7.1rc1-py3-none-any.whl:
Publisher:
pypi-publish.yml on dustinkirkland/byobu
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trustmux-7.1rc1-py3-none-any.whl -
Subject digest:
16f5bd0e2f90ec46cec09bbd68c2388088ed4ad2003cf24c13d489c115016c46 - Sigstore transparency entry: 1663438035
- Sigstore integration time:
-
Permalink:
dustinkirkland/byobu@945a459ae550a4656d9dcbdf387677e1e8eb6898 -
Branch / Tag:
refs/tags/trustmux-v7.1rc1 - Owner: https://github.com/dustinkirkland
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@945a459ae550a4656d9dcbdf387677e1e8eb6898 -
Trigger Event:
push
-
Statement type: