Skip to content

vt100.js

Headless Backend

Pure TypeScript VT100 emulator. Zero dependencies, fastest backend.

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

vt100.js scores 56% (85/151) on the terminfo.dev feature matrix, with gaps in the Core TUI, Modern TUI, Rich TUI, Unicode baselines. Ranks #13 of 13 tested terminals. Missing 66 features.

Character Sets

FeatureSupportNotes
DEC line drawing character set✓ yes
DEC Special Graphics✓ yes
G0/G1 character set switching✓ yes
UTF-8 mode✓ yes

Cursor

FeatureSupportNotes
CUD stops at bottom✓ yes
CUP at screen boundaries✓ yes
CUP with DECOM✗ noCUP 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)✓ yesNo output stream — pure TypeScript emulator
Reverse Wrap (Mode 45)✓ yes
Save/restore cursor (DECSC)✓ yes
Cursor shape (DECSCUSR)✗ noNot implemented — pure TypeScript emulator

Device Status

FeatureSupportNotes
Mode Report (DECRPM)✗ noNo output stream — pure TypeScript emulator
Request Setting (DECRQSS)✗ noNo output stream — pure TypeScript emulator
Primary device attributes (DA1)✓ yesNo output stream — pure TypeScript emulator
Secondary Device Attributes (DA2)✗ noNo output stream — pure TypeScript emulator
Device status report (DSR 5)✓ yesNo output stream — pure TypeScript emulator
Feature Reporting (TERM_FEATURES)? unknown
Tertiary Device Attributes (DA3)✗ noNo output stream — pure TypeScript emulator
Query Terminfo (XTGETTCAP)✗ noNo output stream — pure TypeScript emulator
Terminal Version (XTVERSION)✗ noNo output stream — pure TypeScript emulator

Editing

FeatureSupportNotes
Delete characters (DCH)✓ yes
Delete lines (DL)✓ yes
Insert characters (ICH)✓ yes
Insert lines (IL)✓ yes
Repeat character (REP)✗ noREP not implemented — pure TypeScript emulator

Erase

FeatureSupportNotes
Erase character (ECH)✓ yes
ED at scroll region boundary✓ yes
EL erases with bg color✗ noEL 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)✗ noDECSED not implemented — pure TypeScript emulator

Extensions

FeatureSupportNotes
iTerm2 Inline Images (OSC 1337)✗ noNot implemented — pure TypeScript emulator
Kitty graphics protocol✗ noNot implemented — pure TypeScript emulator
Kitty keyboard protocol✗ noNot implemented — pure TypeScript emulator
Desktop Notifications (OSC 9/777)✗ noNot implemented — pure TypeScript emulator
VS Code Shell Integration (OSC 633)✗ noVS Code shell integration (OSC 633) not supported
Icon and title (OSC 0)✓ yes
Foreground color query (OSC 10)✗ noNot implemented — pure TypeScript emulator
Background color query (OSC 11)✗ noNot implemented — pure TypeScript emulator
iTerm2 Capability Reporting (OSC 1337)✗ noiTerm2-specific protocol not implemented — pure TypeScript emulator
iTerm2 Cell Size Reporting (OSC 1337)✗ noiTerm2-specific protocol not implemented — pure TypeScript emulator
Window title (OSC 2)✓ yes
Clipboard access (OSC 52)✗ noNot implemented — pure TypeScript emulator
OSC 5522 advanced clipboard✗ noNot implemented — pure TypeScript emulator
OSC 66 text sizing✗ noNot implemented — pure TypeScript emulator
Current directory (OSC 7)✗ noNot implemented — pure TypeScript emulator
Hyperlinks (OSC 8)✗ noNot implemented — pure TypeScript emulator
OSC 9;4 progress bar? unknown
Text reflow on resize✗ noNot implemented — pure TypeScript emulator
Semantic prompts (OSC 133)✗ noNot implemented — pure TypeScript emulator
Sixel graphics✗ noNot implemented — pure TypeScript emulator
Sixel support in DA1✗ noNot implemented — pure TypeScript emulator
24-bit truecolor✗ noNot in VT100/VT220 — only 8 standard colors supported

