ghostty-web؛ موتور ترمینال Ghostty توی مرورگر
خلاصهٔ کاملتر
تیم Coder کتابخونهای به اسم ghostty-web منتشر کرده که موتور ترمینال Ghostty رو با WebAssembly (یعنی کد کامپایلشدهای که خود مرورگر مستقیم اجراش میکنه) توی صفحهٔ وب اجرا میکنه. تو مخزن پروژه اومده که این همون کدیه که تو اپ نیتیو Ghostty کار میکنه، نه یک پیادهسازی دوبارهٔ ترمینال با جاوااسکریپت. حجم باندل WASM حدود ۴۰۰ کیلوبایته و پکیج هیچ وابستگی رانتایمی نداره.
نکتهٔ اصلیش سازگاری API با xterm.js ـه. برای مهاجرت فقط کافیه ایمپورت @xterm/xterm رو به ghostty-web عوض کنی و بقیهٔ کدت دستنخورده بمونه. یک فرق کوچیکش اینه که اول باید init() رو صدا بزنی تا ماژول WASM لود بشه:
import { init, Terminal } from 'ghostty-web';
await init();
const term = new Terminal({ fontSize: 14 });
term.open(document.getElementById('terminal'));
term.onData((data) => websocket.send(data));به گفتهٔ سازندهها xterm.js همهجا هست، از VS Code و Hyper تا کلی ترمینال وب، ولی چون کل امولیشن ترمینال رو دستی با جاوااسکریپت نوشته دو تا ایراد پایهای داره: خطهای پیچیده مثل دواناگری و عربی درست رندر نمیشن، و XTPUSHSGR/XTPOPSGR (سکانسهایی که وضعیت رنگ و استایل رو ذخیره و برمیگردونن) اصلاً پشتیبانی نمیشه. ghostty-web هر دو رو داره، چون grapheme handling و بقیهٔ حالتهای خاص یونیکد قبلاً تو خود Ghostty حل شده.
ghostty-web از سورس Ghostty با یک پچ کوچیک بیلد میشه و برای ساختنش به Zig و Bun نیاز داری. اولش برای Mux ساخته شده بود، یک اپ دسکتاپ Coder برای توسعهٔ موازی با ایجنتها، ولی جوری نوشتنش که هرجایی قابل استفاده باشه. نویسنده میگه کار Mitchell Hashimoto روی libghostty باعث شده پچها خیلی کم بمونه و قراره در آینده مستقیم از نسخهٔ رسمی WASM خود Ghostty استفاده کنن. لایسنس هم MIT ـه.
نکات کلیدی:
- باندل WASM حدود ۴۰۰ کیلوبایت، بدون هیچ وابستگی رانتایمی
- مهاجرت از xterm.js فقط با عوض کردن ایمپورت @xterm/xterm به ghostty-web
- رندر درست خطهای پیچیده مثل دواناگری و عربی، که xterm.js توش مشکل داره
- پشتیبانی کامل از XTPUSHSGR/XTPOPSGR که تو xterm.js اصلاً نیست
- بیلد از سورس Ghostty با Zig و Bun؛ لایسنس MIT




