- libghostty est en cours de développement comme bibliothèque d’émulateur de terminal embarqué utilisable dans n’importe quelle application
- Son premier composant, libghostty-vt, est une API sans dépendance, optimisée pour l’analyse et le maintien d’état
- Le projet vise à résoudre la complexité de l’émulation de terminal et les problèmes de réimplémentation répétée, avec un objectif de multiplateforme et de forte portabilité
- D’autres bibliothèques viendront ensuite étendre l’ensemble avec la gestion de la saisie clavier, le rendu GPU et l’intégration avec divers frameworks
- L’API Zig peut déjà être testée, et une API C devrait être publiée prochainement ; les retours utilisateurs sont activement recherchés
Présentation et contexte du développement de libghostty
- libghostty est un projet de bibliothèque conçu pour permettre à toute application d’embarquer un émulateur de terminal moderne, rapide et complet
- Aujourd’hui, de nombreux logiciels implémentent eux-mêmes leur propre émulateur de terminal, ou ne développent qu’un sous-ensemble très limité de fonctionnalités terminal
- Ces implémentations d’émulation de terminal développées séparément reposent souvent sur des codebases ad hoc et jetables, qui gèrent mal les cas particuliers et la complexité, d’où des problèmes récurrents d’incomplétude, de bugs et de baisse de performances
- Pour la plupart des développeurs, implémenter une émulation de terminal ne fait pas partie du cœur métier ; il existe donc un besoin réel pour une solution commune et hautement réutilisable
- libghostty fournit une API C multiplateforme conçue avec un minimum de dépendances, permettant à diverses applications d’intégrer une émulation de terminal rapide et fiable
libghostty-vt : le début de la première bibliothèque
libghostty-vt est une bibliothèque totalement sans dépendance (même libc n’est pas nécessaire) qui fournit une API pour l’analyse des séquences terminal ainsi que pour la gestion de l’état du terminal, comme la position du curseur, les styles ou les retours à la ligne
- Cette analyse des séquences terminal est non seulement au cœur d’un émulateur de terminal, mais aussi indispensable pour des sites qui doivent simplement afficher une sortie stylée, comme GitHub Actions ou les logs de build Vercel
- L’analyse des protocoles terminal peut paraître simple en surface, mais sa mise en œuvre est en réalité très difficile ; plusieurs implémentations, comme Jediterm, rencontrent par exemple des problèmes avec certaines séquences
- Certains développeurs se limitent à un simple parseur de séquences ANSI, mais les exigences de compatibilité complète et de gestion de styles complexes (comme les différentes notations RGB) rendent un parseur sophistiqué indispensable
- libghostty-vt est extrait du cœur éprouvé de Ghostty et apporte une analyse optimisée avec SIMD, un excellent support Unicode, une architecture mémoire avancée et une large compatibilité protocolaire (Kitty Graphics, Tmux Control Mode, etc.)
- La bibliothèque est fournie sous la forme d’une API C sans dépendance et en fichier unique, ce qui facilite son intégration dans tous les langages et environnements généralistes ; elle prend d’abord en charge macOS et Linux (
x86_64, aarch64), avant une extension progressive vers Windows, l’embarqué et WASM
- Elle peut viser un périmètre de prise en charge encore plus large que l’interface GUI de Ghostty
Une extension de libghostty sur le long terme
- Après libghostty-vt, d’autres bibliothèques suivront pour offrir la gestion des entrées (comme l’encodage clavier), le rendu GPU (OpenGL, Metal), des widgets GTK et des frameworks Swift
- Ces extensions fonctionnelles seront organisées de façon modulaire afin de minimiser les dépendances, la taille du code et la complexité de maintenance
État actuel du développement de libghostty-vt
- Une PR (pull request) exposant
libghostty-vt comme module Zig a récemment été fusionnée, et les développeurs Zig peuvent donc déjà l’utiliser
- L’API C est en cours de définition et devrait bientôt être proposée pour les tests (la logique cœur, elle, repose déjà sur du code éprouvé utilisé dans Ghostty depuis plusieurs années)
- L’application Ghostty sur macOS utilise déjà une API C interne, mais les en-têtes actuels ne conviennent pas à une publication externe ni à un usage général ; une toute nouvelle API C est donc en cours de conception
- libghostty est versionné séparément de l’application Ghostty et se trouve actuellement en phase alpha, avec l’espoir d’une adoption rapide et d’une participation active des développeurs de bindings de langage
- L’objectif est de publier une première release taguée dans les six prochains mois
Appel aux retours des utilisateurs
- Le projet se trouve actuellement au stade de la conception de l’API, ce qui rend les avis et retours d’expérience des utilisateurs particulièrement importants
- En plus de Ghostty, divers membres de la communauté développent déjà des projets fondés sur libghostty, et l’équipe espère voir davantage d’utilisateurs participer
- Si vous avez des idées d’usage ou des besoins particuliers autour du projet, il est possible d’échanger directement avec les développeurs via le Discord de Ghostty ou par e-mail
- libghostty est actuellement en version alpha ; l’API n’est pas encore stable, mais la logique cœur garantit déjà une grande fiabilité validée en conditions réelles
Perspectives et impact futur
- Après avoir atteint un bon niveau de stabilité pour l’application Ghostty, le projet peut désormais avancer vers un objectif plus ambitieux : libghostty
- Si libghostty est largement adopté par différentes applications, son impact sur l’écosystème pourrait dépasser largement celui de Ghostty comme application unique
- À mesure que l’usage de libghostty augmentera, Ghostty lui-même pourra aussi gagner en richesse fonctionnelle et en stabilité
- Ghostty et libghostty devraient évoluer de manière complémentaire, au bénéfice à la fois des développeurs et des utilisateurs
3 commentaires
Je l’utilise depuis la 1.0, et à part l’absence de défilement et de recherche, j’en suis satisfait haha. J’utilisais iTerm, mais je m’y suis installé définitivement.
Sortie de Ghostty 1.0 - un émulateur de terminal rapide et multiplateforme
Réactions sur Hacker News
Même après avoir fondé une entreprise, l’avoir introduite en bourse et l’avoir revendue pour des milliards, le voir revenir au monde du code est vraiment légendaire
Hashimoto est bien plus qu’un génie : ce qui m’impressionne le plus, c’est sa capacité exceptionnelle d’abstraction, sa manière de modulariser à l’extrême les systèmes et les interfaces tout en minimisant les dépendances entre les composants. On a l’impression qu’il met en pratique à la lettre la philosophie Simple Made Easy défendue par Rich Hickey. Ses logiciels semblent conçus de façon à ne pouvoir que fonctionner correctement. Et j’ai testé Ghostty pour la première fois : avec iTerm2 et un thème Zsh/Powerlevel10k, j’avais toujours un léger délai de rendu, alors qu’avec ghostty la réponse est quasiment immédiate.
Franchement, c’est enviable, et en même temps ça ressemble à une vie de rêve. Continuer à créer uniquement pour le projet lui-même après avoir acquis une fortune, sans devoir sacrifier la qualité pour des raisons d’argent. Ça me rappelle une vieille citation de Knuth.
On voit clairement que les projets faits avec amour rencontrent de plus en plus de succès. Cela montre qu’en étant moins obsédé par l’argent, on peut produire de meilleurs résultats. En même temps, cela pousse à réfléchir à la structure de notre société et à l’économie en général, puisqu’un certain capital de départ semble nécessaire pour pouvoir vivre ainsi. Comme le disait Knuth, si tout le monde avait simplement un peu plus de temps, chacun pourrait produire de meilleures choses ; à toujours être dans l’urgence, on sacrifie énormément. Et comme dans une autre de ses citations :
On en vient alors à se demander si nous récompensons vraiment à leur juste valeur les personnes qui résolvent bien les problèmes et rendent la vie plus simple, ou si nous nous contentons d’augmenter des scores sans signification. Comment produire davantage de légendes ? Comment construire une société dans laquelle on puisse, comme Mitchell, suivre sa passion sans devoir d’abord expliquer à un conseil d’administration la valeur de la qualité ?
Je l’ai déjà vu en vrai, c’était quelqu’un de vraiment chaleureux et sympathique. Avant de fonder HashiCorp, quand il était chez Kiip, j’ai déjeuné avec lui lors d’une conférence. Mitchell était un vrai hacker. On sentait qu’il aimait sincèrement tout ce qui touche à l’informatique. Il était particulièrement absorbé pendant la conférence sur les systèmes distribués. J’étais convaincu qu’il réussirait quoi qu’il fasse. Depuis que j’ai découvert Ghostty et que je l’utilise, j’en suis très satisfait.
Et en plus, cette personne se passionne jusqu’au développement de logiciels tty, l’un des coins les plus pointus de toute la pile Unix.
J’utilisais ghostty tous les jours sans savoir jusqu’à maintenant que son créateur était Mitchell Hashimoto ; c’est vraiment une excellente surprise.
Ghostty est vraiment génial. J’ai hâte de voir un véritable émulateur de terminal omni-plateforme s’étendre jusqu’au mobile. Le fait que Ghostty soit écrit en Zig est aussi fascinant. C’est le premier programme basé sur Zig que j’utilise au quotidien, et j’ai trouvé amusant que la structure du dépôt ressemble exactement au style de Golang. https://github.com/ghostty-org/ghostty
pkg/,src/, etc. de Go ne sont pas particulièrement bonnes.J’aimerais vraiment adorer Ghostty, mais il y a encore quelques points frustrants
font-thicken-strength, mais ce n’est pas identique à 100 %. À cause du rendu Metal, cela semble soit impossible soit très difficile. Quand on passe la journée à regarder du texte, c’est un point extrêmement important.La passion et le niveau de détail que Mitchell consacre à l’expérience développeur sont vraiment impressionnants. Je me souviens encore de l’émotion ressentie quand j’ai utilisé Vagrant pour la première fois à Santa Monica en 2011. Je n’aurais jamais pensé remplacer iTerm2, mais j’ai essayé Ghostty et j’ai immédiatement accroché.
J’utilise ghostty tous les jours ces temps-ci ; j’ai migré récemment. Sur macOS, comme j’ai remappé Caps Lock en cmd,
cmd+cfonctionne très bien. La configuration par défaut est intelligente, et à part le fait que la personnalisation n’est pas toujours facile, j’en suis entièrement satisfait. Le thème Gruvbox light est aussi très agréable à regarder. Le simple fait qu’il soit écrit en Zig est déjà très cool ; si quelqu’un se demande si Zig est prêt pour un usage réel, ghostty peut servir de réponse. Je ne pense pas revenir à un autre terminal, tellement l’expérience est satisfaisante. À noter : en combinant ghostty avec aerospace, on obtient sur Mac un environnement quasiment parfait piloté uniquement au clavier.J’utilise ghostty sur mon vieux MacBook Air, récupéré de mon grand frère qui codait dessus. J’apprécie vraiment ghostty et j’en suis sincèrement reconnaissant. C’est peut-être un détail, mais le fait de ne pas dépendre de libc me paraît étonnamment précieux.
Dans visidata, l’histogramme d’analyse de fréquence ne se rend pas correctement : certains caractères s’affichent bien en carrés, mais le reste apparaît en losanges avec point d’interrogation. À cause de ce problème, je n’arrive toujours pas à quitter iTerm. Je ne savais même pas quels mots-clés chercher, donc c’était difficile à résoudre.
Je continue à suivre Ghostty de près en espérant que son reflow de texte, y compris dans le scrollback, pourra aussi résoudre ce problème dans les terminaux basés sur Neovim. Je suis ravi de voir Ghostty apporter un nouveau souffle d’innovation à l’environnement terminal. https://github.com/neovim/neovim/issues/33155
J’ai vraiment envie d’utiliser ghostty, mais comme il n’y a pas de prise en charge de
cmd+f, je ne l’ai pas encore essayé. Cela dit, je suis très enthousiaste quant à l’évolution du projet.https://ghostty.org/docs/install/release-notes/1-2-0#roadmap
cmd+shift+f, puis faire la recherche ainsi. Beaucoup de gens ont tenu avec cette méthode, moi y compris ; c’est une alternative tout à fait praticable en attendant une recherche native dans le scrollback.https://github.com/ghostty-org/ghostty/issues/189
cmd+f, mais moi, même quand la fonction existe, je ne l’ai jamais utilisée. Si quelqu’un pouvait expliquer quel type de workflow cela sert, je me demande si je ne passe pas à côté de quelque chose d’important.cmd+fàcopy-mode + /.