Vercel Labs、Web向けターミナルエミュレータ「wterm」を公開
Vercel Labs が GitHub 上で Web 向けターミナルエミュレータ wterm を公開した。キャンバスではなく DOM にレンダリングするため、ブラウザ標準のテキスト選択・コピー/ペースト・ページ内検索・スクリーンリーダー連携がそのまま活きる設計である。エスケープシーケンスの解析などのコアは Zig で実装され、WebAssembly にコンパイルしてクライアントで実行する。
npm ワークスペースには、ヘッドレスの WASM ブリッジと WebSocket 転送を担う @wterm/core、バニラ JS 向けの DOM レンダラと入力処理をまとめた @wterm/dom、React コンポーネントと useTerminal フックを提供する @wterm/react、just-bash を用いたブラウザ内 Bash の @wterm/just-bash、ターミナル上での Markdown 表示用の @wterm/markdown が含まれる。ライセンスは Apache License 2.0 である。
リリースビルドではコアの WebAssembly が約 12 KB まで収まる。VT100/VT220/xterm 系のエスケープを扱い、代替画面バッファにより vim や less、htop 相当の全画面アプリも想定されている。行単位のダーティトラッキングと requestAnimationFrame により更新行だけを差し替え、24 ビット色・スクロールバック・CSS カスタムプロパティによるテーマ(Default、Solarized Dark、Monokai、Light)・ResizeObserver による自動リサイズ・バイナリフレーミングと再接続を備えた WebSocket 転送に対応する。
pnpm install
zig buildバニラのデモは web/ を静的サーバーで配信する。Next.js の例は portless を用いた .localhost URL で開発サーバーを立てる。