wterm is a terminal emulator for the web that renders to the DOM.
The tool solves the problem of embedding functional terminal interfaces in web applications. Rather than using canvas-based rendering, wterm renders terminal output directly to DOM elements, which means native browser features like text selection, copy and paste, find functionality, and accessibility features work without additional implementation. The core terminal emulation logic is written in Zig and compiled to WebAssembly to achieve near-native performance while running in the browser.
The project provides multiple integration points for different frameworks and use cases. The core headless WASM bridge can be used standalone or with custom renderers, while framework-specific packages offer React components with hooks, Vue 3 components with template refs, and Svelte components. For terminal emulation, the tool includes a full-featured VT emulation core powered by libghostty, and an in-browser Bash shell implementation. This modular approach means developers can choose the level of abstraction that fits their needs, from low-level WASM control to high-level framework components. The DOM-based rendering approach suits projects where standard browser interactions and accessibility are priorities, distinguishing it from canvas-based terminal emulators that require custom implementations of these features.
The project shows active development with regular updates across its modular package structure. Work spans the core WASM implementation, framework integrations for React, Vue, and Svelte, specialized terminal features like Markdown rendering, and shell implementations. The codebase demonstrates attention to both performance optimization at the WASM level and developer experience through multiple framework bindings and clear package separation.