Appearance
vt100.js
Headless Backend
Pure TypeScript VT100 emulator. Zero dependencies, fastest backend.
See also: VT100 standard features · DEC VT100 (historical)
vt100.js is a lightweight, zero-dependency terminal emulator written in pure TypeScript. It covers approximately 58% of the terminfo.dev feature matrix — SGR styling (bold, italic, underline, 256-color, truecolor), cursor positioning and visibility, scroll regions, alternate screen buffer, and basic character set handling. The coverage is a deliberate tradeoff: by focusing on the most commonly used features, vt100.js stays small, fast, and easy to reason about.
vt100.js was originally designed as the default backend for Termless (headless terminal testing). vterm.js has since replaced it as the default, offering near-100% feature coverage. The two libraries are complementary: vt100.js for speed in CI pipelines where only common features matter, vterm.js for thoroughness when standards compliance is the goal.
Pure TypeScript, zero dependencies, runs on any JavaScript runtime (Bun, Node.js, Deno, browsers).
Backend: Pure TypeScript VT100 emulator. Zero dependencies, fastest backend. (js) · v0.2.1
56%
85 passed · 66 failed of 151 features
Tested: March 26, 2026
Analysis2026-03-26
Character Sets
| Feature | Support | Notes |
|---|---|---|
| DEC line drawing character set | ✓ yes | |
| DEC Special Graphics | ✓ yes | |
| G0/G1 character set switching | ✓ yes | |
| UTF-8 mode | ✓ yes |
Cursor
| Feature | Support | Notes |
|---|---|---|
| CUD stops at bottom | ✓ yes | |
| CUP at screen boundaries | ✓ yes | |
| CUP with DECOM | ✗ no | CUP with DECOM not implemented — pure TypeScript emulator |
| CUU stops at top | ✓ yes | |
| Hide cursor (DECTCEM) | ✓ yes | |
| Cursor horizontal absolute (CHA) | ✓ yes | |
| Cursor position (CUP) | ✓ yes | |
| Cursor back (CUB) | ✓ yes | |
| Cursor down (CUD) | ✓ yes | |
| Cursor forward (CUF) | ✓ yes | |
| Cursor home | ✓ yes | |
| Cursor up (CUU) | ✓ yes | |
| Cursor next line (CNL) | ✓ yes | |
| Cursor position report (DSR 6) | ✓ yes | No output stream — pure TypeScript emulator |
| Reverse Wrap (Mode 45) | ✓ yes | |
| Save/restore cursor (DECSC) | ✓ yes | |
| Cursor shape (DECSCUSR) | ✗ no | Not implemented — pure TypeScript emulator |
Device Status
| Feature | Support | Notes |
|---|---|---|
| Mode Report (DECRPM) | ✗ no | No output stream — pure TypeScript emulator |
| Request Setting (DECRQSS) | ✗ no | No output stream — pure TypeScript emulator |
| Primary device attributes (DA1) | ✓ yes | No output stream — pure TypeScript emulator |
| Secondary Device Attributes (DA2) | ✗ no | No output stream — pure TypeScript emulator |
| Device status report (DSR 5) | ✓ yes | No output stream — pure TypeScript emulator |
| Feature Reporting (TERM_FEATURES) | ? unknown | |
| Tertiary Device Attributes (DA3) | ✗ no | No output stream — pure TypeScript emulator |
| Query Terminfo (XTGETTCAP) | ✗ no | No output stream — pure TypeScript emulator |
| Terminal Version (XTVERSION) | ✗ no | No output stream — pure TypeScript emulator |
Editing
| Feature | Support | Notes |
|---|---|---|
| Delete characters (DCH) | ✓ yes | |
| Delete lines (DL) | ✓ yes | |
| Insert characters (ICH) | ✓ yes | |
| Insert lines (IL) | ✓ yes | |
| Repeat character (REP) | ✗ no | REP not implemented — pure TypeScript emulator |
Erase
| Feature | Support | Notes |
|---|---|---|
| Erase character (ECH) | ✓ yes | |
| ED at scroll region boundary | ✓ yes | |
| EL erases with bg color | ✗ no | EL doesn't preserve SGR background — pure TypeScript emulator |
| Erase line (EL 2) | ✓ yes | |
| Erase to BOL (EL 1) | ✓ yes | |
| Erase to EOL (EL 0) | ✓ yes | |
| Erase above (ED 1) | ✓ yes | |
| Erase screen (ED 2) | ✓ yes | |
| Erase below (ED 0) | ✓ yes | |
| Erase scrollback (ED 3) | ✓ yes | |
| Selective Erase (DECSED) | ✗ no | DECSED not implemented — pure TypeScript emulator |
Extensions
| Feature | Support | Notes |
|---|---|---|
| iTerm2 Inline Images (OSC 1337) | ✗ no | Not implemented — pure TypeScript emulator |
| Kitty graphics protocol | ✗ no | Not implemented — pure TypeScript emulator |
| Kitty keyboard protocol | ✗ no | Not implemented — pure TypeScript emulator |
| Desktop Notifications (OSC 9/777) | ✗ no | Not implemented — pure TypeScript emulator |
| VS Code Shell Integration (OSC 633) | ✗ no | VS Code shell integration (OSC 633) not supported |
| Icon and title (OSC 0) | ✓ yes | |
| Foreground color query (OSC 10) | ✗ no | Not implemented — pure TypeScript emulator |
| Background color query (OSC 11) | ✗ no | Not implemented — pure TypeScript emulator |
| iTerm2 Capability Reporting (OSC 1337) | ✗ no | iTerm2-specific protocol not implemented — pure TypeScript emulator |
| iTerm2 Cell Size Reporting (OSC 1337) | ✗ no | iTerm2-specific protocol not implemented — pure TypeScript emulator |
| Window title (OSC 2) | ✓ yes | |
| Clipboard access (OSC 52) | ✗ no | Not implemented — pure TypeScript emulator |
| OSC 5522 advanced clipboard | ✗ no | Not implemented — pure TypeScript emulator |
| OSC 66 text sizing | ✗ no | Not implemented — pure TypeScript emulator |
| Current directory (OSC 7) | ✗ no | Not implemented — pure TypeScript emulator |
| Hyperlinks (OSC 8) | ✗ no | Not implemented — pure TypeScript emulator |
| OSC 9;4 progress bar | ? unknown | |
| Text reflow on resize | ✗ no | Not implemented — pure TypeScript emulator |
| Semantic prompts (OSC 133) | ✗ no | Not implemented — pure TypeScript emulator |
| Sixel graphics | ✗ no | Not implemented — pure TypeScript emulator |
| Sixel support in DA1 | ✗ no | Not implemented — pure TypeScript emulator |
| 24-bit truecolor | ✗ no | Not in VT100/VT220 — only 8 standard colors supported |
Input Protocols
| Feature | Support | Notes |
|---|---|---|
| Button-Event Mouse (1002) | ✗ no | Not in VT100/VT220 — xterm extension |
| CSI u Key Encoding | ✗ no | CSI u keyboard protocol not implemented |
| modifyOtherKeys | ✗ no | Not implemented — pure TypeScript emulator |
| modifyOtherKeys mode 3 | ✗ no | Not implemented — pure TypeScript emulator |
| Pixel Mouse Reporting (1016) | ✗ no | SGR pixel mouse mode not implemented — pure TypeScript emulator |
| urxvt Mouse Reporting (1015) | ✗ no | urxvt mouse mode (?1015) not implemented |
| X10 Mouse Tracking (9) | ✗ no | X10 mouse mode (?9) not implemented |
Modes
| Feature | Support | Notes |
|---|---|---|
| Enter alt screen (DECSET 1049) | ✗ no | Not in VT100/VT220 — xterm extension |
| Exit alt screen (DECRST 1049) | ✓ yes | |
| App cursor keys (DECCKM) | ✓ yes | |
| Application keypad (DECKPAM) | ✓ yes | |
| Auto-wrap (DECAWM) | ✓ yes | |
| Bracketed paste (DECSET 2004) | ✗ no | Not in VT100/VT220 — xterm extension |
| Mode 2031 color scheme reporting | ✗ no | Not implemented — pure TypeScript emulator |
| Focus tracking (DECSET 1004) | ✗ no | Not in VT100/VT220 — xterm extension |
| Insert/replace mode (IRM) | ✓ yes | |
| Left/Right Margins (DECLRMM, Mode 69) | ✗ no | DECLRMM not implemented — pure TypeScript emulator |
| All motion mouse (DECSET 1003) | ✗ no | Not in VT100/VT220 — xterm extension |
| SGR mouse mode (DECSET 1006) | ✗ no | SGR mouse encoding not implemented — pure TypeScript emulator |
| Mouse tracking (DECSET 1000) | ✗ no | Not in VT100/VT220 — xterm extension |
| Origin mode (DECOM) | ✓ yes | |
| Reverse video (DECSCNM) | ✓ yes | |
| Synchronized output (DECSET 2026) | ✓ yes |
Reset
| Feature | Support | Notes |
|---|---|---|
| Backend reset() method | ✓ yes | |
| Full reset (RIS) | ✓ yes | |
| SGR reset clears attributes | ✓ yes | |
| Soft reset (DECSTR) | ✓ yes |
Scrollback
| Feature | Support | Notes |
|---|---|---|
| Scrollback accumulates | ✓ yes | |
| Alt screen separate scrollback | ✗ no | Not in VT100/VT220 — no alternate screen buffer |
| DECSTBM constrains scrolling | ✓ yes | |
| DECSTBM reset to full screen | ✓ yes | |
| Reverse index (RI) | ✓ yes | |
| Scroll down (SD) | ✓ yes | |
| Scroll up (SU) | ✓ yes | |
| Scroll region (DECSTBM) | ✓ yes | |
| Total line count | ✓ yes |
SGR (Text Styling)
| Feature | Support | Notes |
|---|---|---|
| 256-color bg (SGR 48;5) | ✗ no | Not in VT100/VT220 — only 8 standard colors supported |
| Bright bg colors (SGR 100-107) | ✗ no | Not in VT100/VT220 — only 8 standard colors supported |
| Default bg color (SGR 49) | ✓ yes | |
| Standard bg colors (SGR 40-47) | ✓ yes | |
| 24-bit bg (SGR 48;2) | ✗ no | Not in VT100/VT220 — only 8 standard colors supported |
| Blink (SGR 5) | ✓ yes | |
| Bold (SGR 1) | ✓ yes | |
| Faint/dim (SGR 2) | ✗ no | Not in VT100/VT220 — use vterm.js for modern SGR |
| 256-color fg (SGR 38;5) | ✗ no | Not in VT100/VT220 — only 8 standard colors supported |
| Bright fg colors (SGR 90-97) | ✗ no | Not in VT100/VT220 — only 8 standard colors supported |
| Default fg color (SGR 39) | ✓ yes | |
| Standard fg colors (SGR 30-37) | ✓ yes | |
| 24-bit fg (SGR 38;2) | ✗ no | Not in VT100/VT220 — only 8 standard colors supported |
| Hidden/invisible (SGR 8) | ✓ yes | |
| Inverse video (SGR 7) | ✓ yes | |
| Italic (SGR 3) | ✗ no | Not in VT100/VT220 — use vterm.js for modern SGR |
| Overline (SGR 53) | ✓ yes | |
| Reset all (SGR 0) | ✓ yes | |
| Reset bold/dim (SGR 22) | ✓ yes | |
| Reset inverse (SGR 27) | ✓ yes | |
| Reset italic (SGR 23) | ✓ yes | |
| Reset underline (SGR 24) | ✓ yes | |
| Strikethrough (SGR 9) | ✗ no | Not in VT100/VT220 — use vterm.js for modern SGR |
| Underline color (SGR 58) | ✗ no | Not implemented — pure TypeScript emulator |
| Curly underline (SGR 4:3) | ✗ no | Not in VT100/VT220 — only single underline supported |
| Dashed underline (SGR 4:5) | ✗ no | Not in VT100/VT220 — only single underline supported |
| Dotted underline (SGR 4:4) | ✗ no | Not in VT100/VT220 — only single underline supported |
| Double underline (SGR 21) | ✗ no | Not in VT100/VT220 — only single underline supported |
| Underline (SGR 4) | ✓ yes |
Text
| Feature | Support | Notes |
|---|---|---|
| Backspace (BS) | ✓ yes | |
| Basic text rendering | ✓ yes | |
| Combining characters (0 cols) | ✗ no | Combining characters not implemented — pure TypeScript emulator |
| Carriage return | ✓ yes | |
| Index (IND) | ✓ yes | |
| Line feed | ✓ yes | |
| Next line (NEL) | ✓ yes | |
| Overwrite at cursor | ✓ yes | |
| Reverse Index at Scroll Top | ✓ yes | |
| Tab stops | ✓ yes | |
| CJK wide chars (2 cols) | ✗ no | Not in VT100/VT220 — ASCII only, no Unicode width |
| Emoji wide chars (2 cols) | ✗ no | Not in VT100/VT220 — ASCII only, no Unicode width |
| Regional indicator flags (2 cols) | ✗ no | Emoji flag sequences not rendered as wide characters |
| Variation selector 16 (emoji presentation) | ✗ no | VS16 emoji variation selectors not handled |
| Emoji ZWJ sequences (2 cols) | ✓ yes | |
| Text wraps at width | ✓ yes |
Unicode
| Feature | Support | Notes |
|---|---|---|
| East Asian Ambiguous Width | ✓ yes | |
| Grapheme Cluster Cursor Movement | ✓ yes | |
| Tab Stops (HT) | ✓ yes | |
| Wide Char at Line Wrap | ✗ no | Not in VT100/VT220 — ASCII only, no Unicode width |