3 points par GN⁺ 2025-09-24 | 3 commentaires | Partager sur WhatsApp
  • 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

 
yshrust 2025-09-24

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.

 
GN⁺ 2025-09-24
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.

      Permettre à des milliers d’informaticiens de faire librement ce qu’ils veulent, voilà ce qui fait avancer la discipline.

      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 :

      À vouloir tout optimiser, on finit par ne jamais être heureux.

      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

    • (Ça ne ressemble pas à une arborescence Go.) Et tant mieux, d’ailleurs : les structures de répertoires pkg/, src/, etc. de Go ne sont pas particulièrement bonnes.
  • J’aimerais vraiment adorer Ghostty, mais il y a encore quelques points frustrants

    • pas encore de prise en charge de la recherche avec ⌘F
    • aucun moyen de sélectionner/copier l’ancienne sortie ou une chaîne précise uniquement au clavier
    • impossible d’envoyer CTRL-C avec ⌘. (c’est une fonction attendue par les utilisateurs de Mac)
    • le rendu des polices n’est pas encore aussi fluide que dans Terminal.app ; j’ai essayé de le régler avec 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.
    • Il est possible de configurer l’envoi de CTRL-C avec ⌘.
      keybind = "cmd+.=text:\x03"
      
      Discussion associée : https://news.ycombinator.com/item?id=42889411
    • Ce sera pris en charge prochainement : https://ghostty.org/docs/install/release-notes/1-2-0#roadmap
    • La recherche dans le scrollback est prévue pour la version 1.3, mais il faudra sans doute encore attendre environ six mois. Ghostty évolue aussi rapidement en ce moment, donc les notes de version de la 1.2 valent le détour.
    • Vu les variations de score, je pense que mon message a été mal compris. En réalité, l’idée d’implémenter une interface graphique native propre à chaque fournisseur tout en restant multiplateforme est formidable. Je suis vraiment ravi que ce projet existe ; simplement, à mes yeux, il n’est pas encore parfait. Cela dit, je le suis avec beaucoup d’intérêt.
    • Mon deuxième reproche (sélectionner l’ancienne sortie au clavier) est la principale raison pour laquelle je continue à utiliser WezTerm.
  • 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+c fonctionne 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.

    • Tu pourrais expliquer pourquoi on devrait utiliser ghostty ? (Je demande ça en tant qu’utilisateur principal de Terminal.app.)
    • ClickHouse et Bun sont aussi des projets incroyables.
  • 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.

    • Il se peut que le point de code correspondant soit absent de la police principale et de la police de secours. Si tu utilises ghostty, je te recommande de vérifier dans iTerm2 quelle police affiche correctement ce glyphe, puis de chercher s’il existe un réglage approprié dans ghostty.
  • 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

    • Tu es un utilisateur intensif du terminal intégré de neovim ? À une époque, j’ai essayé de modifier mon workflow pour passer de tmux qui lançait neovim à neovim gérant directement le terminal, parce que je voulais n’ouvrir les fichiers que dans un seul buffer. Quand on ouvre un fichier dans un pane, il arrive souvent qu’il soit déjà ouvert dans une autre instance de neovim, d’où cette tentative de changement. Pendant mes tests, je n’ai pas particulièrement remarqué de problème de reflow que le passage à libghostty pourrait résoudre ; j’ai surtout eu du mal à m’adapter au changement de paradigme. En tant que personne très attachée au terminal intégré de neovim, j’aimerais bien entendre des retours d’expérience sur ce que l’intégration de libghostty pourrait réellement améliorer.
  • 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.

    • C’est sur la feuille de route.
      https://ghostty.org/docs/install/release-notes/1-2-0#roadmap
    • On peut aussi ouvrir tout le buffer dans l’éditeur de texte par défaut avec un raccourci comme 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.
    • Je me demande pourquoi cette fonction n’a pas été ajoutée plus tôt. La recherche dans l’historique me paraît essentielle dans un terminal ; y avait-il une raison technique particulière ? D’ailleurs, Mitchell lui-même avait ouvert un ticket à ce sujet il y a deux ans.
      https://github.com/ghostty-org/ghostty/issues/189
    • Beaucoup de gens se plaignent de l’absence de recherche dans l’historique façon 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.
    • Il y a aussi la possibilité de lancer tmux à l’intérieur et d’associer cmd+f à copy-mode + /.