4 points par GN⁺ 2025-12-02 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Ghostty-web est un émulateur de terminal compatible VT100 qui s'exécute dans le navigateur, et peut être utilisé de la même manière que l'API xterm.js.
  • Il utilise un parseur Ghostty compilé en WASM pour fournir une base de code identique à l'application native, avec aucune dépendance runtime.
  • Les projets xterm.js existants peuvent migrer en remplaçant simplement @xterm/xterm par ghostty-web.
  • Il offre un traitement plus précis que xterm.js pour le rendu de scripts complexes et le support de séquences comme XTPUSHSGR/XTPOPSGR.
  • Un outil qui permet de simplifier la mise en place d'un terminal haute performance dans des environnements de développement basés sur navigateur ou des IDE cloud.

Aperçu

  • ghostty-web est un projet qui transpose l'émulateur de terminal de Ghostty vers le web, tout en conservant la compatibilité avec l'API xterm.js.
    • Il fournit une implémentation précise de VT100 dans le navigateur.
    • Les utilisateurs de xterm.js peuvent basculer facilement.
  • Il utilise le parseur Ghostty compilé en WASM, avec une exécution basée sur le même code que l'application native.
    • Aucune dépendance runtime, et un bundle WASM d'environ 400 Ko.
  • Initialement conçu pour Mux (une application de bureau pour le développement isolé en parallèle), il peut être utilisé dans différents environnements.

Démo et exécution

  • Une démo en direct est disponible sur ghostty.ondis.co.
  • En local, il peut être lancé avec la commande suivante
    npx @ghostty-web/demo@next  
    

Comparaison avec xterm.js

  • xterm.js est utilisé dans VS Code, Hyper et d'autres environnements, mais il présente des problèmes de rendu et de fonctionnalités non prises en charge.
    • Des erreurs de rendu peuvent apparaître avec des scripts complexes (Devanagari, arabe, etc.)
    • Non prise en charge des séquences XTPUSHSGR/XTPOPSGR
  • ghostty-web corrige ces problèmes en offrant un traitement précis des graphèmes et une prise en charge complète des séquences.
  • Alors que xterm.js réimplémente toute l'émulation en JavaScript, ghostty-web utilise directement le code natif éprouvé de Ghostty.

Installation et utilisation

  • Commande d'installation
    npm install ghostty-web  
    
  • Utilisation avec la même API que xterm.js
    import { init, Terminal } from 'ghostty-web';  
    await init();  
    const term = new Terminal({ fontSize: 14, theme: { background: '#1a1b26', foreground: '#a9b1d6' } });  
    term.open(document.getElementById('terminal'));  
    term.onData((data) => websocket.send(data));  
    websocket.onmessage = (e) => term.write(e.data);  
    
  • Pour un exemple de communication client–serveur, voir demo/index.html.

Développement et build

  • Construit à partir des sources de Ghostty, avec un patch pour exposer des fonctionnalités supplémentaires (ghostty-wasm-api.patch).
  • Zig et Bun sont requis
    bun run build  
    
  • Grâce à libghostty, développé par le créateur de Ghostty, Mitchell Hashimoto, le nombre de modifications reste réduit.
  • À terme, le projet prévoit de s'appuyer sur une distribution officielle WASM de Ghostty, tout en conservant la compatibilité avec l'API xterm.js.
  • Le projet est développé avec le soutien de l'équipe Coder pour Ghostty.

Licence

  • Licence MIT

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.