Input Protocols

FeatureSupportNotes
Button-Event Mouse (1002)✗ noNot in VT100/VT220 — xterm extension
CSI u Key Encoding✗ noCSI u keyboard protocol not implemented
modifyOtherKeys✗ noNot implemented — pure TypeScript emulator
modifyOtherKeys mode 3✗ noNot implemented — pure TypeScript emulator
Pixel Mouse Reporting (1016)✗ noSGR pixel mouse mode not implemented — pure TypeScript emulator
urxvt Mouse Reporting (1015)✗ nourxvt mouse mode (?1015) not implemented
X10 Mouse Tracking (9)✗ noX10 mouse mode (?9) not implemented

Modes

FeatureSupportNotes
Enter alt screen (DECSET 1049)✗ noNot 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)✗ noNot in VT100/VT220 — xterm extension
Mode 2031 color scheme reporting✗ noNot implemented — pure TypeScript emulator
Focus tracking (DECSET 1004)✗ noNot in VT100/VT220 — xterm extension
Insert/replace mode (IRM)✓ yes
Left/Right Margins (DECLRMM, Mode 69)✗ noDECLRMM not implemented — pure TypeScript emulator
All motion mouse (DECSET 1003)✗ noNot in VT100/VT220 — xterm extension
SGR mouse mode (DECSET 1006)✗ noSGR mouse encoding not implemented — pure TypeScript emulator
Mouse tracking (DECSET 1000)✗ noNot in VT100/VT220 — xterm extension
Origin mode (DECOM)✓ yes
Reverse video (DECSCNM)✓ yes
Synchronized output (DECSET 2026)✓ yes

Scrollback

FeatureSupportNotes
Scrollback accumulates✓ yes
Alt screen separate scrollback✗ noNot 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)

FeatureSupportNotes
256-color bg (SGR 48;5)✗ noNot in VT100/VT220 — only 8 standard colors supported
Bright bg colors (SGR 100-107)✗ noNot 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)✗ noNot in VT100/VT220 — only 8 standard colors supported
Blink (SGR 5)✓ yes
Bold (SGR 1)✓ yes
Faint/dim (SGR 2)✗ noNot in VT100/VT220 — use vterm.js for modern SGR
256-color fg (SGR 38;5)✗ noNot in VT100/VT220 — only 8 standard colors supported
Bright fg colors (SGR 90-97)✗ noNot 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)✗ noNot in VT100/VT220 — only 8 standard colors supported
Hidden/invisible (SGR 8)✓ yes
Inverse video (SGR 7)✓ yes
Italic (SGR 3)✗ noNot 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)✗ noNot in VT100/VT220 — use vterm.js for modern SGR
Underline color (SGR 58)✗ noNot implemented — pure TypeScript emulator
Curly underline (SGR 4:3)✗ noNot in VT100/VT220 — only single underline supported
Dashed underline (SGR 4:5)✗ noNot in VT100/VT220 — only single underline supported
Dotted underline (SGR 4:4)✗ noNot in VT100/VT220 — only single underline supported
Double underline (SGR 21)✗ noNot in VT100/VT220 — only single underline supported
Underline (SGR 4)✓ yes

Text

FeatureSupportNotes
Backspace (BS)✓ yes
Basic text rendering✓ yes
Combining characters (0 cols)✗ noCombining 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)✗ noNot in VT100/VT220 — ASCII only, no Unicode width
Emoji wide chars (2 cols)✗ noNot in VT100/VT220 — ASCII only, no Unicode width
Regional indicator flags (2 cols)✗ noEmoji flag sequences not rendered as wide characters
Variation selector 16 (emoji presentation)✗ noVS16 emoji variation selectors not handled
Emoji ZWJ sequences (2 cols)✓ yes
Text wraps at width✓ yes

Unicode

FeatureSupportNotes
East Asian Ambiguous Width✓ yes
Grapheme Cluster Cursor Movement✓ yes
Tab Stops (HT)✓ yes
Wide Char at Line Wrap✗ noNot in VT100/VT220 — ASCII only, no Unicode width

Powered by Termless
Playwright for Terminals