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

  1. 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.
  2. 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.
  3. Client Web : Zellij intègre un serveur Web, permettant d'accéder aux sessions terminal via un navigateur, sans outil supplémentaire.
  4. 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.
  5. É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
# 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):

BASH
brew install zellij

Linux (Ubuntu/Debian):

BASH
# 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:

BASH
sudo pacman -S zellij

Fedora:

BASH
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) :

BASH
# 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

BASH
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 :

BASH
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 :

BASH
# Raccourci : Alt + f

Ou via le mode commande :

BASH
Ctrl+g → : → toggle_floating_panes

Scénarios d'utilisation typiques :

BASH
# 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é :

BASH
# Créez d'abord deux panneaux normaux, puis :
Ctrl+g → : → toggle_stack

Basculer entre les panneaux empilés :

BASH
# 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 :

BASH
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 :

BASH
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 :

BASH
# 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 :

BASH
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 :

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 :

BASH
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 :

KDL
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 :

BASH
# 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 :

BASH
zellij --server /tmp/zellij-server.sock

Ou activez-le dans le fichier de configuration :

KDL
// ~/.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 :

BASH
# 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 :

BASH
# 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) :

RUST
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 :

BASH
# 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 :

KDL
// ~/.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

BASH
# 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

BASH
# 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

BASH
# 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 :

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 :

BASH
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 :

BASH
# 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 :

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 :

KDL
// ~/.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 :

POWERSHELL
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.