1. 项目定位与用途
wterm 是一个专为 Web 应用设计的高性能终端模拟器库。它允许开发者在浏览器环境中嵌入功能完整的终端界面,支持标准的终端操作和交互。项目提供多种集成方式,包括原生 JavaScript、React 组件以及专门的扩展包,满足不同技术栈的需求。其核心目标是结合 WASM 的高性能与 DOM 的原生交互能力,为 Web 应用提供接近本地终端的体验。
vercel-labs/wterm:wterm 是一个基于 Web 的终端模拟器库,使用 Zig 编写核心并编译为约 12 KB 的 WASM 二进制文件,通过 DOM 渲染提供原本页整理它解决什么问题、适用场景、安装方式和使用方法。
wterm 是一个基于 Web 的终端模拟器库,使用 Zig 编写核心并编译为约 12 KB 的 WASM 二进制文件,通过 DOM 渲染提供原生文本选择、复制粘贴和无障碍支持,支持 VT100/VT220/xterm 兼容、24 位颜色、备用屏幕缓冲区等完整终端特性,适用于在 Web 应用中嵌入交互式终端界面。
wterm 是一个专为 Web 应用设计的高性能终端模拟器库。它允许开发者在浏览器环境中嵌入功能完整的终端界面,支持标准的终端操作和交互。项目提供多种集成方式,包括原生 JavaScript、React 组件以及专门的扩展包,满足不同技术栈的需求。其核心目标是结合 WASM 的高性能与 DOM 的原生交互能力,为 Web 应用提供接近本地终端的体验。
传统 Web 终端方案多基于 Canvas 渲染,面临文本选择困难、复制粘贴不便、浏览器查找功能不支持、无障碍访问受限等问题。wterm 创新性地采用 DOM 渲染,使每个字符成为真实的 DOM 节点,从而原生支持文本选择、剪贴板操作、页面查找和屏幕阅读器。同时,通过 Zig 编写核心并编译为 WASM,解决了 JavaScript 解释器性能不足的问题,实现接近原生的终端解析速度,并保持小巧的二进制体积(约 12 KB)。
wterm 适用于需要在 Web 应用中集成终端界面的多种场景:在线 IDE 和代码编辑器(如 GitHub Codespaces、StackBlitz 等)需要提供 shell 访问;开发者工具面板需要展示命令行输出;云服务控制台需要提供远程服务器管理界面;教学平台需要交互式命令行环境;以及任何需要浏览器内终端功能的应用程序。其 WebSocket 传输支持使其能轻松连接后端 PTY 服务,实现完整的远程终端体验。
根据仓库信息,wterm 作为 Monorepo 管理,直接安装需从源码构建。具体步骤:确保已安装 Zig 0.16.0+、Node.js 20+、pnpm 10+ 和 portless(npm i -g portless);克隆仓库后执行 pnpm install 安装所有依赖;使用 zig build 编译 WASM 核心(Release 版本使用 zig build -Doptimize=ReleaseSmall);最后通过 pnpm build 构建所有包。对于示例应用,需额外步骤如复制 wterm.wasm 到 public 目录。注意,仓库未提供 npm 发布包的安装命令,当前需从源码构建。
wterm 提供多种使用方式。原生 JavaScript 方式:引入 @wterm/dom 包,创建 Terminal 实例并配置 DOM 容器、WebSocket 连接等。React 方式:安装 @wterm/react,使用 <Terminal> 组件并传入 wasmUrl、onReady、onData、onResize 等 props。示例应用展示了完整集成:前端通过 WebSocket 连接后端 PTY 服务,发送用户输入并接收终端输出,同时处理终端尺寸调整。后端需实现 WebSocket 端点,使用 node-pty 等库生成 shell 进程并转发数据。仓库中的 examples/ 目录包含 local、nextjs、ssh、vite 等多种示例供参考。
wterm 的架构设计体现了多项关键技术选择。核心终端引擎完全用 Zig 编写,编译为 WASM 后体积小巧、性能高效,仅约 12 KB。DOM 渲染策略不仅带来原生文本交互,还天然支持无障碍访问。渲染采用脏行跟踪机制,通过 requestAnimationFrame 仅重绘变化行,优化性能。主题系统基于 CSS 自定义属性,内置 Default、Solarized Dark、Monokai、Light 等主题。WebSocket 传输层支持二进制帧和自动重连,确保与后端 PTY 的稳定通信。项目使用 pnpm workspaces 和 turbo 管理 Monorepo,确保多包开发效率。
wterm 是一个基于 Web 的终端模拟器库,核心使用 Zig 编写并编译为 WASM,通过 DOM 渲染提供高性能和原生文本交互能力。
wterm 采用 DOM 渲染而非 Canvas,原生支持文本选择、复制粘贴、浏览器查找和无障碍访问;Zig+WASM 核心提供接近原生的性能和仅 12 KB 的小体积;支持完整的终端特性如备用屏幕缓冲区、24 位颜色等。
可通过 @wterm/dom 在原生 JS 中使用,或通过 @wterm/react 在 React 项目中使用。需准备 WASM 文件并建立 WebSocket 连接后端 PTY 服务。详细步骤见使用方式章节。
支持。wterm 的 WebSocket 传输层设计用于连接后端 PTY 服务,可通过 SSH 等方式转发。示例中的 ssh 示例展示了如何集成 SSH 连接。
开发环境需要 Zig 0.16.0+、Node.js 20+、pnpm 10+ 和 portless。具体安装步骤请参考安装方式章节。