or go to full-text search page →

Search

Search IconIcon to open search

Tmux

Last updatedUpdated: by Simon Späti · CreatedCreated: · 3 min read recently updated Recent changes 4 weeks ago +83 / −86 words 5 weeks ago +104 / −3 words 6 weeks ago +98 / −0 words 5 months ago +75 / −15 words 7 months ago +0 / −3 words 8 months ago +116 / −0 words last year published · 152 words

tmux is an open-source Terminal Multiplexer for Unix-like operating systems. It allows multiple terminal sessions to be accessed simultaneously in a single window. It is useful for running more than one command-line program at the same time.

Great way of naming your sessions, and tabs:

I also use session to jump to any folder and open a new folder in a new tmux session.

Shortcuts

  • ta Tmux attach
  • tn tmux new session from the current session I’m in

Find more information below, or in my dotfiles.ssp.sh:

1
2
3
4
5
6
7
8
alias ide=~/.tmux/ide
alias tmux-session=~/.tmux/tmux-session
alias killtmuxsessions="tmux ls -F'#{session_name}'|egrep '^[0-9]+$'|xargs -I% tmux kill-session -t \"=%\""
alias ta="tmux attach"
# opening a new tmux session from current directory and name it like last part of pwd path
alias tn='tmux new -s `eval echo $(pwd) | sed "s/.*\///"`'
# when closing ranger it will be at the path you were
alias ranger='ranger --choosedir=$HOME/.rangerdir; LASTDIR=`cat $HOME/.rangerdir`; cd "$LASTDIR"'

# My Tmux Workflow

Tmux is basically my terminal workflow king; it lets me run multiple terminals in a single window. I never, or very rarely, have more than one terminal app open.

If I have a session with multiple tabs, then you can have splits within it. I do as long with new splits until I run out of space. Then I either close splits or open a new tab.

Basically looks like this atm:

With these sessions:

It can get messy, yes, but it works like a charm if you have ingrained it into your mental model.

# Does it Matter Which Terminal I Use with Tmux?

Using Tmux will add some overhead, but you won’t completely lose Ghostty’s performance benefits because:

  1. Ghosty’s core optimizations will still apply:
    • The SIMD escape sequence detection
    • Fast Unicode decoding
    • Pre-computed code point width tables
    • Efficient memory layout
    • Fast rendering pipeline using Metal
  2. However, Tmux does introduce an additional layer that:
    • Needs to process escape sequences again
    • Manages its own screen buffer that allows you to serach and navigate your terminal with Vim Motions
      • My favorite use is searching and navigating my terminal’s text with vim motions, something most terminals just starting to implement with search, but navigate you usually can’t.
    • Has its own rendering cycle

# Integrations

# See Sesh: Fuzzy Finding Sessions

by Josh Medeski, a Tmux session manager.

Blog article or GitHub.

# Claude and AI Agents

For seeing running claude or codex sessions, I use the tmux plugin from Takuya Matsuyama (devaslife) I made a Claude Code session manager for tmux that shows a floating picker overall.

My shortcut is tmux leader + C and looks like this with a nice preview of each agent:

# Plugins

Use Tmux Plugin Manager for installing plugins

Add plugins to tmux.conf like this:

1
set -g @plugin 'accessd/tmux-agent-indicator'

And press Tmux keybind + I or tmux source ~/.tmux.conf (or `tmux source ~/.config/tmux/tmux.conf)

# Terminal Workflow with macOS/Linux

See My Terminal Workflow with MacOS and Linux.

# Alternatives Multiplexer Tools

Terminal Multiplexer

# Classics (server-side, SSH-safe)

  • GNU Screen: the actual OG, 1987. Preinstalled on nearly every Unix box, so it’s the fallback on locked-down legacy servers.
  • tmux: OG multiplexer (as far as modern usage goes). Huge plugin ecosystem via TPM, scriptable, works everywhere.
  • byobu: not a multiplexer itself — a config/status-bar wrapper over screen or tmux. Started life as screen-profiles in Ubuntu.
  • dtach: only the detach/reattach part, nothing else. ~1000 LOC.
  • dvtm + abduco: the suckless split — dvtm does dwm-style tiling in the console, abduco does session management. Together a simpler, cleaner alternative to tmux/screen.
  • tmate: tmux fork for instant terminal sharing over a relay. Pair-programming / remote support.

# Modern rewrites

  • Zellij: A terminal workspace with batteries included. Rust, discoverable keybindings shown in a status bar, WASM plugin system, works out of the box without a config file. The main tmux challenger.
  • (not out yet) Superlogical: Building the multiplexer for all work, company behind Mitchell Hashimoto

# Terminal emulators with built-in multiplexing

  • kitty Sessions, not as powerful, but might be enough. Shipped in kitty v0.1.0 (Feb 2017), a startup-layout file, not a persistence layer. Also has remote control for scripting panes.
  • WezTerm: GPU-accelerated emulator with a real multiplexer built in, including SSH domains. Needs a GUI though, so it doesn’t replace tmux on a headless box.
  • Ghostty and Mitchell Hashimoto want to build their own too.
  • Terminator: GTK emulator with tiling. Local-only, no session persistence — technically a tiling emulator, not a multiplexer.

# Agent-era

With Agents a new category emerged with more focus on shifts from just “split screens” seeing “What are my agents doing”?.

  • Herdr: The newest, more focused on Agents. The runtime coding agents run on. Rust, single binary, tmux-grade persistence + per-agent state detection (working / blocked / done / idle) + a scriptable socket API. AGPL-3.0 with a commercial option.
  • cmux: native macOS app built on libghostty — vertical tabs, notifications, restores agent sessions on relaunch, full CLI + Unix socket API including a programmable browser pane. macOS-only, no server-side SSH persistence.

Origin:
References: Terminal, TUIs