TL;DR:
- Zellij is a terminal multiplexer written in Rust that adds floating panes, a discoverable UI with visible keybindings, and a WASM plugin system — things tmux never had
- The learning curve is much shallower than tmux because the interface shows you what’s available rather than requiring memorisation
- Layouts are defined in KDL files and can be committed to a repo, so your whole team gets the same workspace setup on
zellij --layout project.kdl
If your terminal workflow involves multiple panes, tab groups, and persistent sessions — and you’ve been living in tmux because it’s what everyone uses — Zellij is worth trying. It’s not a minor refinement. It approaches terminal multiplexing as a first-class product rather than a tool built for a 1990s mental model.
The short version: Zellij is discoverable, has floating panes, has a real plugin system, and lets you define reproducible workspace layouts in code. tmux has none of these things. For new projects where you’re not locked into existing tmux configs, Zellij is a better default.
Installation
# macOS
brew install zellij
# Arch Linux
pacman -S zellij
# Cargo (any platform)
cargo install --locked zellij
# Pre-built binary
curl -LSfs https://github.com/zellij-org/zellij/releases/latest/download/zellij-x86_64-unknown-linux-musl.tar.gz | tar xvz
Run zellij and you’re in — no configuration required to get started.
The UI Philosophy
The biggest UX difference from tmux is visible immediately: Zellij shows you the available keybindings in a bar at the bottom of the screen. You’re always in a named mode (Normal, Pane, Tab, Resize, Scroll, Session, etc.) and the current mode’s bindings are displayed. This is a small thing that matters enormously for learning and for occasional users who don’t want to memorise 40 key chords.
In tmux, the answer to “what can I do right now?” is “read the man page.” In Zellij, it’s “look at the status bar.”
Modes are entered and exited cleanly:
Ctrl+penters Pane mode (create, resize, move panes)Ctrl+tenters Tab mode (create, rename, navigate tabs)Ctrl+nenters Resize mode (resize current pane with arrow keys)Ctrl+senters Scroll mode (scroll buffer, search)EscorEnterreturns to Normal mode
Panes and Floating Panes
Standard split panes work as you’d expect:
Ctrl+p then n # new pane (splits current)
Ctrl+p then d # new pane below (down split)
Ctrl+p then r # new pane right
Ctrl+p then x # close current pane
The differentiator is floating panes — panes that overlay the workspace and can be moved and resized freely, then hidden and restored:
Ctrl+p then w # toggle floating pane
Alt+<n> # bring up floating pane by index
Floating panes are excellent for scratch space, quick command output you want to reference without splitting your layout, or running a process you want visible temporarily without restructuring the whole workspace.
Tabs
Tabs in Zellij work like browser tabs — each tab is an independent pane layout. Ctrl+t then n creates a new tab. Rename a tab with Ctrl+t then r for named workspace groups.
Unlike tmux windows, Zellij tabs display their names visibly at the top. Multiple sessions aren’t a hidden concept you need to learn separately — they’re surfaced in the session manager.
Layouts
This is Zellij’s most underrated feature. You can define your workspace layout in a KDL (Kdl Document Language) file and launch directly into it:
// project.kdl
layout {
pane split_direction="vertical" {
pane size=1 borderless=true {
plugin location="zellij:tab-bar"
}
}
pane split_direction="horizontal" {
pane split_direction="vertical" {
pane command="nvim" {
args "."
}
pane size="30%" {
pane command="lazygit"
pane
}
}
pane size="25%" {
pane command="npm" {
args "run" "dev"
}
pane
}
}
pane size=2 borderless=true {
plugin location="zellij:status-bar"
}
}
Launch with:
zellij --layout project.kdl
Commit this file to your project repo and every developer on the team gets the same workspace: editor on the left, git UI top right, a terminal below it, and dev server bottom right — all launched automatically.
Session Persistence
Sessions persist after your terminal closes, just like tmux. Attach to an existing session with:
zellij attach # attach to most recent session
zellij attach my-session # attach by name
zellij list-sessions # list running sessions
Sessions are named automatically but you can specify a name: zellij -s project-alpha.
The Plugin System
Zellij’s plugin system uses WASM (WebAssembly), which means plugins can be written in any language that compiles to WASM — Rust, Go, C, or AssemblyScript. Plugins run sandboxed, can interact with the UI, respond to events, and render into panes.
The bundled plugins (tab-bar, status-bar, strider file manager, session-manager) demonstrate the API. Community plugins include:
- zjstatus: Highly configurable status bar replacement
- room: workspace/layout manager with visual switching
- multitask: progress tracking for running commands
The plugin ecosystem is still smaller than tmux’s, but the architecture is sounder — WASM plugins don’t have the security and portability issues of tmux’s approach.
Zellij vs tmux: When to Choose Each
Use Zellij when:
- You’re setting up a new environment without existing tmux configs to migrate
- You want reproducible project layouts committed to source control
- You work with teammates who aren’t terminal power users and need a discoverable tool
- You want floating panes for scratch space
Stay with tmux when:
- You have years of
.tmux.confconfiguration you’d need to translate - You rely on tmux plugins in the TPM ecosystem that have no Zellij equivalent
- You need the most minimal resource footprint possible
- Your team is all experienced tmux users with muscle memory invested
One practical migration path: start using Zellij for new projects and personal workflow while keeping tmux for remote servers and production SSH sessions you’ve already configured. The two coexist without conflict.
Configuration
The main config lives at ~/.config/zellij/config.kdl. Theme, default layout, and keybinding overrides go here:
// ~/.config/zellij/config.kdl
theme "catppuccin-mocha"
keybinds {
normal {
bind "Alt h" { MoveFocusOrTab "Left"; }
bind "Alt l" { MoveFocusOrTab "Right"; }
bind "Alt j" { MoveFocus "Down"; }
bind "Alt k" { MoveFocus "Up"; }
}
}
default_layout "compact"
The built-in theme list is substantial (Catppuccin, Nord, Dracula, Gruvbox, etc.) and you can define your own in the config file.
Zellij’s development pace has been fast — the team ships significant features every few months. If you’ve dismissed it as “another tmux clone,” the current version is substantially more capable than most comparisons describe.