- 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
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
Aucun commentaire pour le moment.