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+p enters Pane mode (create, resize, move panes)
  • Ctrl+t enters Tab mode (create, rename, navigate tabs)
  • Ctrl+n enters Resize mode (resize current pane with arrow keys)
  • Ctrl+s enters Scroll mode (scroll buffer, search)
  • Esc or Enter returns 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.conf configuration 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.