The foundation before touching Zellij: essential terminal skills and job control in the shell, SSH fundamentals for remote development, plus a modern terminal setup and a verified Zellij installation.

Welcome to the Learn Zellij series! This series will take you from zero to building a productive, secure, production-ready terminal workspace. It totals 28 episodes that build on each other: prerequisites and environment setup, the history of why Zellij was born, the client-server architecture, session/tab/pane lifecycle, the mode system, scrollback and search, floating panes, config.kdl configuration, custom keybindings, KDL layouts, status bar and themes, pipes and CLI actions, the plugin system, session persistence, multiplayer, and finally a production-ready setup.
Why is Zellij important to learn? The terminal is the developer's home — yet most of us still work with a single narrow terminal window: one process, one screen, no memory when SSH disconnects. Zellij is a terminal workspace: it wraps the terminal with sessions, tabs, panes, floating panes, and a plugin system that all run keyboard-first. Built in Rust with plugins written in WASM, Zellij offers a modernity that older multiplexers lack while still surviving unstable connections.
This episode 0 is your roadmap. Before touching Zellij, we make sure of five things: (1) terminal skills and job control that feel comfortable under your fingers, (2) an understanding of processes and SSH for remote development, (3) a modern terminal with true color and a Nerd Font, (4) a mental model of a terminal workspace that will make Zellij's concepts feel familiar, and (5) a Zellij installation complete with a working first session. Every following episode assumes this foundation is solid. Let's begin.
Zellij doesn't replace the terminal — it sits on top of the terminal. Every Zellij pane is ultimately a process running inside a pseudo-terminal (PTY). If you aren't comfortable with basic CLI navigation, you won't get the most out of a Zellij workspace. These are the skills you must have before moving on.
| Skill | Example Commands | Purpose |
|---|---|---|
| Directory navigation | cd, pwd, ls -la | Moving around and understanding folder structure |
| File management | cp, mv, rm, mkdir | Managing files and folders |
| Running commands | ./script.sh, command --help | Running programs and reading their documentation |
| Process management | ps, kill, htop | Understanding and controlling running processes |
| Job control | jobs, fg, bg, Ctrl+Z | Managing processes in the background |
Understand not just the commands, but the relationships between concepts: every Zellij pane is one shell process running inside a PTY. When you create a new pane, Zellij creates a new PTY and runs a shell inside it. When you close a pane, the process inside it is stopped too. This mental model — that a Zellij workspace is a collection of managed processes — is the key to understanding all the following episodes.
Note
Pay attention to one detail that is often misunderstood: closing a Zellij pane is not the same as closing a terminal window. Closing a terminal window sends SIGHUP and can stop the processes inside; closing a Zellij pane is an explicit decision that also stops the process, but detaching from a Zellij session (Ctrl+o then d) does not stop processes — they keep running until you attach again.
Job control is the bridge between a plain terminal and a terminal workspace. The ability to suspend, move, and manage processes is what makes the multi-pane concept feel natural. Master the following commands until they flow:
| Command / Key | Purpose |
|---|---|
Ctrl+C | Stops the process running in the foreground |
Ctrl+Z | Suspends the process to the background |
jobs | Lists the suspended jobs |
bg | Resumes a job in the background |
fg | Moves a job to the foreground |
kill %1 | Stops a job by number |
Most Zellij workflows follow the same pattern: running a long process (dev server, tail log, build watcher) in one pane while another pane is used for editing code. If this flow still feels foreign, practice it here — because you'll be living inside it later.
Tip
Get used to the keyboard-first pattern: the less often you touch the mouse, the faster your workflow. Zellij is designed around this philosophy — every action (moving panes, creating tabs, resizing) can be done without taking your hands off the keyboard. Practice here by suspending a process with Ctrl+Z and moving it with fg/bg without touching the mouse.
One of the biggest reasons people use a multiplexer is to survive SSH disconnects. When you work on a remote server and the connection drops, the foreground process dies with it. Zellij solves this with sessions that detach from the terminal. But for that, you need a basic grasp of SSH:
ssh user@host
ssh -i ~/.ssh/id_ed25519 user@hostUnderstand three things about SSH before moving on:
ssh-keygen -t ed25519, then copy to the server with ssh-copy-id user@host.ControlMaster in ~/.ssh/config so SSH connections don't need to be re-handshaked every time — very helpful when attaching and detaching Zellij back and forth.ssh -A to forward the SSH agent — important when working through a bastion/jump host with Zellij.Host myserver
HostName 192.168.1.10
User arman
IdentityFile ~/.ssh/id_ed25519
ControlMaster auto
ControlPath ~/.ssh/controlmasters/%r@%h:%p
ControlPersist 10m
ServerAliveInterval 60
ServerAliveCountMax 3ServerAliveInterval and ServerAliveCountMax keep the connection alive and quickly detect dead connections — a perfect combination with Zellij surviving behind SSH.
Zellij runs a shell inside every pane — and a healthy shell is the foundation of a comfortable workspace. Take the time to tidy up your shell before moving on. Note the two main files: the profile (loaded at login) and the rc (loaded every time an interactive shell starts). For bash: ~/.bash_profile and ~/.bashrc. For zsh: ~/.zshrc (one file for everything). For fish: ~/.config/fish/config.fish.
What should go in there?
| Contents | Example | Reason |
|---|---|---|
| Common aliases | alias ll='ls -la' | Saves keystrokes every day |
| Informative prompt | PS1, starship, powerlevel10k | Know the directory & git branch at a glance |
| Default editor | export EDITOR=nvim | Used by Zellij when editing scrollback |
| Tool path | export PATH="$HOME/.local/bin:$PATH" | Reach local binaries |
| Helper function | mkt() { cd ~/work/$1; zellij -s $1; } | Launch a workspace per project |
One important detail for this series: Zellij respects $EDITOR. When you press e in Scroll mode to edit scrollback, Zellij opens the file in the editor defined by this variable. Set export EDITOR=nvim (or vim, code --wait) in your rc file — later in episode 6 this skill will prove very valuable.
Tip
If you often switch machines, keep your shell configuration in a dotfiles repo and symlink it into place. This is the same pattern you'll apply to ~/.config/zellij/ in episode 27. Consistent environments between local and remote machines make the Zellij experience identical wherever you work.
Zellij is an application hungry for modern terminal features. Some Zellij features (floating panes, web client, mouse support, automatic theme switching) depend on your terminal emulator's capabilities. Don't use a dated built-in terminal — invest five minutes to pick one:
| Terminal | Strengths | Platform |
|---|---|---|
| Kitty | Very fast, GPU-accelerated | Linux/macOS |
| WezTerm | Lua config, built-in tabs, cross-platform | Linux/macOS/Windows |
| Ghostty | New, fast, minimal config | Linux/macOS |
| Alacritty | Lightweight, GPU-accelerated, YAML config | Linux/macOS/Windows |
| iTerm2 | The most feature-complete on macOS | macOS |
| Windows Terminal | Built-in tabs & panes, GPU | Windows |
The most important thing: true color support (24-bit). Zellij and its themes (dracula, catppuccin, etc.) rely on true color to look good. Check with the following command:
echo -e "\e[38;2;255;0;0mRED\e[0m"If "RED" shows up in red, your terminal supports true color. Besides true color, make sure the terminal supports OSC 52 (remote clipboard) — a feature Zellij later uses for clipboard integration on remote hosts.
Zellij uses icons in the tab bar and status bar (active tab, active pane, active mode). These icons come from Nerd Font — a font enriched with thousands of glyphs. Without a Nerd Font, icons will appear as empty squares or strange characters. The two most popular options:
Download from nerdfonts.com, install on your system, then set it as your terminal font. Verify the icons render by running a Zellij session later — the tab bar should display clear icons, not boxes.
Important
This is the most common mistake in episode 0: the Zellij interface looks broken or odd not because Zellij has a problem, but because the terminal doesn't have a Nerd Font. Always install and set a Nerd Font before judging Zellij's appearance. If icons appear as boxes □, the fix is almost always in the terminal font settings.
Zellij is available on almost every platform. Choose the method that fits best:
curl -sSfL https://install.zellij.dev | bashOnce installed, verify the installation:
zellij --version
zellij setup --checkzellij setup --check runs a series of environment checks — including a terminal check, a color check, and a configuration check. Green output means your environment is ready. Note the version: this series references Zellij 0.44.x; make sure your major version isn't too far behind so the commands in every episode remain valid.
This is the "stress test" of this episode: start your first Zellij session and make sure everything works end to end — Zellij spawns a server, opens a pane, and renders the UI.
zellijOnce inside, you'll see:
tab 1) with an icon.NORMAL), session name, and keybinding hints.Try your first interactions: press Ctrl+p then n to create a new pane, Ctrl+p then h/l to move focus, and Ctrl+o then d to detach. After detaching, run zellij attach to attach again — notice that the shell inside the pane stays alive while you're away. That's the magic of a Zellij session.
Tip
Press Ctrl+p then ? to display the complete list of pane keybindings. Zellij shows contextual hints in the status bar every time you press a mode key — this is the best way to learn without memorizing every shortcut up front.
□. Fix: install a Nerd Font and set it in the terminal font settings.jobs/fg/bg, the multi-pane workflow feels awkward. Practice it first — this skill will shadow the entire series.Warning
Throughout the series, distinguish two contexts: inside Zellij and outside Zellij. Some commands (zellij action, zellij pipe, zellij attach) only make sense outside a session or via the CLI; while keybindings only make sense inside a session. Confusing these two contexts is the biggest source of frustration for Zellij beginners.
In this episode 0 you've secured five foundations: terminal skills (navigation, file management, processes, job control), SSH understanding (key-based auth, persistent connections, agent forwarding) for remote development, a modern terminal with true color, a Nerd Font for a beautiful Zellij interface, and a verified Zellij installation — proven by a successfully running first session.
Key takeaways:
Remember, the Learn Zellij series consists of 28 episodes that build on each other. Episode 0 is the first brick — and you've just laid it perfectly. In episode 1 next, we step back briefly to understand the history, background, and why Zellij was born: the evolution of terminal workspaces from GNU Screen and tmux, the story of Zellij first released in 2021, why Rust was chosen, and an honest comparison of Zellij against tmux and a plain terminal. See you in episode 1, and happy building your terminal workspace!