How to Install Zellij on Ubuntu: The Terminal Workspace and Multiplexer

Zellij is a terminal workspace and multiplexer with batteries included. In the same family as tmux and screen, it splits your terminal into panes, groups work into tabs, and keeps sessions alive so you can detach and reattach at will. What sets it apart is discoverability: a live status bar shows the keybindings available in your current mode, so you can get real work done without first learning a manual.

Written in Rust and moving fast, Zellij keeps adding capabilities โ€” session resurrection, floating panes, a WebAssembly plugin system. The Ubuntu archive tends to carry an older release, and on some versions Zellij is absent entirely. Building from source means installing and maintaining a Rust toolchain.

The unofficial deb.griffo.io repository provides a current Zellij package you manage with apt. Here is the full setup on Ubuntu.

What Makes Zellij Special?

  • ๐Ÿ” Discoverable by design โ€” the status bar shows the keys for the active mode, so you learn the tool while using it.
  • ๐ŸชŸ Panes, tabs and floating panes โ€” split, stack and float terminals to match your workflow.
  • ๐Ÿ’พ Session persistence โ€” detach and reattach freely; sessions can even be resurrected after a reboot.
  • ๐Ÿ“ Declarative layouts โ€” capture an entire workspace in a KDL file and launch it in one command.
  • ๐Ÿ”Œ WebAssembly plugins โ€” extend Zellij with plugins compiled to WASM from any supported language.
  • ๐Ÿ–ฑ๏ธ Mouse support โ€” click to focus, select and resize when you want it.
  • ๐ŸŽจ Themes and styling โ€” bundled themes plus full control through configuration.
  • ๐Ÿ“‹ Copy mode โ€” scroll history and copy to the system clipboard.

Why Use the deb.griffo.io Repository?

  • Install and update through APT with no manual downloads.
  • Automatic dependency management through Debian-style packaging.
  • Always tracks upstream so Zellij stays current.
  • No source builds and no Rust toolchain to maintain.
  • Works across supported Ubuntu releases โ€” Jammy, Noble and newer.

Prerequisites

You will need:

  • An Ubuntu system (Jammy 22.04 LTS, Noble 24.04 LTS, or newer)
  • sudo privileges
  • curl installed (sudo apt install curl if it is missing)

Step 1: Add the deb.griffo.io Repository

Install the repository key and add its source list:

# Create the keyrings directory
sudo install -d -m 0755 /etc/apt/keyrings

# Download and install the repository GPG key
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg

# Add the repository (auto-detects your distro codename)
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null

# Update the package list
sudo apt update

What each command does:

  1. Keyrings directory โ€” /etc/apt/keyrings stores third-party keys on modern Ubuntu.
  2. GPG key โ€” downloaded and de-armoured so APT can verify signed packages.
  3. Source list โ€” lsb_release -sc supplies your Ubuntu codename (for example noble).
  4. Update โ€” refreshes APTโ€™s index.

Step 2: Update the Package List

If you did not run the last command above:

sudo apt update

Step 3: Install Zellij

sudo apt install zellij

APT installs Zellij and any dependencies it needs.

Step 4: Verify the Installation

zellij --version

Expected output:

zellij 0.42.2

Launch your first session with:

zellij

Getting Started with Zellij

Panes, Tabs and Modes

Zellij is organised around modes, each advertised in the status bar. From the default mode:

  • Ctrl p โ€” pane mode: n new pane, d split down, r split right, x close, arrows to move focus
  • Ctrl t โ€” tab mode: n new tab, r rename, x close, 1โ€“9 jump directly
  • Ctrl n โ€” resize mode: arrow keys grow or shrink the focused pane
  • Ctrl s โ€” scroll/search mode: page through scrollback and search it
  • Ctrl q โ€” quit Zellij

Because each mode key reveals its own bindings in the status bar, there is nothing to memorise up front.

Managing Sessions

Sessions survive disconnects, which makes them ideal on remote Ubuntu servers over SSH:

# Start a named session
zellij --session dev

# List all sessions
zellij list-sessions

# Reattach after disconnecting
zellij attach dev

# Attach to the latest session or create one
zellij attach --create

Detach from a session without ending it with Ctrl o followed by d.

Configuration

Zellij reads ~/.config/zellij/config.kdl. Dump a fully commented default and edit from there:

mkdir -p ~/.config/zellij
zellij setup --dump-config > ~/.config/zellij/config.kdl

Common settings to adjust:

theme "catppuccin-mocha"
default_shell "bash"
pane_frames false
copy_command "xclip -selection clipboard"

Layouts

A layout describes a complete workspace in KDL and starts it in one go. Save this as web.kdl:

layout {
    tab name="server" focus=true {
        pane command="npm" {
            args "run" "dev"
        }
    }
    tab name="work" {
        pane split_direction="vertical" {
            pane
            pane command="hx" {
                args "."
            }
        }
    }
}

Then:

zellij --layout ./web.kdl

Drop layouts into ~/.config/zellij/layouts/ to launch them by name, for example zellij --layout web.

Autostart in Your Shell

To open Zellij automatically with each new terminal, append this to ~/.bashrc:

if [[ -z "$ZELLIJ" ]]; then
    zellij attach --create
fi

The ZELLIJ check prevents Zellij from nesting inside an existing session.

Keeping Zellij Updated

Zellij updates arrive with your normal Ubuntu upgrades:

sudo apt update && sudo apt upgrade

Other Tools from deb.griffo.io

The repository packages many more terminal tools for Ubuntu:

  • Helix โ€” a post-modern modal editor to run inside a Zellij pane.
  • Yazi โ€” a blazing-fast terminal file manager for another pane.
  • Lazydocker โ€” a simple terminal UI for Docker and docker-compose.
  • Zig โ€” a general-purpose systems programming language.

Troubleshooting

GPG or Key Errors

If APT reports a signature problem, re-install the key:

sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
sudo apt update

Package Not Found

If APT cannot find zellij:

  1. Run sudo apt update after adding the repository.
  2. Confirm your release is supported (Jammy, Noble or newer).
  3. Check the source list:
cat /etc/apt/sources.list.d/deb.griffo.io.list

Session Lost After SSH Drops

This is exactly what Zellij protects against โ€” but only if you were inside a session. Start work with zellij attach --create so that when your SSH connection dies, the session keeps running and zellij attach brings it back on reconnect:

zellij list-sessions
zellij attach <name>

Uninstalling

# Remove the Zellij package
sudo apt remove zellij

# Optionally remove the repository
sudo rm -f /etc/apt/sources.list.d/deb.griffo.io.list
sudo rm -f /etc/apt/keyrings/deb.griffo.io.gpg
sudo apt update

Conclusion

Zellij makes terminal multiplexing approachable without sacrificing power โ€” discoverable keybindings, persistent sessions, floating panes and declarative layouts โ€” and deb.griffo.io keeps it current on Ubuntu through a single apt install. It is especially valuable on remote servers, where a detached session means an interrupted connection never costs you your work.

Dump a config, sketch your workspace as a layout, and let every future release reach you through your normal apt upgrade.

Resources


Disclaimer: The deb.griffo.io repository is an unofficial community project and is not affiliated with the official Debian or Ubuntu projects, or with the upstream Zellij project.