---
title: A terminal emulator for the web
navTitle: "Introduction"
---

# A terminal emulator for the web



import { HeroSection } from "@/components/hero-terminal";

<div className="mb-12">
  <div className="mb-8 hidden text-sm leading-relaxed text-neutral-600 dark:text-neutral-400 md:block">
    wterm <span className="text-neutral-500 dark:text-neutral-400">("dub-term")</span> renders to the DOM — native text selection, copy/paste, find, and accessibility come for free. The core is written in Zig and compiled to WASM for near-native performance.
  </div>

  <div className="mb-6 md:mb-0">
    <HeroSection />
  </div>

  <div className="mt-4 text-sm leading-relaxed text-neutral-600 dark:text-neutral-400 md:hidden">
    wterm <span className="text-neutral-500 dark:text-neutral-400">("dub-term")</span> renders to the DOM — native text selection, copy/paste, find, and accessibility come for free. The core is written in Zig and compiled to WASM for near-native performance.
  </div>

  <div className="mt-3 text-xs text-neutral-500 dark:text-neutral-400">
    Example uses <a href="https://github.com/vercel-labs/just-bash" className="underline underline-offset-2 hover:text-neutral-700 dark:hover:text-neutral-300">just-bash</a>. See also: <a href="https://github.com/vercel-labs/wterm/tree/main/examples/ssh" className="underline underline-offset-2 hover:text-neutral-700 dark:hover:text-neutral-300">SSH</a>, <a href="https://github.com/vercel-labs/wterm/tree/main/examples/local" className="underline underline-offset-2 hover:text-neutral-700 dark:hover:text-neutral-300">local</a>.
  </div>
</div>

## Features

* **Zig + WASM core** — VT100/VT220/xterm escape sequence parser compiled to a \~12 KB `.wasm` binary
* **DOM rendering** — native text selection, clipboard, browser find, screen reader support
* **Native hyperlinks** — OSC 8 links remain attached to their exact cells through viewport and scrollback, with safe HTTP(S) anchors
* **Dirty-row tracking** — only touched rows are re-rendered each frame via `requestAnimationFrame`
* **Synchronized output** — mode 2026 blocks paint atomically with a bounded recovery deadline
* **Themes** — CSS custom properties with built-in Default, Solarized Dark, Monokai, and Light themes
* **Alternate screen buffer** — `vim`, `less`, `htop` work correctly
* **Scrollback history** — configurable ring buffer
* **Wide Unicode cells** — CJK, fullwidth, and emoji codepoints stay aligned during cursor-addressed redraws
* **24-bit color** — full RGB SGR support
* **Framework bindings** — React, Vue 3, and Svelte components
* **Auto-resize** — `ResizeObserver`-based terminal resizing
* **WebSocket transport** — connect to a PTY backend with reconnection


---

For a semantic overview of all documentation, see [/sitemap.md](/sitemap.md)

For an index of all available documentation, see [/llms.txt](/llms.txt)