I live in the terminal. Neovim on the left, a dev server somewhere, tests running, logs tailing - and for years Tmux was the glue holding all of it together. Then I kept hearing about Zellij, the new multiplexer written in Rust that promises to be friendlier out of the box. So I ran both as my daily driver for a few months. Here's everything that actually mattered.
What is a terminal multiplexer?
When you open a terminal - iTerm2, Alacritty, Kitty, whatever - the shell starts a single pseudo-terminal session. Every extra window or tab spins up its own independent session with no relationship to the others. Close the window and that work is gone.
A multiplexer flips that model. It runs one long-lived session and lets you multiplex many virtual terminals - panes, tabs, windows - inside it. Detach, close your terminal, reboot your SSH connection, and everything is still running when you reattach. Both Tmux and Zellij give you this. The difference is how they feel while you use it.
If you've never used a multiplexer: the killer feature is persistence. Your entire workspace survives a disconnect. For remote work over SSH, this alone is worth the learning curve.
Installation
Both are a one-liner on macOS with Homebrew. Tmux has been packaged everywhere for over a decade; Zellij is newer but already in most repositories.
# tmux
brew install tmux
# zellij
brew install zellij
# arch, btw
yay -S zellij
Zellij has a nice touch: you can try it without installing anything.
bash <(curl -L zellij.dev/launch)
The first launch tells the whole story. Tmux opens to a bare status bar and total silence - you're expected to know the keys. Zellij opens with a row of keybinding hints along the bottom, so you can be productive in about thirty seconds without reading a manual.
Configuration
Tmux is configured in ~/.tmux.conf with its own terse
DSL. It's powerful but cryptic, and you'll copy-paste a lot from other
people's dotfiles before it clicks. A typical starting point:
# ~/.tmux.conf
set -g prefix C-a
unbind C-b
bind C-a send-prefix
set -g mouse on
set -g base-index 1
setw -g pane-base-index 1
bind | split-window -h
bind - split-window -v
Zellij uses KDL, a structured document language that reads more like a real config file. You can dump the defaults and edit from there:
mkdir -p ~/.config/zellij
zellij setup --dump-config > ~/.config/zellij/config.kdl
The big win for newcomers: if Tmux's keybindings live in your muscle
memory, Zellij lets you switch to a Tmux-compatible mode. Hit
Ctrl+b and the familiar splits (% and
") just work. You can migrate without throwing away years
of reflexes.
Layouts
This is where Zellij pulled ahead for me. In Tmux, reproducible
layouts usually mean a plugin like
tmux-resurrect
plus a shell script, or wiring up tmuxinator. It works,
but it's bolted on.
In Zellij, layouts are first-class. You describe a workspace declaratively in KDL and launch straight into it:
// ~/.config/zellij/dev.kdl
layout {
pane split_direction="vertical" {
pane command="nvim"
pane split_direction="horizontal" {
pane command="npm" {
args "run" "dev"
}
pane
}
}
}
zellij --layout ~/.config/zellij/dev.kdl
One command and I'm dropped into editor + dev server + a spare shell, every single time. For projects I touch daily, that consistency is worth more than any single feature.
Sessions that survive
Session management is core to both, but Zellij surfaces it better. Listing sessions is symmetric:
# tmux
tmux ls
tmux attach -t main
# zellij
zellij list-sessions
zellij attach main
Where Zellij shines is in-app navigation. Press
Ctrl+o then w and you get an interactive
session manager - including sessions you've exited, which it can
resurrect. In Tmux you'd lean on
tmux-resurrect and tmux-continuum to get
close to the same thing.
So what should I use?
Honest answer: it depends on where you are.
- New to multiplexers? Start with Zellij. The on-screen hints, sane defaults, and first-class layouts get you productive without a weekend of config archaeology.
- Already fluent in Tmux? Stay - unless layouts or session UX are genuine pain points. Tmux is everywhere, rock-solid, and your config already exists.
- Live on remote servers over SSH? Tmux's ubiquity wins. It's pre-installed almost everywhere; Zellij usually isn't.
I ended up keeping Tmux on servers and reaching for Zellij locally, where its layouts save me real time every morning. Use whatever makes you faster - that's the only metric that counts.
a small honest note: a few blocks here were drafted or tidied up with an AI assistant, purely for clearer wording. the opinions, the configs, and a year of actually living in both are mine — only some of the prose had a little help finding the right words.