tmux-webui

module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 8, 2026 License: MIT

README

tmux-webui

繁體中文 | English

tmux, on the web — and on your phone.

A web UI for tmux. One static binary on the machine where tmux runs; your panes stream to any browser — a desktop grid or an installable mobile PWA — with ANSI rendering, TUI mouse passthrough, deep scrollback, and slash/at autocomplete.

It exists for one workflow in particular: AI CLI agents running on a machine at home. Claude Code, Codex, and friends live in tmux panes on a home server. Wherever you are, whenever an idea strikes — open the PWA, hand the agent one instruction, and put the phone back in your pocket. The agent keeps working; you check in whenever you like, and a notification (or a spoken TTS summary) tells you when it's waiting on you. Supervision becomes asynchronous: no staring at a terminal while the agent thinks.

The newest piece is deck mode: an idle phone or tablet becomes a Stream Deck-style dock for your agents — live status chips for every pane, permission pills, and big context-aware buttons, so answering an agent's prompt is one tap instead of a fight with the on-screen keyboard. Beyond that: link several devices into a shared party, federate multiple hosts under one UI, and configure everything — theme, keys, thresholds — from a single JSON file.

demo placeholder

Screenshots

Desktop panes Mobile panes
desktop pane grid mobile pane view
Slash palette Deck mode
slash-command autocomplete palette touch deck mode

Features

  • Terminal grid — multiple tmux panes streamed side by side, ANSI-rendered, with adaptive polling. Layout presets (2×2 / 4-col / 1+2 / 3-col / single) or auto-fit to the viewport.
  • TUI mouse passthrough — click, drag, and scroll inside full-screen terminal programs (lazygit, htop, yazi, less -r). Mouse events are re-encoded as SGR-1006 reports, so any mouse-aware TUI reads them natively — no per-app adaptation.
  • Mobile PWA — installable to the home screen; auto-fits the pane grid to a phone screen, touch-first controls, and quick-key bars (Esc / Tab / Ctrl-C / arrows / sticky modifiers / hard-to-type shell chars) so you never fight the on-screen keyboard.
  • Deep scrollback with scroll-lock — page back through history in chunks; going deep freezes live DOM updates so the view doesn't jump out from under you, then resumes auto-follow on return-to-bottom.
  • Slash / at autocomplete — type / to complete Claude Code skills, commands, agents, and built-in slash commands (user-level and plugin marketplace); type @ to complete files under the focused pane's cwd. Plus user-defined bare-word shortcuts.
  • Deck mode — a Stream Deck-style touch control surface: context-aware buttons, live status badges, session/window switching, permission-mode pills, and one-tap macros for driving an agentic CLI from a phone or tablet without a keyboard.
  • Party / link mode — join several devices into a shared party (4-char code or QR link); when one member switches session/window/pane, the others follow. Opt-in, off by default — byte-identical to solo use when unused.
  • Waiting-pane notify + TTS — an optional server-side watcher pushes a notification when an agent pane blocks on you (permission prompt, question), so a closed phone still gets alerted; in-browser TTS read-out of the same events is toggleable.
  • Multi-host federation — list other hosts in config and drive their tmux sessions from one UI under a host/ prefix, with fail-soft skipping of dead hosts.
  • Full UI configuration — theme (per-colour CSS overrides, font, radius), key bars, per-CLI slash palettes, scroll/history thresholds, autocomplete sources — all from one config.json. Every key is optional and defaults to historical behavior.
  • Daemon mode — install as a launchd (macOS) or systemd (Linux) user service; restarts on crash, survives reboots.
  • LAN modetmux-webui --lan binds all interfaces behind a token gate and prints a QR code to scan from your phone. See remote access.

Install

One line, any supported platform (macOS / Linux / WSL, arm64 / amd64):

curl -fsSL https://raw.githubusercontent.com/operonlab/tmux-webui/main/install.sh | sh

The installer detects your OS and architecture, offers to install tmux via your package manager if it's missing, then resolves the best install method automatically: Homebrew formula → GitHub release binary (sha256-verified) → build from source (offers a Go toolchain if needed). Native Windows gets WSL2 guidance. Useful flags:

