Short answer: Zellij is a newer terminal multiplexer, written in Rust, that shows key hints on screen, ships layouts, floating panes and WebAssembly plugins, and can restore a session after it ends. tmux is the small, scriptable standard in every distribution’s repositories. On servers you reach over SSH, tmux is the safe default; Zellij suits your own long-lived boxes.
Both do the core job the same way: a terminal session that keeps running on the server when your SSH connection drops, split into tabs and panes. The differences are in how you drive them, what comes built in and how easy each is to get onto a minimal server. Zellij facts below come from zellij.dev and its GitHub repository, read on 21 October 2026; Zellij was not run for this article.
tmux vs Zellij vs screen at a glance
| tmux | Zellij | GNU Screen | |
|---|---|---|---|
| Language, licence | C, ISC licence | Rust, MIT licence | C, GPL |
| Debian and Ubuntu package | Yes | None in any Debian suite (packages.debian.org, 21 October 2026) | Yes |
| Rocky Linux, AlmaLinux | Base repositories | Release binary | EPEL only |
| How you give commands | Prefix key Ctrl-b, then a key | Modes: Ctrl+p pane, Ctrl+t tab, and so on | Prefix key Ctrl-a, then a key |
| Key hints on screen | No, Ctrl-b ? lists bindings | Yes, a bar shows the keys of the current mode | No |
| Config | ~/.tmux.conf, tmux commands | ~/.config/zellij/config.kdl, KDL, applied live | ~/.screenrc |
| Layouts | Built by commands or scripts | Built in, KDL layout files | Via .screenrc |
| Floating panes | Popups (display-popup) | Yes, toggled with Alt+f | No |
| Plugins | Shell scripts via the third-party TPM | WebAssembly plugins, built in | None |
| After the session ends | Gone (third-party tmux-resurrect can save layouts) | Layout and pane commands can be resurrected | Gone |
| Default scrollback | 2,000 lines | 10,000 lines | 100 lines (1,024 on Debian) |
| Scripting | tmux send-keys, new-window, split-window | zellij run, zellij action | screen -X |
What is Zellij?
Zellij (sometimes typed “zelij”) calls itself a terminal workspace. Like tmux it runs a server process that holds your sessions, tabs and panes, so you can detach and reattach. What sets it apart is that it tries to be learnable without a cheat sheet: the bar at the bottom always shows which keys do what in the current mode. Layouts are plain KDL files that open a set of tabs and panes with commands already running, panes can float above the others or stack, and the tab bar, status bar and session manager are themselves plugins compiled to WebAssembly, so third parties can write their own. Since version 0.43 it also includes an optional web client that serves sessions to a browser. As of October 2026 the newest release is 0.45.1, published 28 August 2026 (GitHub releases).
Install Zellij (and tmux)
Debian has no Zellij package, so on Debian and Ubuntu servers the practical route is the official release binary. The Linux builds are statically linked (musl), so one file runs on any x86_64 distribution:
curl -fsSLO https://github.com/zellij-org/zellij/releases/latest/download/zellij-x86_64-unknown-linux-musl.tar.gz
tar -xzf zellij-x86_64-unknown-linux-musl.tar.gz
sudo install -m 755 zellij /usr/local/bin/zellij
zellij --versionEach release also has aarch64 builds, a .sha256sum file beside every archive, and zellij-no-web-* builds without the web server, which is all a headless server needs. Other routes from Zellij’s install docs:
- Cargo:
cargo install --locked zellijcompiles it from source, which takes a long time on a small VPS;cargo binstall zellijfetches the binary instead. - Arch Linux:
pacman -S zellij. macOS:brew install zellij. - Fedora:
sudo dnf copr enable varlad/zellij, thensudo dnf install zellij. Zellij’s docs list this as a third-party package, not one they maintain. - Try it first:
bash <(curl -L https://zellij.dev/launch)downloads and runs a temporary copy. Fine on your laptop; on a server, prefer a binary you have checked.
tmux is one command away almost everywhere: sudo apt install tmux on Debian and Ubuntu, sudo dnf install tmux on Fedora, Rocky Linux and AlmaLinux. The tmux cheat sheet covers its keys, and the screen command guide does the same for GNU Screen.
Zellij keys: modes instead of a prefix
tmux uses one prefix key: press Ctrl-b, release, press a command key. Zellij uses modes. In normal mode, a Ctrl combination switches into a mode, the bar shows that mode’s keys, and a single letter acts; Enter or Esc takes you back to normal mode. The defaults, from Zellij’s default keybinding file:
| Keys | Mode or action | Useful keys inside |
|---|---|---|
| Ctrl+p | Pane mode | n new, d split down, r split right, x close, f fullscreen, w toggle floating |
| Ctrl+t | Tab mode | n new, x close, r rename, b break pane into a tab, s sync input |
| Ctrl+n | Resize mode | arrow keys or h j k l |
| Ctrl+h | Move mode | arrow keys move the pane |
| Ctrl+s | Scroll mode | arrows and PageUp/PageDown, s search, e open scrollback in $EDITOR |
| Ctrl+o | Session mode | d detach, w session manager, c configuration |
| Ctrl+b | tmux mode | d detach, c new tab, % split right, " split down |
| Ctrl+g | Locked mode | every key goes to the program; Ctrl+g again unlocks |
| Ctrl+q | Quit | ends the session |
| Alt+n / Alt+f | New pane / show or hide floating panes | from normal mode |
| Alt + arrows | Move focus between panes | from normal mode |
The catch is that those Ctrl keys are also used by shells and editors: Ctrl+p and Ctrl+n walk shell history, Ctrl+o saves in nano, Ctrl+s and Ctrl+t mean things in Emacs and Vim. Zellij offers two ways out: press Ctrl+g to lock it while you work in such a program, or switch to the unlock-first preset in the configuration screen (Ctrl+o, then c). That preset starts locked; Ctrl+g unlocks, then a single letter picks the mode, for example p for pane mode, so Ctrl+g, p, n opens a new pane, and the bar shows the other letters. On a Mac, the Alt shortcuts only work if your terminal app sends Option as Meta (Alt).
Sessions: start, detach, list, reattach
| Task | tmux | Zellij |
|---|---|---|
| Start a named session | tmux new -s work | zellij -s work |
| Attach, or create if missing | tmux new -A -s work | zellij attach -c work |
| Detach | Ctrl-b d | Ctrl+o, then d |
| List sessions | tmux ls | zellij ls |
| Reattach | tmux attach -t work | zellij attach work |
| End a session | tmux kill-session -t work | zellij kill-session work |
| Forget an ended session | Not needed | zellij delete-session work |
Losing the connection detaches you in both: Zellij’s on_force_close option defaults to detach when the terminal goes away, as tmux does. The difference comes when a session really ends, after a quit, a crash or a reboot. tmux forgets it. Zellij keeps writing each session’s layout and the command in each pane to your cache folder while it runs, and zellij ls keeps listing ended sessions so you can attach to them again. You get the tabs and panes back, and the commands wait for you to press Enter before they run (--force-run-commands skips that).
Layouts and scripting
tmux is scripted with its own commands, which makes it easy to drive from shell scripts and cron jobs:
tmux new-session -d -s mon 'htop'
tmux split-window -h -t mon 'journalctl -f'
tmux attach -t monZellij describes the same thing declaratively in a layout file and starts it with --layout. A layout replaces the default one, so keep the tab bar and status bar panes if you want them:
layout {
pane size=1 borderless=true {
plugin location="zellij:tab-bar"
}
pane split_direction="vertical" {
pane command="htop"
pane command="journalctl" {
args "-f"
}
}
pane size=2 borderless=true {
plugin location="zellij:status-bar"
}
}zellij --layout ~/.config/zellij/layouts/mon.kdl
zellij run -- tail -f /var/log/nginx/error.log # new pane running a command
zellij run --floating -- htop # the same, as a floating panezellij action exposes most keyboard actions (new tab, focus, resize) to scripts. For heavy automation, tmux is still the better-trodden path: its command language has been stable for years and countless scripts and tools build on it.
Minimal servers and resource use
tmux is a small C program and is in every repository, which matters on the servers you did not set up yourself: a fresh cloud image, a colleague’s box, a rescue environment. Zellij is a single, larger binary that also embeds a WebAssembly runtime for its plugins, so expect a larger memory footprint than tmux. Neither is heavy on a modern VPS, but measure rather than guess, with both running:
ps -eo pid,rss,comm | grep -E 'tmux|zellij'Zellij’s default bars use arrow glyphs. If your terminal font lacks them, set simplified_ui true in its config; tmux needs nothing comparable.
Which one on a VPS over SSH?
- Choose tmux if you log in to many servers, work on minimal images, automate sessions from scripts, or already know the keys. It is installed or one package away everywhere, and it behaves the same on all of them.
- Choose Zellij for a box you live on, such as your own Linux VPS used as a development server: the on-screen hints, per-project layouts, floating panes and resurrection pay off when you return to the same server every day and can install a binary once.
- Keep GNU Screen where it is already the only one installed, or for serial consoles, which it opens directly.
Mixing them is common: Zellij on your workstation, tmux on the servers. When a remote tmux runs inside a local Zellij pane, press Ctrl+g to lock Zellij so every key, including Ctrl-b, reaches the remote tmux. Whichever you pick, run the long job inside it, and a dropped connection (SSH: broken pipe) costs you nothing but a reattach.
Frequently asked
What is Zellij?
A terminal multiplexer written in Rust. Like tmux, it keeps sessions running after you disconnect and splits the terminal into tabs and panes. It also shows its key bindings on screen, has built-in layouts, floating panes and WebAssembly plugins, and can resurrect a session after it ends.
How do I install Zellij on Ubuntu or Debian?
Debian has no zellij package, so download zellij-x86_64-unknown-linux-musl.tar.gz from the project's GitHub releases, extract it and install the zellij binary to /usr/local/bin. cargo install --locked zellij builds it from source instead.
How do I detach and reattach in Zellij?
Press Ctrl+o, then d, to detach. Run zellij ls to list sessions and zellij attach NAME to go back. zellij attach -c NAME attaches to the session, or creates it if it does not exist yet.
Is Zellij better than tmux?
Not across the board. Zellij is easier to learn and has more built in. tmux is smaller, is in every distribution's repositories and is easier to script. For servers you only visit over SSH, tmux is the safer default.