A simple terminal multiplexer written in Go and libghostty.
Screenshot
Features
- Multiple independent terminal sessions (one shell per pane)
- Split active pane vertically or horizontally
- Cycle focus between panes
- Optional
libghostty-vtrendering backend (enabled by default)
Install (GitHub Releases)
Install the latest release with:
curl -fsSL https://raw.githubusercontent.com/webforspeed/speedmux/main/install | bashThis installs speedmux to ~/.local/bin/speedmux.
Local Install / Deploy
Build and install from source:
By default this installs speedmux to ~/.local/bin/speedmux. If ~/.local/bin is not on your PATH, add this to your shell config (~/.zshrc, ~/.bashrc, etc.):
export PATH="$HOME/.local/bin:$PATH"
Publishing Releases
Tag pushes matching v* trigger .github/workflows/release.yml.
Example:
Maintenance and release runbooks are documented in MAINTENANCE.md.
Run
Keybindings
Alt+v: split active pane vertically (left/right)Alt+h: split active pane horizontally (top/bottom)Alt+w: close active paneAlt+n: focus next paneAlt+p: focus previous paneShift+PgUp/Shift+PgDn: scroll active pane up/downShift+Home/Shift+End: jump scroll to top/bottomAlt+q: quit- Mouse wheel over a pane: scroll that pane
Notes
- The app starts with a single pane.
- Each new pane launches your
$SHELL(falls back to/bin/sh). MULTIPLEXER_GHOSTTY_VT=0 go run .disables the ghostty-vt backend and uses the basic line renderer.- When enabled, panes prefer
libghostty-vtby default and automatically fall back to the basic line renderer if alibghosttyoperation fails. STATS=ON go run .enables a debug stats row under the help bar (FPS, panes/splits, events, output line counts, and render cell totals).- Set
SPEEDMUX_DISABLE_UPDATE_CHECK=1to skip the update check.
