wterm: ترمینالی برای مرورگر که مستقیم توی DOM رندر میشه
خلاصهٔ کاملتر
wterm (تلفظش «دابترم») یه شبیهساز ترمینال برای وبه که Vercel Labs منتشرش کرده. نکتهی اصلیش اینه که خروجی رو مستقیم توی DOM رندر میکنه، نه روی canvas. یعنی هر ردیف ترمینال یه المان واقعی صفحهست و انتخاب متن، copy/paste، Find مرورگر و screen reader بدون هیچ ترفندی روش کار میکنن.
هستهی پیشفرض با Zig نوشته شده و به WASM (یعنی فرمت باینریای که مرورگر با سرعت نزدیک به کد native اجراش میکنه) کامپایل میشه. این هسته escape sequenceهای VT100، VT220 و xterm رو parse میکنه و نسخهی release اون حدود ۲۶ کیلوبایته. اگه سازگاری کاملتر بخوای، میتونی هستهی @wterm/ghostty رو انتخاب کنی که روی libghostty ساخته شده و حافظه رو فقط وقتی لازم شد میگیره.
پروژه چند تا پکیج داره: @wterm/core برای پل WASM و اتصال WebSocket، @wterm/dom برای نسخهی vanilla JS، کامپوننتهای React، Vue 3 و Svelte، یه پوستهی Bash که کامل داخل مرورگر اجرا میشه (@wterm/just-bash) و یه پکیج برای رندر Markdown توی ترمینال. برای وصل شدن به یه PTY واقعی روی سرور هم یه transport مبتنی بر WebSocket با قابلیت اتصال دوباره داره.
برای سرعت، فقط ردیفهایی که عوض شدن با requestAnimationFrame دوباره رسم میشن و تاریخچهی scrollback توی یه پنجرهی محدود از DOM نگه داشته میشه. یعنی حتی با خروجی زیاد، صفحه پر از المان اضافه نمیشه. برنامههایی مثل vim، less، htop و tmux هم به لطف alternate screen و DEC line drawing درست نمایش داده میشن.
لیست قابلیتها خیلی بلنده: رنگ ۲۴ بیتی، تم با CSS custom properties، پروتکل کیبورد Kitty، تصویرهای Kitty (فقط با هستهی Ghostty)، ورودی IME برای زبانهای شرق آسیا، لمس و صفحهکلید گوشی، لینکهای OSC 8، انتخاب مستطیلی با Alt و تقسیم صفحه تا چهار پوسته. برای تصویرها سقف ۳۲ مگابایت برای هر تصویر گذاشته شده.
نکات کلیدی:
- رندر توی DOM باعث میشه انتخاب متن، Find و screen reader مستقیم کار کنن.
- هستهی Zig به یه فایل WASM حدود ۲۶ کیلوبایتی کامپایل میشه.
- هستهی جایگزین @wterm/ghostty روی libghostty سازگاری کامل VT میده.
- هستهی داخلی تا ۱۰۲۴ ستون و ۵۱۲ ردیف رو پشتیبانی میکنه.
- کامپوننت آماده برای React، Vue 3 و Svelte داره و لایسنسش Apache-2.0 هست.




