Qu'est-ce que Zellij ?
Zellij est un espace de travail terminal moderne écrit en Rust, conçu comme la nouvelle génération de remplaçants pour tmux et GNU Screen. Son concept central est « batteries incluses » (batteries included) : prêt à l'emploi, sans configuration complexe, il offre des capacités puissantes de multiplexage de terminal.
Pourquoi utiliser Zellij ?
Si vous utilisez souvent le terminal pour le développement, les opérations ou la gestion système, ces scénarios vous sont sûrement familiers :
- Exécuter plusieurs services simultanément (frontend, backend, base de données) et devoir basculer entre différentes fenêtres
- Se connecter à un serveur distant via SSH, puis voir tous les processus s'interrompre lors de la déconnexion
- Vouloir sauvegarder un état de travail complexe pour le reprendre directement la prochaine fois
- Partager une session terminal avec l'équipe pour du débogage ou de la revue de code
Les solutions traditionnelles sont tmux ou GNU Screen, mais leur courbe d'apprentissage est raide, leur configuration par défaut est sommaire, et de nombreuses fonctionnalités avancées nécessitent d'écrire manuellement des fichiers de configuration.
Zellij vise à résoudre ces problèmes :
| Fonctionnalité | tmux | Zellij |
|---|---|---|
| Courbe d'apprentissage | Raide, nécessite de mémoriser de nombreux raccourcis | Douce, aide intégrée et mises en page par défaut |
| Panneaux flottants | ❌ Non pris en charge | ✅ Pris en charge nativement |
| Panneaux empilés | ❌ Non pris en charge | ✅ Pris en charge nativement |
| Client Web | ❌ Nécessite des outils tiers | ✅ Intégré |
| Restauration de session | ⚠️ Nécessite un plugin (tmux-resurrect) | ✅ Prise en charge native |
| Système de plugins | Scripts Shell | WebAssembly (Rust/n'importe quel langage) |
| Automatisation des mises en page | Nécessite des scripts shell | Configuration déclarative KDL |
| Langage de programmation | C | Rust |
Zellij vs tmux : les différences clés
- Convivialité : Zellij fournit une interface utilisateur intuitive par défaut (barre d'état, barre d'onglets), tandis que tmux nécessite une configuration manuelle pour obtenir un effet similaire.
- Panneaux flottants : Zellij permet aux panneaux de « flotter » au-dessus des autres, idéal pour surveiller des commandes (comme
top,htop) tout en travaillant sur autre chose. - Client Web : Zellij intègre un serveur Web, permettant d'accéder aux sessions terminal via un navigateur, sans outil supplémentaire.
- Résurrection de session : Après avoir fermé Zellij, vous pouvez rouvrir et restaurer tous les panneaux, commandes et historiques précédents, même après un redémarrage.
- Écosystème de plugins : Les plugins de Zellij sont basés sur WebAssembly et peuvent être écrits en Rust, Go, C ou tout autre langage compilable en WASM, offrant une sécurité accrue.
Installation de Zellij
Zellij prend en charge Linux, macOS et Windows (WSL). Voici plusieurs méthodes d'installation courantes :
Méthode 1 : Script d'installation officiel en un clic (recommandé)
# 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
Ce script détecte automatiquement votre système d'exploitation et votre architecture, puis télécharge et installe la dernière version de Zellij.
Méthode 2 : Installation via un gestionnaire de paquets
macOS (Homebrew):
brew install zellij
Linux (Ubuntu/Debian):
# Ajouter le dépôt APT
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
Méthode 3 : Compilation depuis les sources
Si vous devez compiler depuis les sources (par exemple, pour une version personnalisée) :
# Assurez-vous d'avoir installé la chaîne d'outils Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Cloner le dépôt
git clone https://github.com/zellij-org/zellij.git
cd zellij
# Compiler et installer
cargo install --path zellij
Vérification de l'installation
zellij --version
Vous devriez voir un numéro de version similaire à zellij 0.42.0.
Premiers pas : votre première session Zellij
Démarrer Zellij
Exécutez simplement dans le terminal :
zellij
Vous verrez une toute nouvelle interface, avec une barre d'onglets en haut et une barre d'état en bas. Par défaut, Zellij crée un onglet nommé "main" et un panneau terminal.
Opérations de base
Tous les raccourcis de Zellij utilisent Ctrl + g comme préfixe (appelé "mode key"). Voici les opérations courantes :
| Opération | Raccourci | Description |
|---|---|---|
| Nouveau panneau | Ctrl+g → n |
Divise le panneau actuel horizontalement |
| Nouveau panneau vertical | Ctrl+g → h |
Divise le panneau actuel verticalement |
| Changer de panneau | Ctrl+g → flèches |
Déplace le focus entre les panneaux |
| Redimensionner le panneau | Ctrl+g → r → flèches |
Entre en mode redimensionnement |
| Nouvel onglet | Ctrl+g → t |
Crée un nouvel onglet |
| Changer d'onglet | Ctrl+g → p / n |
Onglet précédent/suivant |
| Fermer le panneau | Ctrl+g → x |
Ferme le panneau actuel |
| Quitter Zellij | Ctrl+g → q |
Quitte la session actuelle |
Astuce : Appuyez sur
Ctrl+g→?pour afficher la liste complète des raccourcis à tout moment.
Panneaux flottants
Les panneaux flottants sont l'une des fonctionnalités phares de Zellij. Ils permettent à un panneau de « flotter » au-dessus des autres, sans occuper d'espace fixe dans la grille.
Activer les panneaux flottants :
# Raccourci : Alt + f
Ou via le mode commande :
Ctrl+g → : → toggle_floating_panes
Scénarios d'utilisation typiques :
# Exécuter htop dans un panneau flottant pour surveiller les ressources système
htop
# Suivre les logs dans un autre panneau flottant
tail -f /var/log/syslog
# Continuer à coder ou exécuter d'autres commandes dans le panneau principal
Les panneaux flottants peuvent être déplacés, redimensionnés, et même « épinglés » (pin) pour rester toujours au premier plan.
Panneaux empilés
Les panneaux empilés vous permettent d'empiler plusieurs panneaux verticalement, économisant ainsi de l'espace horizontal.
Créer un panneau empilé :
# Créez d'abord deux panneaux normaux, puis :
Ctrl+g → : → toggle_stack
Basculer entre les panneaux empilés :
# Utilisez les flèches haut/bas pour basculer
Les panneaux empilés sont particulièrement adaptés aux scénarios suivants : - Garder plusieurs tampons d'éditeur accessibles - Surveiller la sortie de plusieurs commandes sans occuper trop d'espace écran - Organiser l'espace de travail par tâche ou contexte
Gestion des sessions : sauvegarder et restaurer l'état de travail
Gestionnaire de sessions
Zellij intègre une puissante fonctionnalité de gestion des sessions, vous permettant de basculer facilement entre plusieurs environnements de travail.
Ouvrir le gestionnaire de sessions :
Ctrl+g → w
Cela affiche une interface visuelle de sélection de session, où vous pouvez : - Voir toutes les sessions en cours d'exécution - Créer une nouvelle session (avec un nom personnalisé) - Basculer vers une session en arrière-plan - Restaurer une session précédemment quittée
Écran de bienvenue
Lors du premier lancement de Zellij, vous pouvez utiliser l'écran de bienvenue pour démarrer rapidement :
zellij -l welcome
L'écran de bienvenue propose une interface semblable à un « menu démarrer », permettant de : - Sélectionner visuellement une session - Créer une nouvelle session - Restaurer une session précédemment quittée
Résurrection de session (Session Resurrection)
C'est l'une des fonctionnalités les plus uniques de Zellij : même si vous fermez Zellij ou redémarrez votre ordinateur, vous pouvez restaurer l'état de travail complet la prochaine fois que vous l'ouvrez, y compris :
- La disposition et la taille de tous les panneaux
- Les commandes exécutées dans chaque panneau
- L'historique de défilement
- Les variables d'environnement et le répertoire de travail
Comment restaurer :
# Démarrez normalement Zellij, puis sélectionnez la session à restaurer via le gestionnaire de sessions
zellij
Ctrl+g → w → sélectionnez la session précédemment quittée
Ou spécifiez directement au démarrage :
zellij attach <nom-de-session>
Ceci est très utile pour les tâches de longue durée (comme la compilation, les tests, le traitement de données) — même en cas de déconnexion accidentelle ou de redémarrage, vous pouvez reprendre le travail sans interruption.
Automatisation des mises en page : définissez votre environnement de développement
Le système de mise en page de Zellij vous permet de définir de manière déclarative tout l'environnement de développement en utilisant KDL (un format de configuration lisible par l'homme).
Qu'est-ce qu'une mise en page ?
Une mise en page est un fichier .kdl qui décrit :
- Le nombre d'onglets
- Les panneaux dans chaque onglet
- La commande exécutée dans chaque panneau
- La taille et la position des panneaux
- L'utilisation de panneaux flottants ou empilés
Exemple de mise en page simple
Créez un fichier nommé 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"]
}
}
Utiliser la mise en page :
zellij --layout my-project.kdl
Cela automatiquement :
1. Crée deux onglets : "Backend" et "Database"
2. Dans l'onglet "Backend", divise verticalement en deux panneaux, exécutant respectivement cargo run et npm run dev
3. Dans l'onglet "Database", exécute le client PostgreSQL
Panneaux de commande (Command Panes)
Les panneaux de commande sont une fonctionnalité unique de Zellij, traitant les commandes comme des « citoyens de première classe », plutôt que de simples sorties terminal.
Caractéristiques : - Vous pouvez voir le code de sortie de la commande - Appuyez sur Entrée pour relancer la commande - Peut être défini en état « suspendu », déclenché manuellement selon les besoins - Idéal pour construire des commandes, exécuter des tests, lancer des serveurs de développement
Utiliser les panneaux de commande dans une mise en page :
layout {
tab name="Dev" {
pane command="cargo" args=["test"] start_suspended=true
pane command="cargo" args=["build"] start_suspended=true
}
}
start_suspended=true signifie que la commande ne s'exécute pas automatiquement, vous devez appuyer manuellement sur Entrée pour la déclencher. Ceci est très utile pour les opérations gourmandes en ressources (comme la compilation complète), évitant l'exécution automatique à chaque démarrage de la mise en page.
Panneaux d'édition
Zellij vous permet d'ouvrir le tampon de défilement de n'importe quel panneau directement dans votre $EDITOR :
# Dans le panneau actuel, appuyez sur :
Ctrl+s → e
Cela ouvre toute la sortie du panneau actuel dans votre éditeur configuré (vim, neovim, emacs, etc.), vous permettant de : - Rechercher, copier, organiser la sortie du terminal - Enregistrer la sortie dans un fichier - Partager avec les membres de l'équipe
Client Web : accédez au terminal depuis le navigateur
Zellij intègre un serveur Web, vous permettant d'accéder directement aux sessions terminal via un navigateur. Cela signifie : - Pas besoin d'installer un terminal : accédez à vos sessions Zellij depuis n'importe quel appareil disposant d'un navigateur - Collaboration à distance : partagez des sessions avec l'équipe pour la programmation en binôme ou le débogage - Basculement fluide : basculez librement entre le terminal et le navigateur, l'état de la session reste cohérent
Activer le client Web
Démarrez Zellij en activant le serveur Web :
zellij --server /tmp/zellij-server.sock
Ou activez-le dans le fichier de configuration :
// ~/.config/zellij/config.kdl
plugins {
path "/usr/lib/zellij/plugins"
}
keybinds {
shared {
bind "Alt w" { SwitchToMode "WebClient"; }
}
}
Accéder à la session
Ouvrez dans le navigateur :
http://localhost:8082
Vous pouvez :
- Voir toutes les sessions en cours d'exécution
- Accéder directement à une session spécifique via l'URL : http://localhost:8082/my-session
- Créer des jetons en lecture seule, permettant à d'autres de voir mais pas d'opérer votre session
Accès distant
Zellij prend en charge l'accès distant aux sessions via HTTPS :
# Attacher à une session distante depuis une autre machine
zellij attach https://my-server:8082/my-session
Cela ne nécessite ni tunnel SSH ni outil tiers, idéal pour : - Le débogage à distance - La programmation en binôme - Le support technique
Système de plugins : étendez les fonctionnalités avec WebAssembly
L'interface de Zellij est elle-même constituée de plugins, y compris : - Barre d'onglets (Tab Bar) - Barre d'état (Status Bar) - Gestionnaire de sessions (Session Manager) - Écran de bienvenue (Welcome Screen) - Sélecteur de fichiers (Strider)
Développer votre propre plugin
Les plugins Zellij sont basés sur WebAssembly (WASM) et peuvent être écrits dans n'importe quel langage compilable en WASM (Rust, Go, C, etc.). Rust bénéficie d'un support de première classe et d'un SDK dédié.
Créer un plugin Rust simple :
# Installer l'outil d'échafaudage de plugin Zellij
cargo install zellij-plugin-template
# Créer un nouveau projet
zellij-plugin-template my-plugin
cd my-plugin
Structure du projet généré :
my-plugin/
├── Cargo.toml
├── src/
│ └── main.rs
└── plugin.yaml
Exemple de code de plugin (src/main.rs) :
use zellij_sdk::{prelude::*, Command};
#[command(name = "my-plugin")]
fn main() {
// S'abonner aux événements Zellij
subscribe(&[EventType::KeyPress(Key::Char('x'))]);
loop {
match std::io::stdin().read_line() {
Ok(line) => {
if line.contains("KeyPress") {
// Traiter l'événement de touche
println!("Received key press!");
}
}
Err(_) => break,
}
}
}
Compiler et installer :
# Compiler en WASM
cargo build --target wasm32-wasip1 --release
# Copier dans le répertoire des plugins Zellij
cp target/wasm32-wasip1/release/my_plugin.wasm ~/.local/share/zellij/plugins/
Charger le plugin dans la configuration :
// ~/.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"
}
}
Plugins communautaires populaires
- Strider : Navigation dynamique dans le système de fichiers, prenant en charge la recherche floue
- Configuration Screen : Gestion interactive de la configuration
- Multiple Pane Select : Opérations par lots sur plusieurs panneaux
Vous pouvez trouver plus de plugins communautaires dans le dépôt de plugins Zellij.
Scripting avancé : contrôle via CLI
Zellij expose une interface de contrôle complète via des commandes CLI, vous permettant de construire des flux de travail terminal complexes à partir de scripts shell ou d'outils externes.
Panneaux bloquants conditionnels
# Bloquer jusqu'à ce que la commande quitte avec succès
zellij action new-pane --command "cargo test" --block-until-exit-success
# Bloquer jusqu'à ce que la commande quitte avec échec
zellij action new-pane --command "npm run build" --block-until-exit-failure
# Bloquer jusqu'à ce que la commande quitte (succès ou échec)
zellij action new-pane --command "make" --block-until-exit
Les commandes ayant échoué peuvent être relancées de manière interactive, sans perdre la position dans le script.
Flux de sortie de panneau en temps réel
# Diffuser la sortie de n'importe quel panneau en temps réel vers stdout
zellij subscribe pane-id-123
# Utiliser le format JSON pour un traitement structuré
zellij subscribe pane-id-123 --json
Ceci est très utile pour surveiller les logs de serveurs distants ou construire des pipelines d'automatisation.
Requête d'état structurée
# Lister tous les panneaux (format JSON)
zellij list-panes --json
# Lister tous les onglets
zellij list-tabs --json
# Obtenir les informations de la session actuelle
zellij session-info
Ces commandes peuvent être intégrées dans vos pipelines CI/CD, scripts de surveillance ou tableaux de bord personnalisés.
Cas pratiques : construire un flux de travail de développeur
Cas 1 : Environnement de développement full-stack
Créez un fichier de mise en page 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"]
}
}
Démarrer :
zellij --layout fullstack-dev.kdl
Cette mise en page automatiquement : 1. Crée 4 onglets, respectivement pour le frontend, le backend, la base de données et la surveillance 2. Dans l'onglet frontend, divise verticalement pour exécuter le serveur de développement et Storybook 3. Dans l'onglet backend, divise horizontalement pour exécuter l'application et le moniteur de tests 4. Dans l'onglet base de données, démarre Docker Compose et le client PostgreSQL 5. Dans l'onglet surveillance, affiche de manière flottante htop et le suivi des logs
Cas 2 : Débogage sur serveur distant
Supposons que vous deviez déboguer un problème sur un serveur distant :
# SSH vers le serveur distant
ssh user@remote-server
# Démarrer une session Zellij
zellij -s debugging-session
# Voir les logs dans le premier panneau
tail -f /var/log/app/error.log
# Nouveau panneau, exécuter des commandes de diagnostic
Ctrl+g → n
dmesg | tail -20
# Nouveau panneau flottant, surveiller les ressources système
Ctrl+g → Alt+f
htop
# Activer le client Web, permettre aux collègues de voir à distance
# (nécessite une configuration préalable du serveur Web)
Ensuite, dites à vos collègues d'accéder à https://remote-server:8082/debugging-session, ils peuvent voir votre session terminal en temps réel, et même aider à opérer (si les permissions d'écriture sont accordées).
Cas 3 : Flux de travail data science
Créez une mise en page pour un projet data science 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"]
}
}
Questions fréquentes et dépannage
Q1 : Zellij et tmux peuvent-ils être utilisés simultanément ?
R : Oui, mais ce n'est pas recommandé de les utiliser en imbriqué. Vous pouvez exécuter Zellij dans tmux, ou tmux dans Zellij, mais cela entraînera des conflits de raccourcis et des problèmes de performance. Il est conseillé de choisir l'un comme principal multiplexeur de terminal.
Q2 : Comment migrer la configuration tmux vers Zellij ?
R : Zellij n'a pas de convertisseur de configuration tmux direct, mais vous pouvez : 1. Consulter le fichier de configuration par défaut de Zellij 2. Mapper les fonctions courantes de tmux aux équivalents de Zellij 3. Utiliser le système de mise en page de Zellij pour remplacer les scripts tmux
Q3 : Quelles sont les performances de Zellij ?
R : Zellij est écrit en Rust, avec d'excellentes performances. Dans la plupart des scénarios, son occupation mémoire et son utilisation CPU sont comparables à tmux, voire meilleures dans certains benchmarks. Pour les grandes sessions (des dizaines de panneaux), la réactivité de Zellij reste fluide.
Q4 : Comment utiliser la souris dans Zellij ?
R : Zellij prend en charge les opérations de souris par défaut : - Cliquer sur un panneau pour changer le focus - Faire glisser les limites du panneau pour redimensionner - Faire défiler la molette de la souris pour parcourir l'historique - Cliquer sur les onglets pour basculer
Si la souris ne fonctionne pas, vérifiez si le support de la souris est activé dans l'émulateur de terminal, ou confirmez dans la configuration de Zellij :
// ~/.config/zellij/config.kdl
mouse_mode true
Q5 : Zellij prend-il en charge Windows ?
R : Zellij prend en charge nativement Windows (via WSL2 ou PowerShell). Vous pouvez utiliser le script d'installation officiel en un clic pour installer sur Windows :
irm https://zellij.dev/launch.ps1 | iex
Résumé
Zellij est un espace de travail terminal moderne, qui hérite des fonctionnalités puissantes de tmux, tout en offrant une expérience utilisateur plus conviviale et des caractéristiques innovantes :
Avantages clés : - ✅ Prêt à l'emploi : Pas de configuration complexe, interface utilisateur intuitive par défaut - ✅ Panneaux flottants/empilés : Gestion flexible des panneaux, adaptée au multitâche - ✅ Résurrection de session : Restaure l'état de travail complet même après un redémarrage - ✅ Client Web : Accédez au terminal via le navigateur, supporte la collaboration à distance - ✅ Système de plugins : Basé sur WebAssembly, sécurisé et extensible - ✅ Automatisation des mises en page : Définissez l'environnement de développement de manière déclarative avec KDL - ✅ Scripting CLI : Interface de contrôle complète, adaptée aux flux de travail automatisés
Public cible : - Développeurs : Besoin d'exécuter simultanément plusieurs services, outils de test et de surveillance - Ingénieurs DevOps : Besoin de gérer des serveurs distants et des tâches de longue durée - Data Scientists : Besoin d'organiser Jupyter Notebook, le traitement de données et les flux de visualisation - Collaboration d'équipe : Besoin de partager des sessions terminal pour la programmation en binôme ou le débogage
Prochaines étapes : - Lire la documentation officielle de Zellij - Explorer les plugins communautaires - Rejoindre la communauté Discord ou Matrix
Si vous cherchez une alternative moderne à tmux, Zellij vaut vraiment la peine d'être essayé. Sa courbe d'apprentissage est douce, ses fonctionnalités sont puissantes, et il peut considérablement améliorer votre efficacité de travail dans le terminal.