TL;DR — Quick Summary

Zellij is a modern terminal multiplexer with built-in layout system, floating panes, plugins, and intuitive keybindings. Learn setup, layouts, and workflows.

Zellij is a terminal multiplexer that takes the power of tmux and wraps it in a modern, discoverable interface. Written in Rust, it provides split panes, tabs, persistent sessions, and a WebAssembly plugin system — all with sensible defaults that work immediately without configuration.

Prerequisites

  • Linux, macOS, or WSL on Windows
  • A modern terminal emulator (Alacritty, WezTerm, kitty, iTerm2)

Installation

# Rust/Cargo
cargo install --locked zellij

# macOS
brew install zellij

# Arch Linux
sudo pacman -S zellij

# Nix
nix-env -i zellij

# Pre-built binary
bash <(curl -L zellij.dev/launch)

# Verify
zellij --version

Quick Start

# Start new session
zellij

# Start named session
zellij -s dev

# Attach to existing session
zellij attach dev

# List sessions
zellij list-sessions

# Start with a layout
zellij --layout compact

Keybinding Modes

Zellij uses modes to avoid keybinding conflicts with terminal applications:

ModeShortcutPurpose
NormalDefaultType normally
PaneCtrl+pSplit, resize, move panes
TabCtrl+tCreate, switch, rename tabs
ResizeCtrl+nResize current pane
MoveCtrl+hMove panes around
ScrollCtrl+sScroll through output, search
SessionCtrl+oDetach, manage sessions
LockedCtrl+gLock Zellij — pass all keys through

The status bar at the bottom always shows available keys for the current mode.

Layouts

Create reusable workspace layouts with .kdl files:

// dev-layout.kdl
layout {
    tab name="Code" focus=true {
        pane split_direction="vertical" {
            pane size="70%" command="nvim" {
                args "."
            }
            pane split_direction="horizontal" {
                pane command="bash"
                pane command="bash" {
                    args "-c" "git log --oneline -20"
                }
            }
        }
    }
    tab name="Server" {
        pane command="npm" {
            args "run" "dev"
        }
    }
    tab name="Shell" {
        pane
    }
}

Launch: zellij --layout dev-layout.kdl

Floating Panes

# In pane mode (Ctrl+p)
# Press w to toggle floating panes
# Press f to create a new floating pane
# Floating panes overlay your layout — perfect for quick tasks

Configuration

Config file: ~/.config/zellij/config.kdl

// config.kdl
keybinds {
    normal {
        // Example custom keybindings
    }
}

theme "catppuccin-mocha"

default_layout "compact"
default_shell "bash"
pane_frames false  // Remove pane borders for cleaner look

Comparison

FeatureZellijtmuxGNU Screen
LanguageRustCC
Discoverable UIBuilt-in status barNoneNone
Config formatKDLCustomCustom
Layout systemKDL filesCustomBasic
Floating panesYesPopup (3.3+)No
Plugin systemWASMNoneNone
Default usabilityExcellentRequires configRequires config
SSH persistenceYesYesYes

Real-World Workflow

You SSH into a production server and need to monitor logs, run commands, and edit configs simultaneously. Start zellij -s ops, create a tab with split panes: one for journalctl -f, one for htop, one for your shell. Disconnect from SSH — the session persists. Reconnect and zellij attach ops — everything is exactly where you left it.

Summary

  • Zellij is a modern terminal multiplexer with built-in discoverability via the status bar
  • Mode-based keybindings (pane, tab, resize, scroll) avoid conflicts with terminal apps
  • KDL layout files define reusable workspace configurations with panes, tabs, and auto-commands
  • Floating panes provide overlay terminals for quick tasks without disrupting your layout
  • Sessions persist across SSH disconnections — reattach with zellij attach
  • WebAssembly plugin system extends functionality with third-party integrations