GitHub - webforspeed/speedmux: a simple terminal multiplexer written in Go

2 min read Original article ↗

A simple terminal multiplexer written in Go and libghostty.

Screenshot

speedmux screenshot

Features

  • Multiple independent terminal sessions (one shell per pane)
  • Split active pane vertically or horizontally
  • Cycle focus between panes
  • Optional libghostty-vt rendering backend (enabled by default)

Install (GitHub Releases)

Install the latest release with:

curl -fsSL https://raw.githubusercontent.com/webforspeed/speedmux/main/install | bash

This 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 pane
  • Alt+n: focus next pane
  • Alt+p: focus previous pane
  • Shift+PgUp / Shift+PgDn: scroll active pane up/down
  • Shift+Home / Shift+End: jump scroll to top/bottom
  • Alt+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-vt by default and automatically fall back to the basic line renderer if a libghostty operation 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=1 to skip the update check.