Was ist Zellij?
Zellij ist ein moderner Terminal-Workspace, geschrieben in Rust. Er positioniert sich als Next-Generation-Alternative zu tmux und GNU Screen. Das Kernkonzept lautet „Batteries included" – also sofort einsatzbereit. Du erhältst leistungsstarke Terminal-Multiplexing-Funktionen ohne aufwendige Konfiguration.
Warum brauchst du Zellij?
Wenn du regelmäßig mit dem Terminal arbeitest – sei es für Entwicklung, DevOps oder Systemadministration – kennst du sicher folgende Situationen:
- Du führst mehrere Dienste gleichzeitig aus (Frontend, Backend, Datenbank) und musst ständig zwischen verschiedenen Fenstern wechseln.
- Nach einer SSH-Verbindung zu einem Remote-Server werden alle Prozesse unterbrochen, sobald die Verbindung abbricht.
- Du möchtest einen komplexen Arbeitszustand speichern und beim nächsten Mal direkt dort weitermachen.
- Für die Teamarbeit musst du Terminal-Sessions teilen, um gemeinsam zu debuggen oder Code zu reviewen.
Die klassischen Lösungen sind tmux oder GNU Screen. Doch beide haben eine steile Lernkurve. Die Standardkonfiguration ist spartanisch. Viele erweiterte Funktionen erfordern manuell geschriebene Konfigurationsdateien.
Zellij zielt darauf ab, genau diese Schmerzpunkte zu lösen:
| Feature | tmux | Zellij |
|---|---|---|
| Lernkurve | Steil, viele Shortcuts auswendig lernen | Flach, integrierte Hilfe und Standard-Layouts |
| Schwebende Panels | ❌ Nicht unterstützt | ✅ Nativ unterstützt |
| Gestapelte Panels | ❌ Nicht unterstützt | ✅ Nativ unterstützt |
| Web-Client | ❌ Drittanbieter-Tools nötig | ✅ Eingebaut |
| Session-Wiederherstellung | ⚠️ Plugin erforderlich (tmux-resurrect) | ✅ Nativ unterstützt |
| Plugin-System | Shell-Skripte | WebAssembly (Rust/jede Sprache) |
| Layout-Automatisierung | Shell-Skripte schreiben | KDL-deklarative Konfiguration |
| Programmiersprache | C | Rust |
Zellij vs. tmux: Die wichtigsten Unterschiede
- Benutzerfreundlichkeit: Zellij bietet standardmäßig eine intuitive Benutzeroberfläche (Statusleiste, Tabs). Bei tmux musst du erst konfigurieren, um Ähnliches zu erreichen.
- Schwebende Panels: Zellij erlaubt es, Panels über anderen Panels „schweben" zu lassen. Ideal für Überwachungsbefehle wie
topoderhtop, während du parallel andere Arbeiten erledigst. - Web-Client: Zellij hat einen eingebauten Webserver. Du kannst deine Terminal-Session über den Browser aufrufen – ganz ohne Zusatztools.
- Session-Resurrection: Schließe Zellij und öffne es später wieder. Alle Panels, Befehle und der Verlauf werden wiederhergestellt. Sogar nach einem Neustart des Systems.
- Plugin-Ökosystem: Zellij-Plugins basieren auf WebAssembly. Du kannst sie in Rust, Go, C oder jeder anderen Sprache schreiben, die zu WASM kompiliert werden kann. Das ist sicherer.
Zellij installieren
Zellij läuft unter Linux, macOS und Windows (WSL). Hier sind die gängigsten Installationsmethoden:
Methode 1: Offizielles One-Click-Installations-Skript (empfohlen)
# Bash/Zsh
bash <(curl -L https://zellij.dev/launch)
# Fish
bash (curl -L https://zellij.dev/launch | psub)
# PowerShell
irm https://zellij.dev/launch.ps1 | iex
Das Skript erkennt automatisch dein Betriebssystem und deine Architektur. Es lädt die neueste Version von Zellij herunter und installiert sie.
Methode 2: Installation über Paketmanager
macOS (Homebrew):
brew install zellij
Linux (Ubuntu/Debian):
# APT-Repository hinzufügen
echo "deb [trusted=yes] https://dl.cloudsmith.io/public/zellij-org/releases/deb/debian any-version main" | sudo tee /etc/apt/sources.list.d/zellij.list
sudo apt update
sudo apt install zellij
Arch Linux:
sudo pacman -S zellij
Fedora:
sudo dnf install zellij
Methode 3: Kompilieren aus dem Quellcode
Falls du eine benutzerdefinierte Version benötigst:
# Stelle sicher, dass die Rust-Toolchain installiert ist
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Repository klonen
git clone https://github.com/zellij-org/zellij.git
cd zellij
# Kompilieren und installieren
cargo install --path zellij
Installation überprüfen
zellij --version
Die Ausgabe sollte ähnlich aussehen wie zellij 0.42.0.
Schnellstart: Deine erste Zellij-Session
Zellij starten
Führe im Terminal einfach Folgendes aus:
zellij
Du siehst sofort eine neue Oberfläche. Oben befindet sich die Tab-Leiste, unten die Statusleiste. Standardmäßig erstellt Zellij einen Tab namens „main" und ein Terminal-Panel.
Grundlegende Bedienung
Alle Zellij-Shortcuts beginnen mit Strg + g (der sogenannte „Mode Key"). Hier sind die häufigsten Aktionen:
| Aktion | Shortcut | Beschreibung |
|---|---|---|
| Neues Panel | Strg+g → n |
Teilt das aktuelle Panel horizontal |
| Neues vertikales Panel | Strg+g → h |
Teilt das aktuelle Panel vertikal |
| Panel wechseln | Strg+g → Pfeiltasten |
Fokus zwischen Panels verschieben |
| Panelgröße anpassen | Strg+g → r → Pfeiltasten |
Resize-Modus aktivieren |
| Neuer Tab | Strg+g → t |
Erstellt einen neuen Tab |
| Tabs wechseln | Strg+g → p / n |
Vorheriger/nächster Tab |
| Panel schließen | Strg+g → x |
Aktuelles Panel schließen |
| Zellij beenden | Strg+g → q |
Aktuelle Session verlassen |
Tipp: Drücke
Strg+g→?, um jederzeit die vollständige Shortcut-Liste anzuzeigen.
Schwebende Panels
Schwebende Panels sind eines der Highlight-Features von Zellij. Ein Panel „schwebt" über anderen Panels und belegt keinen festen Platz im Raster.
Schwebende Panels aktivieren:
# Shortcut: Alt + f
Oder über den Befehlsmodus:
Strg+g → : → toggle_floating_panes
Typische Anwendungsfälle:
# Führe htop in einem schwebenden Panel aus, um Systemressourcen zu überwachen
htop
# In einem anderen schwebenden Panel Logs verfolgen
tail -f /var/log/syslog
# Im Hauptpanel weiterhin Code schreiben oder andere Befehle ausführen
Schwebende Panels können verschoben und in der Größe angepasst werden. Du kannst sie sogar „anheften" (pin), damit sie immer im Vordergrund bleiben.
Gestapelte Panels
Gestapelte Panels ermöglichen es, mehrere Panels vertikal übereinander zu stapeln. Das spart horizontalen Bildschirmplatz.
Gestapeltes Panel erstellen:
# Erstelle zuerst zwei normale Panels, dann:
Strg+g → : → toggle_stack
Zwischen gestapelten Panels wechseln:
# Mit den Pfeiltasten nach oben/unten navigieren
Gestapelte Panels eignen sich besonders für: - Mehrere Editor-Puffer griffbereit halten - Mehrere Befehlsausgaben überwachen, ohne viel Bildschirmplatz zu verbrauchen - Arbeitsbereiche nach Aufgaben oder Kontext organisieren
Session-Management: Arbeitszustände speichern und wiederherstellen
Session-Manager
Zellij verfügt über eine leistungsstarke Session-Management-Funktion. Du kannst mühelos zwischen verschiedenen Arbeitsumgebungen wechseln.
Session-Manager öffnen:
Strg+g → w
Es erscheint eine visuelle Auswahl aller Sessions. Du kannst: - Alle laufenden Sessions anzeigen - Neue Sessions mit benutzerdefinierten Namen erstellen - Zu Hintergrund-Sessions wechseln - Zuvor beendete Sessions wiederherstellen
Willkommensbildschirm
Beim ersten Start von Zellij kannst du den Willkommensbildschirm nutzen:
zellij -l welcome
Der Willkommensbildschirm bietet eine Art „Startmenü". Dort kannst du: - Sessions visuell auswählen - Neue Sessions erstellen - Zuvor beendete Sessions wiederherstellen
Session-Resurrection
Dies ist eine der einzigartigsten Funktionen von Zellij: Selbst wenn du Zellij schließt oder deinen Computer neu startest, kannst du beim nächsten Öffnen deinen gesamten Arbeitszustand wiederherstellen. Dazu gehören:
- Layout und Größe aller Panels
- Die in jedem Panel ausgeführten Befehle
- Der Scroll-Verlauf
- Umgebungsvariablen und Arbeitsverzeichnisse
So stellst du eine Session wieder her:
# Zellij normal starten und dann über den Session-Manager die gewünschte Session auswählen
zellij
Strg+g → w → Wähle die zuvor beendete Session
Oder direkt beim Start angeben:
zellij attach <session-name>
Das ist extrem nützlich für lang laufende Tasks wie Kompilierungen, Tests oder Datenverarbeitung. Selbst bei unerwarteten Verbindungsabbrüchen oder Neustarts kannst du nahtlos weiterarbeiten.
Layout-Automatisierung: Definiere deine Entwicklungsumgebung
Mit dem Layout-System von Zellij kannst du deine gesamte Entwicklungsumgebung deklarativ mit KDL definieren. KDL ist ein menschenlesbares Konfigurationsformat.
Was ist ein Layout?
Ein Layout ist eine .kdl-Datei. Sie beschreibt:
- Wie viele Tabs es gibt
- Welche Panels sich in jedem Tab befinden
- Welche Befehle in jedem Panel ausgeführt werden
- Größe und Position der Panels
- Ob schwebende oder gestapelte Panels verwendet werden
Einfaches Layout-Beispiel
Erstelle eine Datei namens my-project.kdl:
layout {
tab name="Backend" {
pane split_direction="Vertical" {
pane command="cargo" args=["run"]
pane command="npm" args=["run", "dev"]
}
}
tab name="Database" {
pane command="psql" args=["-U", "postgres", "-d", "mydb"]
}
}
Layout verwenden:
zellij --layout my-project.kdl
Das führt automatisch Folgendes aus:
1. Zwei Tabs erstellen: „Backend" und „Database"
2. Im Tab „Backend" vertikal in zwei Panels aufteilen. Diese führen cargo run bzw. npm run dev aus.
3. Im Tab „Database" den PostgreSQL-Client starten.
Command Panes
Command Panes sind ein besonderes Feature von Zellij. Sie behandeln Befehle als „First-Class-Citizens" – nicht nur als einfache Terminalausgabe.
Eigenschaften: - Du siehst den Exit-Code des Befehls - Drücke Enter, um den Befehl erneut auszuführen - Befehle können im „suspendierten" Zustand gestartet und bei Bedarf manuell ausgelöst werden - Ideal zum Bauen, Testen oder Starten von Entwicklungsservern
Command Panes im Layout verwenden:
layout {
tab name="Dev" {
pane command="cargo" args=["test"] start_suspended=true
pane command="cargo" args=["build"] start_suspended=true
}
}
start_suspended=true bedeutet, dass der Befehl nicht automatisch startet. Du musst Enter drücken, um ihn auszulösen. Das ist praktisch für ressourcenintensive Vorgänge wie vollständige Kompilierungen. So vermeidest du, dass sie bei jedem Layout-Start automatisch ausgeführt werden.
Editier-Panels
Zellij ermöglicht es, den gesamten Scroll-Puffer eines Panels direkt in deinem $EDITOR zu öffnen:
# Im aktuellen Panel drücken:
Strg+s → e
Dein konfigurierter Editor (vim, neovim, emacs etc.) öffnet sich mit der kompletten Ausgabe des Panels. Du kannst: - Terminalausgaben durchsuchen, kopieren und整理 - Ausgaben als Dateien speichern - Sie mit Teammitgliedern teilen
Web-Client: Terminal im Browser aufrufen
Zellij hat einen eingebauten Webserver. Damit kannst du deine Terminal-Sessions direkt über den Browser aufrufen. Das bedeutet: - Keine Terminal-Installation nötig: Greife von jedem Gerät mit Browser auf deine Zellij-Session zu. - Remote-Zusammenarbeit: Teile Sessions mit Teammitgliedern für Pair Programming oder Debugging. - Nahtloses Wechseln: Wechsle frei zwischen Terminal und Browser. Der Session-Status bleibt synchron.
Web-Client aktivieren
Starte Zellij mit aktiviertem Webserver:
zellij --server /tmp/zellij-server.sock
Oder aktiviere es in der Konfigurationsdatei:
// ~/.config/zellij/config.kdl
plugins {
path "/usr/lib/zellij/plugins"
}
keybinds {
shared {
bind "Alt w" { SwitchToMode "WebClient"; }
}
}
Session aufrufen
Öffne im Browser:
http://localhost:8082
Du kannst:
- Alle laufenden Sessions anzeigen
- Bestimmte Sessions direkt über die URL aufrufen: http://localhost:8082/my-session
- Nur-Lese-Token erstellen, damit andere deine Session sehen, aber nicht bedienen können
Remote-Zugriff
Zellij unterstützt den Remote-Zugriff auf Sessions über HTTPS:
# Von einem anderen Rechner aus an eine Remote-Session anhängen
zellij attach https://my-server:8082/my-session
Dafür sind keine SSH-Tunnel oder Drittanbieter-Tools erforderlich. Ideal für: - Remote-Debugging - Pair Programming - Technischen Support
Plugin-System: Funktionen mit WebAssembly erweitern
Die gesamte Oberfläche von Zellij besteht aus Plugins. Dazu gehören: - Tab-Leiste (Tab Bar) - Statusleiste (Status Bar) - Session-Manager (Session Manager) - Willkommensbildschirm (Welcome Screen) - Dateiauswahl (Strider)
Eigene Plugins entwickeln
Zellij-Plugins basieren auf WebAssembly (WASM). Du kannst sie in jeder Sprache schreiben, die zu WASM kompiliert werden kann (Rust, Go, C etc.). Rust wird erstklassig unterstützt und verfügt über ein eigenes SDK.
Ein einfaches Rust-Plugin erstellen:
# Zellij-Plugin-Scaffolding-Tool installieren
cargo install zellij-plugin-template
# Neues Projekt erstellen
zellij-plugin-template my-plugin
cd my-plugin
Die generierte Projektstruktur:
my-plugin/
├── Cargo.toml
├── src/
│ └── main.rs
└── plugin.yaml
Beispiel-Plugin-Code (src/main.rs):
use zellij_sdk::{prelude::*, Command};
#[command(name = "my-plugin")]
fn main() {
// Zellij-Ereignisse abonnieren
subscribe(&[EventType::KeyPress(Key::Char('x'))]);
loop {
match std::io::stdin().read_line() {
Ok(line) => {
if line.contains("KeyPress") {
// Tastendruck verarbeiten
println!("Received key press!");
}
}
Err(_) => break,
}
}
}
Kompilieren und installieren:
# Zu WASM kompilieren
cargo build --target wasm32-wasip1 --release
# In das Zellij-Plugin-Verzeichnis kopieren
cp target/wasm32-wasip1/release/my_plugin.wasm ~/.local/share/zellij/plugins/
Plugin in der Konfiguration laden:
// ~/.config/zellij/config.kdl
plugins {
path "~/.local/share/zellij/plugins"
}
pane_templates {
template name="my-plugin-pane" {
plugin location="file:~/.local/share/zellij/plugins/my_plugin.wasm"
}
}
Beliebte Community-Plugins
- Strider: Dynamische Dateisystem-Navigation mit Fuzzy-Suche
- Configuration Screen: Interaktive Konfigurationsverwaltung
- Multiple Pane Select: Batch-Operationen für mehrere Panels
Weitere Community-Plugins findest du im Zellij-Plugin-Repository.
Erweiterte Skripting: CLI-Steuerung
Zellij stellt eine vollständige Steuerungsschnittstelle über CLI-Befehle bereit. So kannst du komplexe Terminal-Workflows aus Shell-Skripten oder externen Tools heraus bauen.
Blockierende Panels mit Bedingungen
# Blockieren, bis der Befehl erfolgreich beendet wurde
zellij action new-pane --command "cargo test" --block-until-exit-success
# Blockieren, bis der Befehl mit Fehler beendet wurde
zellij action new-pane --command "npm run build" --block-until-exit-failure
# Blockieren, bis der Befehl beendet wurde (egal ob Erfolg oder Fehler)
zellij action new-pane --command "make" --block-until-exit
Fehlgeschlagene Befehle können interaktiv wiederholt werden, ohne dass das Skript seine Position verliert.
Echtzeit-Panel-Ausgabe streamen
# Ausgabe eines beliebigen Panels in Echtzeit nach stdout streamen
zellij subscribe pane-id-123
# JSON-Format für strukturierte Verarbeitung verwenden
zellij subscribe pane-id-123 --json
Das ist nützlich, um Logs auf Remote-Servern zu überwachen oder automatisierte Pipelines zu erstellen.
Strukturierte Statusabfragen
# Alle Panels auflisten (JSON-Format)
zellij list-panes --json
# Alle Tabs auflisten
zellij list-tabs --json
# Aktuelle Session-Informationen abrufen
zellij session-info
Diese Befehle lassen sich in CI/CD-Pipelines, Überwachungsskripte oder eigene Dashboards integrieren.
Praxisbeispiele: Entwickler-Workflows bauen
Beispiel 1: Full-Stack-Entwicklungsumgebung
Erstelle eine Layout-Datei fullstack-dev.kdl:
layout {
tab name="Frontend" {
pane split_direction="Vertical" {
pane command="npm" args=["run", "dev"]
pane command="npm" args=["run", "storybook"]
}
}
tab name="Backend" {
pane split_direction="Horizontal" {
pane command="cargo" args=["run"]
pane command="cargo" args=["watch", "-x", "test"] start_suspended=true
}
}
tab name="Database" {
pane command="docker" args=["compose", "up"]
pane command="psql" args=["-U", "postgres", "-d", "myapp"]
}
tab name="Monitoring" {
pane floating=true command="htop"
pane floating=true command="tail" args=["-f", "/var/log/app.log"]
}
}
Starten:
zellij --layout fullstack-dev.kdl
Dieses Layout erstellt automatisch: 1. Vier Tabs: Frontend, Backend, Datenbank und Monitoring 2. Im Frontend-Tab vertikale Aufteilung für Dev-Server und Storybook 3. Im Backend-Tab horizontale Aufteilung für App und Test-Watcher 4. Im Datenbank-Tab Docker Compose und PostgreSQL-Client 5. Im Monitoring-Tab schwebende Panels für htop und Log-Tracking
Beispiel 2: Remote-Server-Debugging
Angenommen, du musst ein Problem auf einem Remote-Server debuggen:
# Per SSH zum Remote-Server verbinden
ssh user@remote-server
# Zellij-Session starten
zellij -s debugging-session
# Im ersten Panel Logs anzeigen
tail -f /var/log/app/error.log
# Neues Panel erstellen, Diagnosebefehle ausführen
Strg+g → n
dmesg | tail -20
# Schwebendes Panel erstellen, Systemressourcen überwachen
Strg+g → Alt+f
htop
# Web-Client aktivieren, damit Kollegen remote zuschauen können
# (Webserver muss vorher konfiguriert sein)
Teile dann deinem Kollegen die URL https://remote-server:8082/debugging-session mit. Er kann deine Terminal-Session in Echtzeit sehen und sogar mitarbeiten (wenn du Schreibrechte erteilst).
Beispiel 3: Data-Science-Workflow
Erstelle ein Layout für ein Data-Science-Projekt data-science.kdl:
layout {
tab name="Notebook" {
pane command="jupyter" args=["lab", "--no-browser"]
}
tab name="Data Processing" {
pane split_direction="Vertical" {
pane command="python" args=["process_data.py"]
pane command="watch" args=["-n", "5", "ls", "-lh", "output/"]
}
}
tab name="Visualization" {
pane command="python" args=["visualize.py"]
pane floating=true command="eog" args=["output/chart.png"]
}
}
Häufige Fragen und Fehlerbehebung
F1: Können Zellij und tmux gleichzeitig verwendet werden?
A: Ja, aber es wird nicht empfohlen, sie ineinander verschachtelt zu verwenden. Du kannst Zellij in tmux oder tmux in Zellij ausführen. Das führt jedoch zu Shortcut-Konflikten und Performance-Problemen. Entscheide dich besser für einen der beiden als primären Terminal-Multiplexer.
F2: Wie migriere ich meine tmux-Konfiguration zu Zellij?
A: Zellij hat keinen direkten tmux-Konfigurationskonverter. Aber du kannst: 1. Die Standard-Konfigurationsdatei von Zellij als Referenz nutzen. 2. Häufig genutzte tmux-Funktionen auf entsprechende Zellij-Funktionen abbilden. 3. Das Zellij-Layout-System anstelle von tmux-Skripten verwenden.
F3: Wie ist die Performance von Zellij?
A: Zellij ist in Rust geschrieben und bietet exzellente Performance. In den meisten Szenarien sind Speicherverbrauch und CPU-Auslastung vergleichbar mit tmux. In einigen Benchmarks schneidet Zellij sogar besser ab. Auch bei großen Sessions mit Dutzenden von Panels bleibt die Reaktionsgeschwindigkeit flüssig.
F4: Wie verwende ich die Maus in Zellij?
A: Zellij unterstützt Mausoperationen standardmäßig: - Klicke auf Panels, um den Fokus zu wechseln - Ziehe Panel-Grenzen, um die Größe anzupassen - Scrolle mit dem Mausrad durch den Verlauf - Klicke auf Tabs, um zu wechseln
Falls die Maus nicht funktioniert, prüfe, ob dein Terminal-Emulator die Mausunterstützung aktiviert hat. Oder bestätige in der Zellij-Konfiguration:
// ~/.config/zellij/config.kdl
mouse_mode true
F5: Unterstützt Zellij Windows?
A: Ja, Zellij unterstützt Windows nativ (über WSL2 oder PowerShell). Du kannst das offizielle One-Click-Installations-Skript unter Windows verwenden:
irm https://zellij.dev/launch.ps1 | iex
Fazit
Zellij ist ein moderner Terminal-Workspace. Er übernimmt die starken Funktionen von tmux und bietet gleichzeitig eine freundlichere Benutzererfahrung sowie innovative Features:
Kernvorteile: - ✅ Sofort einsatzbereit: Keine komplexe Konfiguration nötig, intuitive UI ab Werk - ✅ Schwebende/gestapelte Panels: Flexibles Panel-Management für Multitasking - ✅ Session-Resurrection: Vollständiger Arbeitszustand wird auch nach Neustart wiederhergestellt - ✅ Web-Client: Terminal über Browser aufrufen, Remote-Zusammenarbeit möglich - ✅ Plugin-System: Basierend auf WebAssembly, sicher und erweiterbar - ✅ Layout-Automatisierung: Entwicklungsumgebungen deklarativ mit KDL definieren - ✅ CLI-Skripting: Vollständige Steuerungsschnittstelle für Automatisierungs-Workflows
Geeignet für: - Entwickler: Müssen mehrere Dienste, Tests und Monitoring-Tools parallel ausführen - DevOps-Ingenieure: Verwalten Remote-Server und lang laufende Tasks - Data Scientists: Organisieren Jupyter Notebooks, Datenverarbeitung und Visualisierungs-Workflows - Teamarbeit: Teilen Terminal-Sessions für Pair Programming oder Debugging
Nächste Schritte: - Lies die offizielle Zellij-Dokumentation - Entdecke Community-Plugins - Tritt der Discord oder Matrix Community bei
Wenn du auf der Suche nach einer modernen Alternative zu tmux bist, ist Zellij definitiv einen Versuch wert. Die Lernkurve ist flach, die Funktionen sind leistungsstark. Deine Produktivität im Terminal wird sich deutlich steigern.