lumen : relire un diff git dans le terminal, avec ou sans IA
Beautiful git diff viewer, generate commits with AI, get summary of changes, all from the CLI
En bref
- De quoi s’agit-il ?
- lumen est un visualiseur de diff git en TUI écrit en Rust, distribué comme binaire statique unique. Il ajoute des fonctions IA optionnelles pour rédiger les messages de commit et expliquer les changements, mais le visualiseur fonctionne sans aucune configuration de fournisseur.
- À qui s’adresse-t-il ?
- lumen convient aux développeurs qui relisent beaucoup de diffs dans un terminal et veulent les annoter sans quitter le clavier, ainsi qu'aux équipes qui utilisent déjà un fournisseur LLM et acceptent d'envoyer du code à une API distante via lumen draft ou lumen explain. Il ne convient pas à qui cherche un client git graphique complet : pas de résolution de conflits, pas de rebase interactif, pas de gestion de branches au-delà de la visualisation.
- Puis-je l’utiliser commercialement ?
- Oui. MIT est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
- Est-il encore maintenu ?
- Oui. Les derniers commits datent d’il y a 61 jours.
- En quel langage est-il écrit ?
- Principalement Rust, d’après les statistiques de langage de GitHub.
Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.
ANALYSE OPEN SOURCE APPROFONDIE
Le problème visé : relire un diff sans changer d'outil
La relecture de code se fait souvent en deux temps. On inspecte le diff dans un terminal, puis on ouvre un navigateur ou un éditeur pour commenter, puis on revient au terminal pour committer. lumen vise à supprimer ces allers-retours pour une partie du travail. Le README annonce un visualiseur de diff côte à côte, des annotations à trois niveaux de granularité, un mode veille et un mode de relecture commit par commit, le tout dans un terminal. Le projet est écrit en Rust et publié sous licence MIT, ce qui autorise la réutilisation du code y compris dans un contexte commercial, à condition de conserver la notice de licence. Le public visé est donc celui qui vit déjà dans un shell : développeurs qui relisent des branches, mainteneurs qui traitent des pull requests GitHub, utilisateurs de Jujutsu puisque le README indique la compatibilité avec jj en plus de git. La promesse de rapidité sur les diffs de plusieurs milliers de lignes repose, d'après le README, sur un binaire statique unique, sans préciser de chiffres de performance.
Ce que fait réellement le binaire, et ce qu'il ne fait pas
lumen n'est pas un client git complet. C'est un lecteur : il affiche des diffs, il les annote, il les filtre, il les rafraîchit. Le README ne mentionne ni résolution de conflits, ni rebase interactif, ni gestion de branches, ni staging. La commande centrale est lumen diff, qui prend en argument un révision range classique (HEAD~1, main..feature/A) ou une référence de pull request. Le rendu côte à côte s'appuie sur tree-sitter pour la coloration syntaxique, ce qui distingue le rendu d'une simple coloration par ligne : la coloration suit la grammaire du langage. Les annotations existent à trois niveaux, sélection de lignes, hunk, fichier entier. Une ligne annotée affiche un indicateur de gouttière, et la touche I ouvre la liste complète avec édition, suppression, copie et export. Le mode stacked change la granularité de lecture : au lieu d'un diff agrégé sur une plage de commits, chaque commit est présenté séparément, avec ctrl+h et ctrl+l pour naviguer. Le README précise que les fichiers marqués comme vus sont suivis par commit, donc la progression est conservée d'un commit à l'autre. C'est un détail d'implémentation qui compte sur une branche longue.
Installation et première commande
Deux voies sont documentées. Sur macOS et Linux, brew install jnsahaj/lumen/lumen installe le binaire depuis un tap Homebrew. Sinon, cargo install lumen compile depuis crates.io, ce qui suppose une chaîne Rust installée, le README renvoyant vers le guide d'installation de Cargo. Les prérequis déclarés sont git, plus deux outils optionnels : fzf, nécessaire uniquement pour lumen explain --list, et mdcat, utilisé pour le formatage lisible en sortie. Autrement dit, une installation sans fzf ni mdcat reste fonctionnelle, seule une sous-commande perd sa fonctionnalité. La prise en main tient en une commande : lumen diff pour les changements non commités. À partir de là, les variantes documentées couvrent les cas courants : lumen diff --file src/main.rs pour restreindre l'affichage, lumen diff --watch pour un rafraîchissement automatique, lumen diff --focus src/main.rs pour ouvrir directement sur un fichier. Pour une pull request GitHub, lumen diff --pr 123 ou l'URL complète, et lumen diff --detect-pr pour ouvrir la PR associée à la branche courante. Le README indique aussi que la barre d'espace marque un fichier comme vu, et que cette information se synchronise avec GitHub lorsqu'on consulte une PR.
Thèmes et précédence de configuration
Le thème se règle de trois façons, et le README donne un ordre de priorité explicite : l'option en ligne de commande l'emporte sur le fichier de configuration, qui l'emporte sur la variable d'environnement LUMEN_THEME, qui l'emporte sur la détection automatique du système. Les valeurs disponibles sont nommées dans le README : dark et light pour l'auto-détection, catppuccin-mocha et catppuccin-latte, dracula, nord, one-dark, gruvbox-dark et gruvbox-light, solarized-dark et solarized-light, flexoki-dark et flexoki-light. Le fichier de configuration se trouve en ~/.config/lumen/lumen.config.json et accepte au minimum une clé theme. Le retour à la ligne des lignes longues s'active par lumen diff --wrap, et le README précise que le même réglage est disponible dans le fichier de configuration. Cette précédence est un choix classique et prévisible, mais elle a un effet secondaire : une variable LUMEN_THEME exportée dans un shell de longue durée peut masquer un réglage différent inscrit dans le fichier, tant que le fichier ne contient pas la clé correspondante. Le README ne décrit pas de commande d'affichage de la configuration effective, ce qui obligerait à inspecter le fichier et l'environnement à la main en cas de doute.
Les fonctions IA sont optionnelles, et c'est le point à comprendre
Le README est explicite : les assistants IA pour les messages de commit, les explications et les commandes git en langage naturel nécessitent la configuration d'un fournisseur, alors que le visualiseur de diff n'en a pas besoin. Cette séparation est saine. Elle signifie qu'on peut installer lumen uniquement pour la relecture, sans jamais transmettre de code à un service tiers. Pour activer les fonctions IA, la commande documentée est lumen configure, qui demande le fournisseur, la clé d'API et le modèle, puis enregistre le résultat dans ~/.config/lumen/lumen.config.json. Le README mentionne plus de dix fournisseurs pris en charge, sans en donner la liste complète dans l'extrait fourni. Deux commandes sont décrites. lumen draft génère un message de commit à partir des changements indexés, avec un exemple de sortie de la forme feat(button.tsx): Update button color to blue. L'option --context ajoute une indication, l'exemple du README montrant que le message produit mentionne alors l'alignement sur des directives de marque. lumen explain produit des explications de changements, et la variante --list dépend de fzf. Le point à retenir n'est pas la qualité du texte généré, que je ne peux pas évaluer sans l'exécuter, mais le flux de données : le contenu du diff quitte la machine pour l'API configurée.
Le mode stacked face à un diff agrégé
Sur une branche de plusieurs commits, un diff agrégé mélange des intentions différentes. Le mode stacked, activé par lumen diff main..feature --stacked, découpe la plage en commits individuels et affiche l'en-tête avec la position courante, le SHA et le message. La navigation se fait au clavier avec ctrl+h et ctrl+l, ou à la souris via les flèches dans l'en-tête. Le suivi des fichiers vus par commit est l'élément qui rend ce mode utilisable sur une relecture étalée dans le temps : on peut fermer le terminal et reprendre plus tard sans reperdre le commit en cours. Le README ne précise pas où cet état est stocké ni s'il est partagé entre machines. C'est une limite pratique à connaître si vous relisez sur deux postes. À l'inverse, pour un diff court ou une simple vérification avant commit, le mode stacked ajoute une étape de navigation sans bénéfice : lumen diff HEAD~1 suffit.
Alternatives et différences d'approche
Le README cite fzf et mdcat comme dépendances optionnelles, ce qui situe lumen dans une famille d'outils en ligne de commande composables plutôt que dans celle des interfaces graphiques. La comparaison la plus directe est avec les visionneuses de diff intégrées aux clients git en terminal, qui affichent un diff et permettent de stager. lumen ne stage pas, ne committe pas, ne gère pas les branches : il lit, annote et, si on le configure, rédige un message que l'on utilisera ensuite avec git. La différence d'approche porte donc sur la profondeur de relecture, pas sur la couverture fonctionnelle. Un outil qui affiche un diff sans annotation ni suivi de progression suffit pour valider un changement ; lumen vise la relecture longue, avec commentaires exportables et reprise du travail. Le revers est qu'il faut apprendre une couche de raccourcis clavier supplémentaire, documentée par la touche ? dans l'interface et par la liste du README : j/k, { et }, w, tab, espace, e, y, i, I, ctrl+h et ctrl+l.
Coût de maintenance et précautions
Le dépôt n'est pas archivé, la branche par défaut est main, et les versions publiées montrent un rythme de sortie rapproché sur les dernières entrées disponibles, v2.30.0, v2.31.0 puis v2.32.0. Une installation par cargo install suit les publications de crates.io, une installation Homebrew suit le tap. Dans les deux cas, la mise à jour est une commande, mais les deux canaux peuvent diverger légèrement dans le temps. La licence MIT est permissive : elle autorise l'usage, la modification et la redistribution, y compris dans un produit propriétaire, à condition de conserver la notice de copyright et de licence. Elle n'impose aucune obligation de publication des modifications, contrairement à une licence copyleft. Rien dans le matériel fourni ne décrit de politique de compatibilité ascendante pour les clés de ~/.config/lumen/lumen.config.json, ni de mécanisme de migration de configuration. C'est le point à surveiller lors d'un passage de version majeure : relire les notes de version avant de mettre à jour, et conserver une copie du fichier de configuration.
Conclusion éditoriale
lumen convient aux développeurs qui relisent beaucoup de diffs dans un terminal et veulent les annoter sans quitter le clavier, ainsi qu'aux équipes qui utilisent déjà un fournisseur LLM et acceptent d'envoyer du code à une API distante via lumen draft ou lumen explain. Il ne convient pas à qui cherche un client git graphique complet : pas de résolution de conflits, pas de rebase interactif, pas de gestion de branches au-delà de la visualisation. Avant d'adopter, vérifier deux points concrets : que git et, si vous utilisez lumen explain --list, fzf sont présents sur la machine, et si votre dépôt est soumis à des contraintes de confidentialité, que la clé déclarée via lumen configure pointe vers un fournisseur que vous acceptez, puisque les fonctions IA envoient le contenu du diff hors de la machine.
Notes de la communauté