A terminal multiplexer lets you run multiple terminal sessions inside a single window, split the screen into panes, and detach sessions that continue running when you disconnect. For developers who SSH into servers, run long-running processes, or work across multiple projects simultaneously, a multiplexer is essential infrastructure.
Three multiplexers dominate in 2026: tmux (the established standard), Zellij (the modern contender), and GNU Screen (the legacy workhorse). Each serves a different developer profile.
Quick Comparison
| Feature | tmux | Zellij | GNU Screen |
|---|---|---|---|
| First Release | 2007 | 2021 | 1987 |
| Language | C | Rust | C |
| Default Keybindings | Ctrl+B prefix |
Ctrl+G (contextual) |
Ctrl+A prefix |
| Pane Splitting | Yes | Yes | Limited |
| Session Persistence | Yes | Yes | Yes |
| Plugin System | No (scriptable via CLI) | Yes (WASM plugins) | No |
| Mouse Support | Yes (config needed) | Yes (default) | Limited |
| Floating Panes | No | Yes | No |
| Tab Support | Windows (similar) | Yes | Windows (similar) |
| Configuration | ~/.tmux.conf |
KDL files | ~/.screenrc |
| Learning Curve | Steep | Gentle | Moderate |
| Available on Servers | Usually pre-installed | Rarely installed | Usually pre-installed |
tmux: The Standard
tmux is the terminal multiplexer that most developers learn and that most servers have installed. Its keybinding system is muscle memory for millions of developers, its scripting capabilities are unmatched, and its ecosystem of plugins and configurations is enormous.
Core Concepts
tmux organizes work into three levels:
- Sessions – top-level containers, typically one per project
- Windows – tabs within a session, typically one per task (editing, running, testing)
- Panes – splits within a window, showing multiple terminal views side by side
Session: "project-x"
├── Window 0: "editor" (full screen vim)
├── Window 1: "servers" (split: web server | database)
└── Window 2: "git" (full screen, for commits/diffs)
Essential Commands
All tmux commands use a prefix key (default
Ctrl+B) followed by a command key:
| Action | Keys | Description |
|---|---|---|
| Split horizontal | Ctrl+B " |
Split current pane top/bottom |
| Split vertical | Ctrl+B % |
Split current pane left/right |
| Navigate panes | Ctrl+B arrow |
Move between panes |
| New window | Ctrl+B c |
Create new window (tab) |
| Switch window | Ctrl+B [0-9] |
Jump to window by number |
| Detach | Ctrl+B d |
Detach session (keeps running) |
| Reattach | tmux attach -t name |
Reconnect to detached session |
| Kill pane | Ctrl+B x |
Close current pane |
| Resize pane | Ctrl+B Ctrl+arrow |
Resize in arrow direction |
| Scroll mode | Ctrl+B [ |
Enter scroll/copy mode |
Why Developers Choose tmux
Scriptability. tmux’s command-line interface makes it fully scriptable. You can write shell scripts that create complex development environments in one command:
#!/bin/bash
# dev-setup.sh -- creates a full development environment
tmux new-session -d -s project -n editor
tmux send-keys -t project:editor 'vim .' Enter
tmux new-window -t project -n servers
tmux split-window -h -t project:servers
tmux send-keys -t project:servers.0 'npm run dev' Enter
tmux send-keys -t project:servers.1 'docker compose up' Enter
tmux new-window -t project -n tests
tmux send-keys -t project:tests 'npm run test:watch' Enter
tmux attach -t project:editorThis script creates a three-window development environment with servers running in split panes, all in under a second. This kind of automation is why tmux is the preferred choice for developers who work across multiple projects daily.
Ubiquity. tmux is available on virtually every Linux server and macOS system. When you SSH into a production server, tmux is likely already installed. This means your muscle memory works everywhere – local development, staging servers, production debugging.
Ecosystem. The tmux Plugin Manager (TPM) provides access to community plugins: - tmux-resurrect – saves and restores sessions across system restarts - tmux-continuum – automatic saving of tmux environment - tmux-sensible – reasonable default settings - tmux-yank – system clipboard integration
The tmux Learning Curve
tmux’s primary criticism is its learning curve. The prefix-key
system (Ctrl+B then another key) is unintuitive for
newcomers, and the default keybindings prioritize mnemonics
(" for horizontal split because it looks horizontal)
over ergonomics.
Most experienced tmux users customize heavily:
# ~/.tmux.conf -- common customizations
# Change prefix to Ctrl+A (more ergonomic)
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# Split panes with | and -
bind | split-window -h
bind - split-window -v
# Enable mouse support
set -g mouse on
# Start window numbering at 1
set -g base-index 1
# Reduce escape time (faster vim mode switching)
set -sg escape-time 0The investment in learning and customizing tmux pays off over years of use. The problem is the initial 2-4 weeks of friction while building muscle memory.
Zellij: The Modern Alternative
Zellij is a terminal multiplexer written in Rust that prioritizes discoverability, modern defaults, and a plugin system. It was designed specifically to address tmux’s learning curve while adding features that tmux lacks.
What Makes Zellij Different
Discoverable keybindings. Zellij displays available keybindings at the bottom of the screen, contextually updating based on your current mode. New users never need to memorize keys or consult a cheat sheet – the interface tells you what you can do at every moment.
Zellij bottom bar (in normal mode):
<Ctrl+G> LOCK | <Ctrl+P> PANE | <Ctrl+T> TAB | <Ctrl+N> RESIZE
<Ctrl+H> MOVE | <Ctrl+S> SCROLL | <Ctrl+O> SESSION | <Ctrl+Q> QUIT
Press Ctrl+P to enter Pane mode, and the bar
updates:
<←↑→↓> Move focus | <N> New | <D> Down | <R> Right
<X> Close | <F> Fullscreen | <W> Floating | <E> Embed
This contextual help eliminates the “what was the keybinding?” problem entirely.
Floating panes. Zellij supports floating panes that overlay the main layout – similar to popup windows within the terminal. This is useful for temporary tasks like running a quick command, checking logs, or opening a reference file without disrupting your pane layout.
WASM plugin system. Zellij plugins are WebAssembly modules that can add functionality without modifying the core binary. The plugin ecosystem is young but growing, with plugins for status bars, file managers, and custom layouts.
Layouts. Zellij uses KDL (KDL Document Language) files to define layouts declaratively:
layout {
pane size=1 borderless=true {
plugin location="tab-bar"
}
pane split_direction="vertical" {
pane command="vim" {
args "."
}
pane split_direction="horizontal" {
pane command="npm" {
args "run" "dev"
}
pane command="npm" {
args "run" "test:watch"
}
}
}
pane size=2 borderless=true {
plugin location="status-bar"
}
}
This layout file creates a development environment with vim on the left, and dev server + test runner stacked on the right, complete with tab bar and status bar.
Why Developers Choose Zellij
Zero configuration needed. Zellij’s defaults are sensible enough that most users never create a configuration file. Mouse support, pane navigation, and visual feedback work out of the box.
Lower learning curve. The contextual keybinding display means new users are productive within minutes rather than days. The modal system (press a mode key, see available actions, press an action key) is more intuitive than tmux’s prefix system.
Modern features. Floating panes, built-in tab management, and the plugin system provide functionality that requires third-party plugins or custom scripts in tmux.
Zellij Limitations
Not installed on servers. Unlike tmux, Zellij is not commonly found on remote servers. If you work heavily with SSH, you will need tmux or Screen on the server and Zellij locally – or install Zellij on your servers manually.
Younger ecosystem. The plugin ecosystem is smaller than tmux’s, and community configurations and guides are less abundant. Solutions to edge-case problems may require opening GitHub issues rather than searching Stack Overflow.
Higher resource usage. Zellij uses more memory than tmux (typically 20-40 MB vs. tmux’s 5-10 MB). On modern systems this is irrelevant, but on resource-constrained servers it matters.
Keybinding conflicts. Zellij’s
Ctrl+P, Ctrl+T, Ctrl+N, and
Ctrl+S bindings conflict with common application
shortcuts (print, new tab, new file, save). Zellij’s lock mode
(Ctrl+G) passes keys through to the running
application, but this requires an extra keystroke.
GNU Screen: The Legacy Option
GNU Screen is the original terminal multiplexer, first released in 1987. It remains available on virtually every Unix system and is the default choice in environments where stability and ubiquity matter more than features.
When Screen Makes Sense
Legacy systems. On older Linux distributions and minimal server images where tmux is not installed and you cannot install packages, Screen is often the only option.
Simple persistence. If you only need one feature – keeping a process running after disconnecting SSH – Screen handles this with minimal complexity:
# Start a named session
screen -S myprocess
# Run your long-running command
./run-migration.sh
# Detach: Ctrl+A then D
# Disconnect SSH
# Later, reconnect SSH and reattach
screen -r myprocessShared terminal sessions. Screen supports multi-user mode where multiple users can attach to the same session simultaneously. This is useful for pair programming or remote assistance on shared servers.
Why Most Developers Choose Something Else
Screen’s pane management is limited compared to tmux and Zellij. Splitting the terminal into panes is possible but awkward, and navigating between splits requires more keystrokes. Window (tab) management works but lacks the visual feedback of modern alternatives.
Screen’s development pace is slow – major features are infrequent, and the interface has not evolved significantly in decades. For developers who want a multiplexer they will invest time learning, tmux or Zellij offer better returns.
Decision Guide
Choose tmux if:
- You work frequently on remote servers via SSH
- You want maximum scriptability and automation
- You are willing to invest 2-4 weeks in learning and configuration
- You want the largest community for help and plugins
- You switch between many projects and want automated session setup
Choose Zellij if:
- You are new to terminal multiplexers
- You primarily work locally (not SSH)
- You want productive immediately, not after a learning period
- You prefer modern defaults over manual configuration
- You want floating panes and built-in layout management
Choose Screen if:
- You only need session persistence (detach/reattach)
- You work on systems where tmux is unavailable and you cannot install packages
- You need multi-user shared sessions
- You already know Screen and have no reason to switch
The Pragmatic Choice
For most developers in 2026: learn tmux if you work with servers regularly, use Zellij if you work locally and want the lowest friction experience. Keep Screen knowledge as a fallback for constrained environments.
If you have never used a multiplexer, start with Zellij. Its discoverable interface teaches you multiplexer concepts (sessions, panes, tabs) without memorizing keybindings. If you later need tmux for server work, the concepts transfer – only the keybindings change.
Getting Started: 5-Minute Quick Start
tmux Quick Start
# Install
brew install tmux # macOS
sudo apt install tmux # Ubuntu
# Start a named session
tmux new -s work
# Split vertically: Ctrl+B %
# Split horizontally: Ctrl+B "
# Navigate panes: Ctrl+B arrow keys
# New window: Ctrl+B c
# Switch windows: Ctrl+B 0-9
# Detach: Ctrl+B d
# Reattach: tmux attach -t workZellij Quick Start
# Install
brew install zellij # macOS
cargo install zellij # via Rust
# Start
zellij
# Everything else is displayed in the UI
# Press Ctrl+P for pane mode
# Press Ctrl+T for tab mode
# Press Ctrl+Q to quitFrequently Asked Questions
Can I use a multiplexer with a modern terminal like Warp or Ghostty?
Yes, but with caveats. Some modern terminals provide their own split-pane functionality, which can conflict with multiplexer pane management. If your terminal supports splits natively, you may not need a multiplexer for local work. The multiplexer’s value on local machines comes from session persistence and scripted layouts, not pane splitting.
Do I need a multiplexer if I use VS Code’s integrated terminal?
For local development, VS Code’s terminal tabs and splits cover most multiplexer use cases. A multiplexer adds value when you need session persistence (keep processes running after closing VS Code), work on remote servers, or want scripted multi-pane development environments.
Can I run tmux inside Screen (or vice versa)?
Technically yes, but this creates confusing keybinding conflicts and is not recommended. Choose one multiplexer and use it consistently. The exception is running tmux locally while using Screen on a remote server where tmux is unavailable.
How do I copy text from a multiplexer pane?
Each multiplexer has a scroll/copy mode. In tmux, press
Ctrl+B [ to enter copy mode, navigate with arrow keys,
press Space to start selection, and Enter
to copy. In Zellij, press Ctrl+S for scroll mode.
Alternatively, enable mouse support and use terminal-level selection
(usually Shift+click to bypass the multiplexer).
This article contains affiliate links where applicable. We may earn a commission if you purchase through our links, at no extra cost to you.