sh install.sh --service          # also register a login service (launchd/systemd)
sh install.sh --profile          # append the bin dir to your shell profile's PATH
sh install.sh --yes              # non-interactive (CI / provisioning)
sh install.sh --method source    # force a specific method: brew|release|source
sh install.sh --bin-dir ~/bin    # custom install dir (default ~/.local/bin)

Manual alternatives: Homebrew · from source

Then run:

tmux-webui

Open http://localhost:9527 in your browser.

Use it from your phone

tmux-webui --lan

A QR code appears in the terminal. Scan it.

Requires

  • tmuxbrew install tmux (macOS) / sudo apt install tmux (Debian/Ubuntu)
  • macOS or Linux (arm64/amd64); Windows via WSL

Configure

Everything runs on sensible defaults with zero config. To customize — theme colours, key bars, per-CLI slash palettes, scroll/history thresholds, autocomplete sources, multi-host federation — drop a ~/.config/tmux-webui/config.json. Every key is optional; omit one and it keeps its default (existing configs need no changes). Full key reference: docs/config-reference.md.

Run as a service

tmux-webui daemon install      # writes launchd plist (mac) or systemd user unit (linux)
tmux-webui daemon status
tmux-webui daemon logs
tmux-webui daemon uninstall

Update

tmux-webui update --check
tmux-webui update

Uninstall

tmux-webui uninstall -y

Removes binary, config, daemon, and uploads.

More

License

MIT — see LICENSE

Directories

Path Synopsis
cmd
tmux-webui command
tmux-webui/cmd
Package cmd implements the cobra command tree for tmux-webui.
Package cmd implements the cobra command tree for tmux-webui.
internal
autocomplete
Package autocomplete provides a fuzzy-matching autocomplete engine for the tmux-webui terminal input bar.
Package autocomplete provides a fuzzy-matching autocomplete engine for the tmux-webui terminal input bar.
config
Package config loads tmux-webui configuration from disk.
Package config loads tmux-webui configuration from disk.
daemon
Package daemon manages OS-level service installation for tmux-webui.
Package daemon manages OS-level service installation for tmux-webui.
fedproxy
Package fedproxy federates multiple tmux-webui instances behind one UI.
Package fedproxy federates multiple tmux-webui instances behind one UI.
metrics
Package metrics provides system and LLM usage metrics for tmux-webui.
Package metrics provides system and LLM usage metrics for tmux-webui.
network
Package network provides LAN interface discovery and Tailscale detection.
Package network provides LAN interface discovery and Tailscale detection.
prefix
Package prefix caches the tmux prefix key and its binding table.
Package prefix caches the tmux prefix key and its binding table.
pwa
Package pwa serves the static frontend bundle (index.html, sw.js, manifest, icons, /static/*) from the embedded asset FS.
Package pwa serves the static frontend bundle (index.html, sw.js, manifest, icons, /static/*) from the embedded asset FS.
relay
Package relay implements optional pane-pool dispatch for the /api/relay endpoint.
Package relay implements optional pane-pool dispatch for the /api/relay endpoint.
rescue
Package rescue provides the out-of-band recovery path for a wedged tmux server.
Package rescue provides the out-of-band recovery path for a wedged tmux server.
server
Package server wires the HTTP routes for tmux-webui.
Package server wires the HTTP routes for tmux-webui.
tmuxctl
Package tmuxctl wraps tmux subprocess calls used by tmux-webui.
Package tmuxctl wraps tmux subprocess calls used by tmux-webui.
tts
Package tts implements the single-slot TTS audio store and its HTTP handlers.
Package tts implements the single-slot TTS audio store and its HTTP handlers.
update
Package update implements self-update via GitHub Releases using minio/selfupdate.
Package update implements self-update via GitHub Releases using minio/selfupdate.
upload
Package upload provides the multipart file upload handler for tmux-webui.
Package upload provides the multipart file upload handler for tmux-webui.
ws
Package ws implements the WebSocket layer for tmux-webui.
Package ws implements the WebSocket layer for tmux-webui.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL