You've tried to learn tmux three times. Each time you gave up after memorizing Ctrl-b then trying to remember if it's % or | for vertical split. tmux is powerful but hostile to newcomers. Zellij is a terminal multiplexer that shows you the keybindings on screen, has sane defaults, and adds features tmux never had — like a WebAssembly plugin system.
What Zellij Actually Does
Zellij is a terminal workspace manager written in Rust. Like tmux, it lets you split your terminal into panes, create tabs, and keep sessions alive when you disconnect. Unlike tmux, Zellij is designed to be discoverable: a status bar shows available keybindings in each mode, so you never need to memorize shortcuts.
Zellij introduces features tmux doesn't have: a WASM plugin system (extend Zellij with Rust, Go, or any language that compiles to WASM), built-in floating panes, and a layout system that defines your workspace as code.
Open-source under MIT license. Single binary, zero configuration needed to start.
Quick Start
# Install
brew install zellij # macOS
cargo install zellij # From source
# Start a named session
zellij -s my-project
Key shortcuts (shown in the status bar):
Ctrl+p then d — Split pane down
Ctrl+p then r — Split pane right
Alt+n — New pane
Ctrl+t then n — New tab
Alt+[arrow] — Move between panes
Ctrl+o then d — Detach session
zellij attach — Reattach
The mode system means shortcuts are contextual — no conflicts with your shell or editor bindings.
3 Practical Use Cases
1. Layouts as Code
Define your development workspace in a KDL file:
// ~/.config/zellij/layouts/dev.kdl
layout {
tab name="code" {
pane split_direction="vertical" {
pane command="nvim" size="70%"
pane split_direction="horizontal" {
pane command="cargo" args=["watch", "-x", "check"]
pane // empty shell for git/misc
}
}
}
tab name="servers" {
pane command="cargo" args=["run"]
pane command="docker" args=["compose", "logs", "-f"]
}
tab name="db" {
pane command="psql" args=["-h", "localhost", "-U", "dev"]
}
}
Launch your entire dev environment:
zellij --layout dev
Three tabs, six panes, all running the right commands. Share this file with your team.
2. Floating Panes for Quick Tasks
Ctrl+p then w — Toggle floating pane
A floating pane appears over your current workspace — perfect for running a quick git command or checking logs without disrupting your layout. Dismiss it and your workspace is exactly as you left it.
3. WASM Plugins
Extend Zellij with custom functionality:
// A plugin that shows system resources in the status bar
use zellij_tile::prelude::*;
#[derive(Default)]
struct SystemMonitor;
impl ZellijPlugin for SystemMonitor {
fn load(&mut self, _config: BTreeMap<String, String>) {
subscribe(&[EventType::Timer]);
set_timeout(1.0); // Update every second
}
fn update(&mut self, event: Event) -> bool {
match event {
Event::Timer(_) => {
// Read /proc/loadavg or equivalent
set_timeout(1.0);
true // re-render
}
_ => false
}
}
fn render(&mut self, _rows: usize, cols: usize) {
print!("CPU: 23% | MEM: 4.2/16GB");
}
}
Compile to WASM, load in Zellij. Custom status bars, integrations, whatever you need.
Why This Matters
Terminal multiplexers are essential for any developer who SSHs into servers or runs multiple processes. tmux works but punishes you for not memorizing its shortcuts. Zellij makes the same power accessible to everyone, with discoverable UI, sane defaults, and modern features like WASM plugins and layout files.
If you've bounced off tmux, try Zellij. If you use tmux daily, try Zellij anyway — the layout system and floating panes might convert you.
Need custom data extraction or web scraping solutions? I build production-grade scrapers and data pipelines. Check out my Apify actors or email me at spinov001@gmail.com for custom projects.
Follow me for more free API discoveries every week!
Top comments (0)