Skip to content

Compatibility

Terminal compatibility and benchmarks

Which terminal sequences Wormhole supports, where support is partial, and what our recorded tests measured.

01/Overview

Compatibility at a glance

Core terminal behavior is supported. Graphics and extended input protocols have the limits listed below.

Supported behavior

  • Cursor movement, scrolling regions, alternate screens and bracketed paste.
  • True color, styled underlines, hyperlinks and shell integration.
  • Unicode character widths and grapheme clusters, with results from ucs-detect below.
  • Inline images through kitty, iTerm2 and Sixel protocols, with the limits listed alongside.
Browse the protocol reference

Known limits

The results below were recorded on October 15, 2026 using Mac17,8, Apple M5 Pro, macOS 27.0.1. Wormhole was a 1.0 pre-release build. These are results for the listed builds and settings, not measurements of the latest releases.

02/Test suites

Terminal behavior tests

Wormhole passed 538 of 566 measured esctest2 cases. All recorded ucs-detect width cases matched the expected widths.

esctest2 tests terminal control sequences, including cursor movement, erasing and scrolling, against xterm behavior. ucs-detect compares reported cursor positions with the widths expected by the wcwidth library. Neither suite establishes that every application or font renders correctly.

esctest2

Some esctest2 cases require screen checksums or other query responses. Cases that a terminal cannot expose to the suite are marked unmeasurable, not failed. The percentages therefore use different denominators. Use the Common cases column to compare the 323 cases measured in every completed run. Wormhole’s screen-checksum setting was enabled for this run; it is off by default. Wormhole failures by area: Reports: 2 of 30; Colors, titles, selection: 21 of 51; Window operations: 5 of 28.

Cases passed out of 323

The same test subset for each completed run. Bars show passed cases; interrupted runs have no score.

  1. Wormhole295/323
  2. Ghostty141/323
  3. Alacritty121/323
  4. kitty135/323
  5. WezTerm174/323
  6. iTerm2Not measured
  7. Terminal.app111/323

Scroll horizontally to see all columns.

TerminalCommon cases (323)VersionPassedFailedUnmeasurableMeasuredPass rate
Wormhole295/323 (91.3%)1.0 pre-release53828056695.1%
Ghostty141/323 (43.7%)1.3.114118524032643.3%
Alacritty121/323 (37.5%)0.17.012121523033636.0%
kitty135/323 (41.8%)0.49.213519423732941.0%
WezTerm174/323 (53.9%)20240203-110809-5046fc22340226056660.1%
iTerm2–3.7.4Not measured yet––––
Terminal111/323 (34.4%)2.1511121723832833.8%

October 15, 2026 · Mac17,8, Apple M5 Pro, macOS 27.0.1 · esctest2 2798f12149a1 (Thomas Dickey, GPL-2.0) · 80 x 25 cells, Menlo 13 pt · load average at the start 4.01 3.53 3.48

esctest2 query support and results by area

Scroll horizontally to see all columns.

Terminalcursor position (DSR 6)DA1text area size (CSI 18 t)CSI 14 tCSI 16 tchecksum of a rectangle (DECRQCRA)checksum form
WormholeYesYesYesYesYesYespositive
GhosttyYesYesYesYesYesNo-
AlacrittyYesYesYesYesNoNo-
kittyYesYesYesYesYesNo-
WezTermYesYesYesYesYesYespositive
iTerm2UnknownUnknownUnknownUnknownUnknownUnknownUnknown
TerminalYesYesYesYesNoNo-

Scroll horizontally to see all columns.

Area (tests)WormholeGhosttyAlacrittykittyWezTermTerminal
Cursor movement (132)132/13275/9557/10472/95131/13267/96
Erasing and editing (129)129/1294/81/84/879/1293/8
Rectangular operations (32)32/324/43/44/48/324/4
Margins (9)9/91/11/11/19/91/1
Modes and resets (120)120/12029/8924/9025/9263/12022/90
Tabs (6)6/63/65/65/66/65/6
Cursor save and restore (22)22/2212/149/148/1420/228/14
Reports (30)28/305/301/304/303/300/30
Colors, titles, selection (52)30/518/5120/5112/5114/510/51
Strings (APC, DCS, PM, SOS) (7)7/7---7/7-
Window operations (28)23/280/280/280/280/281/28

ucs-detect

Percentages show how often reported widths matched the suite’s expected widths. Italic rows are results published by the ucs-detect author on other machines and versions. They are reference data, not controlled comparisons with this run. WezTerm's run did not finish (no result within 1800s), so it has no row.

Scroll horizontally to see all columns.

TerminalwidenarrowZWJ emojiVS16VS15flags (RI pairs)lone RIlone skin tonelanguagesgrapheme clustering (mode 2027)ambiguous widthseconds
Wormhole100.0% (506/506)100.0% (5595/5595)100.0% (1445/1445)100.0% (426/426)100.0% (158/158)100.0% (262/262)100.0% (26/26)100.0% (5/5)100.0% (6589/6589)enablednarrow0
Ghostty99.8% (505/506)99.9% (5590/5595)100.0% (1445/1445)100.0% (426/426)100.0% (158/158)100.0% (262/262)100.0% (26/26)100.0% (5/5)98.4% (6485/6589)enablednarrow1
Ghostty published (1.3.1-arch2, Linux)99.8% (505/506)99.9% (5524/5529)100.0% (1445/1445)100.0% (426/426)100.0% (158/158)100.0% (262/262)100.0% (26/26)100.0% (5/5)99.5% (6490/6522)enablednarrow7
Alacritty94.9% (480/506)99.6% (5570/5595)0.7% (10/1445)50.0% (213/426)0.0% (0/158)100.0% (262/262)0.0% (0/26)100.0% (5/5)84.4% (5558/6589)nonarrow1
Alacritty published (, Linux)94.9% (480/506)99.5% (4975/5000)1.0% (10/1010)50.0% (213/426)0.0% (0/158)100.0% (262/262)0.0% (0/26)100.0% (5/5)85.3% (5563/6522)nonarrow2
kitty99.0% (501/506)99.6% (5570/5595)100.0% (1445/1445)97.9% (417/426)100.0% (158/158)100.0% (262/262)100.0% (26/26)0.0% (0/5)45.4% (2990/6589)nonarrow47
kitty published (0.48.2, Linux)97.8% (43587/44568)99.9% (36227/36254)100.0% (1445/1445)97.9% (417/426)100.0% (158/158)100.0% (262/262)100.0% (26/26)0.0% (0/5)79.5% (19898/25043)nonarrow629
iTerm2Not measured yet–––––––––––
iTerm2 published (3.7.3, Darwin)97.8% (43591/44568)100.0% (36237/36254)17.2% (249/1445)100.0% (426/426)0.0% (0/158)100.0% (262/262)100.0% (26/26)100.0% (5/5)93.7% (23462/25043)nonarrow22377
Terminal94.9% (480/506)98.3% (5500/5595)0.0% (0/1445)50.0% (213/426)0.0% (0/158)98.9% (259/262)0.0% (0/26)100.0% (5/5)81.0% (5334/6589)nonarrow9
Terminal published (488, Darwin)97.8% (43566/44568)99.7% (36159/36254)0.0% (0/1445)50.0% (213/426)0.0% (0/158)98.9% (259/262)0.0% (0/26)100.0% (5/5)93.4% (23400/25043)nonarrow37

October 15, 2026 · Mac17,8, Apple M5 Pro, macOS 27.0.1 · ucs-detect 50f011d991a2 (Jeff Quast, MIT), its default run (the contested codepoints and graphemes), wcwidth 0.8.4 · 80 x 25 cells, Menlo 13 pt · load average at the start 4.01 3.53 3.48

Completed, interrupted and failed suite runs

Scroll horizontally to see all columns.

SuiteTerminalResultVersionSeconds
esctestWormholeok1.0 pre-release87
esctestGhosttyok1.3.1134
esctestAlacrittyok0.17.096
esctestkittyok0.49.2106
esctestWezTermok20240203-110809-5046fc22278
esctestiTerm2Not measured yet3.7.4–
esctestTerminal.appok2.15267
ucs-detectWormholeok1.0 pre-release21
ucs-detectGhosttyok1.3.17
ucs-detectAlacrittyok0.17.08
ucs-detectkittyok0.49.2165
ucs-detectWezTermfailed: no result within 1800s20240203-110809-5046fc221930
ucs-detectiTerm2Not measured yet3.7.4–
ucs-detectTerminal.appok2.1557

iTerm2’s suite results are excluded because permission prompts interrupted the run. Its benchmark results are included in the next section. Load average at the start: 4.01 3.53 3.48.

03/Benchmarks

Performance benchmarks

Measured output throughput and response times for the listed app builds, followed by engine-only tests. Recorded on October 15, 2026 with Wormhole 1.0 pre-release, Ghostty 1.3.1, Alacritty 0.17.0, kitty 0.49.2, WezTerm 20240203-110809-5046fc22, iTerm2 3.7.4, Terminal.app 2.15. Newer releases may be faster or slower.

In the app

ttystorm, our benchmark tool, sends workloads to each running app and waits for terminal responses. It does not measure keypress-to-pixel latency or frames actually displayed. Higher values are better except for roundtrip, where lower is better. Wormhole led 14 of 17 workloads in this run. Other workload leaders: iTerm2 on agentstream; Alacritty on stylestorm and linkstorm.

Relative benchmark score

Approximate geometric mean across the recorded workloads. The vertical marker is Terminal.app at 1×; higher scores are better. This is not a measure of typing latency.

  1. Wormhole≈ 6.3×
  2. Ghostty≈ 3.6×
  3. Alacritty≈ 4.8×
  4. kitty≈ 2.9×
  5. WezTerm≈ 1.2×
  6. iTerm2≈ 0.5×
  7. Terminal.app≈ 1.0×

Scroll horizontally to see all columns.

TestWormholeGhosttyAlacrittykittyWezTermiTerm2Terminal.app
buildlogA cargo-style build log: colored lines and a progress bar redrawn in place.188 MB/s109 MB/s171 MB/s109 MB/s29.9 MB/s22.0 MB/s44.3 MB/s
agentstreamAn agent's answer in 2 to 16 byte writes, with a spinner redrawn under it.9.0 MB/s8.9 MB/s9.5 MB/s9.0 MB/s9.6 MB/s9.8 MB/s8.2 MB/s
agentredrawA coding agent's main-screen UI, a dozen styled rows redrawn in full every frame.90006 fps46689 fps55055 fps41699 fps14557 fps10415 fps17809 fps
agentscreenThe same agent's full-screen UI: many tiny positioned writes.201502 fps98994 fps103473 fps73654 fps33001 fps17536 fps31470 fps
diffscrollPaging through a colored diff in a pager.188 MB/s104 MB/s166 MB/s97.7 MB/s24.7 MB/s26.1 MB/s46.1 MB/s
editstormAn editor at work: scroll region, insert and delete lines and characters, repaints.189 MB/s114 MB/s180 MB/s90.7 MB/s51.4 MB/s17.1 MB/s32.7 MB/s
logfloodPlain log lines, like cat of a big file.227 MB/s129 MB/s183 MB/s160 MB/s50.1 MB/s68.4 MB/s48.1 MB/s
glyphstormCJK, emoji, combining marks, box drawing.166 MB/s130 MB/s101 MB/s92.4 MB/s9.6 MB/s11.5 MB/s25.2 MB/s
colorfloodEvery character with its own 24-bit foreground and background.272 MB/s97.7 MB/s163 MB/s119 MB/s146 MB/s39.0 MB/s3.1 MB/s
scrollstormLines pushed through a scroll region with reverse index.221 MB/s126 MB/s170 MB/s161 MB/s46.6 MB/s9.9 MB/s46.7 MB/s
cursorstormRandom cursor moves with short colored writes.192 MB/s111 MB/s175 MB/s105 MB/s36.5 MB/s26.2 MB/s21.3 MB/s
longlinesLines of 5 to 50 thousand characters that wrap.231 MB/s136 MB/s178 MB/s162 MB/s51.1 MB/s108 MB/s49.9 MB/s
stylestormEvery SGR attribute, densely mixed.143 MB/s85.3 MB/s152 MB/s85.2 MB/s54.0 MB/s17.9 MB/s25.8 MB/s
linkstormOSC 8 hyperlinks on short spans, thousands of distinct URLs.152 MB/s44.0 MB/s178 MB/s105 MB/s69.5 MB/s16.3 MB/s41.5 MB/s
framerateFull-screen redraws in synchronized output, in frames per second.1101 fps568 fps560 fps680 fps828 fps115 fps35.3 fps
screenswapOpening and closing a full-screen program over and over.28922 /s18251 /s17576 /s13454 /s4487 /s93.1 /s5491 /s
roundtrip1,000 cursor-report round trips on an idle terminal (lower is better).12 µs16 µs20 µs678 µs3785 µs14239 µs45 µs
Geometric mean, Terminal.app = 1×6.3×3.6×4.8×2.9×1.2×0.5×1.0×

The summary is a geometric mean of relative results, with latency ratios inverted. Displayed ratios are approximate because the source table rounds its summary values. This score describes these workloads, not overall responsiveness.

App versions, settings and benchmark conditions

Scroll horizontally to see all columns.

AppResultVersionGrid seenIn frontLoad at start
Wormholeok1.0 pre-release40x120yes3.90
Ghosttyok1.3.140x120yes3.91
Alacrittyok0.17.040x120yes3.87
kittyok0.49.240x120yes3.81
WezTermok20240203-110809-5046fc2240x120yes3.77
iTerm2ok3.7.440x120yes3.61
Terminal.appok2.1540x120yes3.35

Apps ran one at a time in the foreground, without custom settings where the harness could disable them. It requested the same grid and font; iTerm2 and Terminal.app retained their profile fonts. The table records the actual grids. Wormhole was a 1.0 pre-release build. iTerm2 and Terminal.app ran later the same day.

October 15, 2026 · Mac17,8, Apple M5 Pro, macOS 27.0.1 · load average at the start 4.24 10.19 11.40 · asked for 120 x 40 cells, Menlo 13 pt (an app that can't be told from the command line has its own)

Engine throughput and memory allocations

Engine throughput

These tests feed output directly to each engine without rendering a window. Each workload contains 8 MiB each, sent in 64 KiB pieces. Results use the fastest of 5 passes. Higher throughput is better; the largest value in each row is bold. Wormhole led 7 of 9 workloads. Other workload leaders: Ghostty on unicode-mix and payloads.

Scroll horizontally to see all columns.

MB/sAlacrittyWormholeWezTermvt100Ghostty
ascii-floodPrintable ASCII with no line breaks: the terminal wraps it.2332764672571800
log-linesTimestamped log lines of varying length, some colored.2481528662411207
sgr-churn256-color and true-color foregrounds and backgrounds, attributes and underline styles changing every few characters.23237949253165
unicode-mixCJK, emoji (ZWJ, flags, skin tones, VS16), combining marks and box drawing among ASCII.20733070212414
tui-redrawA full-screen program redrawing with cursor addressing on the alternate screen.24475442210465
scroll-regionOutput scrolling inside scroll regions with IL, DL, SU, SD and RI.21280957220648
osc8-linksOSC 8 hyperlinks, titles, working directories and prompt marks.1914697029927
payloadsLong OSC, DCS and APC strings (kitty graphics chunks, Sixel, clipboard) between lines of text.4225692913891008
agent-sessionA coding agent's session: streamed markdown, spinners, diffs, boxes, progress bars, an image.32053471353231
vs the first engine1.00x2.85x0.29x1.06x1.62x

Allocation counts show allocator calls per megabyte on the first and second passes. They do not measure stuttering or total memory use. Wormhole recorded zero calls on the second pass for 5 of 9 workloads; Ghostty did so for 6. Ghostty’s direct memory mappings are not included, so the counts do not cover the same allocation mechanisms for every engine.

Scroll horizontally to see all columns.

Calls per MBAlacrittyWormholeWezTermvt100Ghostty
ascii-flood1193 / 019 / 025211 / 2521412499 / 125000 / 0
log-lines1193 / 056 / 029234 / 2923811165 / 111680 / 0
sgr-churn2810 / 1617173 / 0467143 / 49023013381 / 133830 / 0
unicode-mix18075 / 168821212 / 5049829 / 4983210319 / 103200 / 0
tui-redraw0 / 01 / 0112 / 775 / 01 / 0
scroll-region119 / 00 / 048625 / 4863521633 / 216330 / 0
osc8-links71995 / 7080213806 / 13560285969 / 2859728306 / 830818912 / 18908
payloads687 / 5661673 / 16416356 / 6374160 / 162483 / 483
agent-session4324 / 31311421 / 121035370 / 362114298 / 43001301 / 1301

October 15, 2026 · Mac17,8, Apple M5 Pro, macOS 27.0.1 · aarch64, 18 cores · load average at the start 3.89 11.22 11.83

Background load, settings and benchmark variation can affect both values and rankings. The results shown here do not include confidence intervals.

04/Engine tests

Engine tests: 758 of 758 passed

Wormhole’s development tests, run against five terminal engines as libraries.

We wrote these tests while developing Wormhole. They are useful regression checks, but they are not an independent assessment of compatibility. 655 cases follow published specifications; 103 cover behavior we chose where the documentation did not specify an outcome.

The references include xterm, DEC manuals, ECMA-48, Unicode and individual protocol specifications. Each engine runs as a library without its app or renderer. n/a means the test cannot be applied through that engine’s interface; it is not counted as a failure.

Results by area and engine versions

Scroll horizontally to see all columns.

AreaCasesWormholeGhosttyWezTermAlacrittyvt100
altscreen1717/1716/1716/1713/1711/17
charsets4444/4422/4416/4413/445/41 (+3 n/a)
checksum1717/172/172/172/170/0 (+17 n/a)
conformance-levels1414/141/142/140/140/4 (+10 n/a)
cursor5656/5655/5653/5645/5641/56
edit3333/3327/3323/3322/3317/33
erase3131/3130/3119/3118/3117/31
graphics1111/1110/115/115/114/8 (+3 n/a)
margins3131/3123/3125/315/315/31
modes1313/1310/139/139/136/6 (+7 n/a)
origin1212/1212/1212/129/128/11 (+1 n/a)
osc2929/2922/2920/2926/298/11 (+18 n/a)
parser2727/2726/2724/2725/2725/27
rect-attributes4545/458/458/459/4510/34 (+11 n/a)
rect5656/5615/5615/5615/5615/55 (+1 n/a)
reports7070/7047/7033/7030/701/1 (+69 n/a)
reset2222/2222/2219/2214/2214/20 (+2 n/a)
resize1212/1211/1211/1211/124/12
save-restore1616/1614/1615/1614/169/14 (+2 n/a)
scroll2828/2827/2828/2828/2821/28
sgr6565/6565/6565/6562/6542/46 (+19 n/a)
tabs2323/2323/2322/2321/2310/23
unicode5252/5246/5220/5229/5226/50 (+2 n/a)
window1212/123/123/123/120/0 (+12 n/a)
wrap2222/2221/2219/2219/2214/22
all758758/758558/758484/758447/758313/581 (+177 n/a)
spec655655/655470/655411/655378/655267/491 (+164 n/a)
convention103103/10388/10373/10369/10346/90 (+13 n/a)

October 15, 2026 · Mac17,8, Apple M5 Pro, macOS 27.0.1

The engines

  • Wormhole: Wormhole engine used in this test run
  • Ghostty: libghostty-vt @ad97d331 (Ghostty's terminal)
  • WezTerm: wezterm-term @e2a98e1b (WezTerm's terminal model)
  • Alacritty: alacritty_terminal 0.26.0
  • vt100: vt100 0.16.2

WezTerm's engine runs with its default settings, as in the app. Alacritty's engine is the one Wormhole used until 1.0.

05/Protocol reference

Terminal protocol reference

Supported sequences, partial implementations and opt-in behavior, grouped by function.
Yes Supported as described.
Partial Supported with the listed limits.
Opt-in Requires a setting; see the notes.
No Not implemented or intentionally ignored.
Unknown No recorded measurement.

05.01/7 features

Cursor and text

Cursor positioning, tab stops, wrapping and saved cursor state.

Related development tests: 56 cursor, 12 origin, 22 wrap, 23 tabs, 16 save-restore, 27 parser cases.

Scroll horizontally to see all columns.

FeatureSequenceStatusNotes
Cursor movementCUU CUD CUF CUB CNL CPL CHA CUP VPA VPR HPR HPA HVPYes
Index, reverse index, next lineIND NEL RI HTS DECBI DECFIYes
Save and restore the cursorDECSC DECRC SCOSC SCORCYesCSI s is DECSLRM instead while margins are on.
Tab stopsHT CHT CBT TBC DECST8CYes
Origin mode, autowrap, reverse wrapmodes 6, 7, 41, 45, 1045Yes
Cursor shape and blinkDECSCUSR, modes 12, 25YesBlock, bar or underline, blinking or not.
Screen alignment testDECALNYes

05.02/4 features

Erase, insert and delete

Sequences for clearing cells, inserting text and deleting lines or columns.

Related development tests: 31 erase, 33 edit cases.

Scroll horizontally to see all columns.

FeatureSequenceStatusNotes
Erase and editED EL ECH ICH DCH IL DL SU SD REPYesED 3 clears scrollback. On the main screen, ED 2 moves non-empty lines into scrollback before clearing, unless immediately preceded by ED 3.
Selective erase and protectionDECSED DECSEL DECSCAYesErases skip protected cells.
Insert and delete columnsDECIC DECDCYes
Guarded areasSPA EPAYesED, EL and ECH preserve cells written between SPA and EPA.

05.03/3 features

Scrolling and margins

Vertical scroll regions and left and right margins.

Related development tests: 28 scroll, 31 margins cases.

Scroll horizontally to see all columns.

FeatureSequenceStatusNotes
Scrolling regionDECSTBMYes
Left and right marginsDECLRMM (mode 69), DECSLRMYesScrolling, insert and delete, and wrapping stay inside them.
Shift columnsSL SRYesShifts columns within the margins on each line of the scroll region. Newly exposed cells use the current background color.

05.04/5 features

Rectangular editing

Operations on rectangular screen areas, including attribute changes and checksums.

Related development tests: 56 rect, 45 rect-attributes, 17 checksum cases.

Scroll horizontally to see all columns.

FeatureSequenceStatusNotes
Erase a rectangleDECERA DECSERAYesDECSERA leaves protected cells alone.
Fill a rectangleDECFRAYes
Copy a rectangleDECCRAPartialOnly pages 0 and 1 are accepted. Other source or destination pages are ignored.
Change or reverse attributes in an areaDECCARA DECRARA DECSACEPartialBold, underline, blink, negative and hidden; other attributes are ignored.
Checksum of a rectangleDECRQCRAOpt-inEnable in Settings → Terminal → Privacy. Screen-checksum queries can reveal terminal contents to local or remote programs. Some test suites require them.

05.05/11 features

Modes

Terminal modes that programs can set, reset and query.

Related development tests: 13 modes, 17 altscreen, 22 reset, 12 resize, 14 conformance-levels cases.

Scroll horizontally to see all columns.

FeatureSequenceStatusNotes
Alternate screenmodes 47, 1047, 1048, 1049YesEach screen keeps its own pictures and keyboard flags.
Bracketed pastemode 2004Yes
Synchronized outputmode 2026YesAn unfinished synchronized update times out rather than leaving output hidden indefinitely.
Application cursor keys and keypadmodes 1, 66, 67Yes
Reverse video, insert, new linemodes 5, ANSI 4, ANSI 20Yes
132 columnsDECCOLM, modes 3, 40, 95PartialClears the screen and moves the cursor home without changing the pane’s column count.
Save and restore modesXTSAVE XTRESTOREYes
Soft and full resetDECSTR, RISYesRIS clears program status records; a soft reset preserves them.
Conformance levelDECSCLYesVT100 through VT500 levels. The selected level changes DA1 and DA2 replies and disables capabilities from higher levels.
7-bit and 8-bit controlsS7C1T S8C1TYesReplies use 8-bit control characters when requested.
Recorded, with no effectmodes 4, 8, 9, 1010, 1011, 1015, 1016, 1036, 1039, 1042, 1070, 2031, and the VT510's set-up modesNoSet and reset are remembered and DECRQM reports them; nothing changes. Modes 60, 1001, 1034, 1035, 1037 and 1038 report as permanently reset.

05.06/11 features

Reports and queries

Responses to queries about cursor position, terminal state and supported capabilities.

Related development tests: 70 reports, 12 window cases.

Scroll horizontally to see all columns.

FeatureSequenceStatusNotes
Device attributes and versionDA1 DA2 DA3 XTVERSIONYesDA1 answers as a VT520: Sixel, selective erase, rectangular editing, the locator, color and clipboard access.
Status and cursor positionDSR 5, 6, ?6 and the other ? reportsYes
Mode reportsDECRQMYesANSI and DEC private modes.
Setting reportsDECRQSSYesSGR, margins, cursor style, protection, conformance level, rows and columns, attribute extent.
Terminfo capabilitiesXTGETTCAPPartialReports a limited set: names, colors, true color, underline styles, bracketed paste, focus reports and synchronized output. Other capabilities receive a negative response.
Sixel graphics attributesXTSMGRAPHICSYes256 color registers, the screen's size in pixels.
Terminal state reportsDECRQPSR DECRQTSR DECRQDEYesCursor information, tab stops, the terminal state and the displayed extent, from the VT300 and VT400 levels.
Window state and size reportsCSI 11 t, 13 t to 16 t, 18 t, 19 tYesState, position, text area and screen in pixels, cell size, text area in cells, and the largest it could be.
Push and pop the titleCSI 22 t, 23 tYesKept per terminal.
Title reportsCSI 20 t, 21 tOpt-inAnswered only when window operations are allowed. A title is text the previous program chose, and the answer would land in the next program's input.
Window movement, resizing, minimizing and full screenXTWINOPS, DECSLPP, DECSNLS, DECCOLMOpt-inEnable in Settings → Terminal → Privacy. Local and remote programs can then move or resize the window. Cell-size requests resize the window to fit the requested pane dimensions.

05.07/3 features

Character sets

Box-drawing characters and the older national character sets some programs still use.

Related development tests: 44 charsets cases.

Scroll horizontally to see all columns.

FeatureSequenceStatusNotes
ASCII, UK, DEC special graphics, Technical and Supplemental, Latin-1ESC ( ) * + - . / with B, A, 0, >, % 5YesG0 to G3; locking and single shifts invoke them.
National replacement setsDECNRCM (mode 42), SCSYesThe eleven VT200 national replacement sets, as listed in the VT510 manual. Designation requires DECNRCM.
Right-hand set (GR) and the VT500's Greek, Hebrew, Turkish and CyrillicLS1R LS2R LS3RNoThe GR designation is stored and reported by DECCIR but is not used to render UTF-8 input.

05.08/6 features

Color and text style

Text attributes, indexed and true color, and underline styles.

Related development tests: 65 sgr cases.

Scroll horizontally to see all columns.

FeatureSequenceStatusNotes
Bold, dim, italic, underline, inverse, hidden, strikethroughSGR 1 2 3 4 7 8 9Yes
16, 256 and true colorSGR 30–37 38 48 90–107, with ; or :Yes
Underline stylesSGR 4:0 to 4:5, 21YesNone, single, double, curly, dotted, dashed.
Underline colorSGR 58, 59Yes
OverlineSGR 53, 55YesIn the underline color when one is set.
BlinkSGR 5, 6PartialText fades once a second; rapid and slow blink are identical. Text stays steady in background windows or with Reduce Motion enabled. Underlines and overlines do not blink.

05.09/10 features

Titles, folders, links and clipboard

Window titles, the current folder, clickable links, copy and paste, notifications.

Related development tests: 29 osc cases.

Scroll horizontally to see all columns.

FeatureSequenceStatusNotes
Window titleOSC 0, OSC 2YesThe terminal's name in its row, until it is renamed.
Current folderOSC 7, OSC 9;9YesA host other than this Mac, or a folder that isn't there, is ignored.
HyperlinksOSC 8YesWeb and mail links open with ⌘-click, a file: link on this Mac shows in the Finder, any other scheme is left alone.
ClipboardOSC 52YesPrograms can write to the clipboard and query its contents.
NotificationsOSC 9, OSC 99, OSC 777YesUnder the app's notification settings. Chunked OSC 99 is joined.
ProgressOSC 9;4PartialParsed and stored per terminal, but not displayed.
Prompt marksOSC 133 A B C DYesCommand blocks, exit codes, busy or at the prompt.
Set, query and reset colorsOSC 4, 5, 10–19, 104, 105, 110–119YesOverrides theme colors for the current terminal until reset. Queries return the active color. Named colors and CIE color formats are not supported.
Program statusOSC 7501YesWormhole's own protocol: idle, working, blocked, done or error becomes the terminal's status.
Pointer shape, systemd context, iTerm2 badges and marksOSC 22, OSC 3008, OSC 1337 other than File=, OSC 21337NoIgnored.

05.10/4 features

Graphics

Inline images using kitty, Sixel and iTerm2 protocols. Support differs by protocol.

Related development tests: 11 graphics cases.

Scroll horizontally to see all columns.

FeatureSequenceStatusNotes
kitty graphicsAPC GPartialDirect transfers (RGB, RGBA, PNG; zlib; chunked), placements with size and crop, deleting, queries, virtual placements with Unicode placeholders. Not supported: animation, file or shared-memory transfers, and relative placements.
SixelDCS q, modes 80, 8452PartialRGB and HLS colors, repeats, bands, raster attributes. Always starts with the VT340's colors: private palettes (mode 1070) are not read. ReGIS is not read.
iTerm2 inline imagesOSC 1337 File=YesPNG, JPEG, GIF's first frame; the multipart form. A file without inline=1 is a download, which the terminal does not do.
Limits on picturesYesPictures are untrusted input: at most 10,000 pixels on a side and 16 million per image, 32 MiB per command, 1,024 images in 128 MiB per terminal. A restored session brings back its text, not its pictures.

05.11/9 features

Unicode

Character widths and grapheme handling, using Unicode 18 data. Percentages below describe the recorded ucs-detect cases.

Related development tests: 52 unicode cases.

Scroll horizontally to see all columns.

FeatureSequenceStatusNotes
Wide charactersEast Asian WidthYesucs-detect: 100.0% (506/506).
Narrow characters and combining marksYesucs-detect: 100.0% (5595/5595).
Invalid UTF-8YesOne U+FFFD per maximal subpart; a character split between two reads is joined.
Grapheme clustersmode 2027YesOn from the start. CSI ? 2027 l turns it off for a program that counts code points; CSI ? 2027 $ p reports it.
ZWJ emojiYesucs-detect: 100.0% (1445/1445).
Emoji presentation (VS16)U+FE0FYesucs-detect: 100.0% (426/426).
Text presentation (VS15)U+FE0EYesucs-detect: 100.0% (158/158).
Flags (regional indicator pairs)Yesucs-detect: 100.0% (262/262).
Scripts and languagesYesucs-detect: 100.0% (6589/6589).

05.12/7 features

Keyboard and mouse

How your keys, mouse, scroll wheel and pastes reach the program.

Scroll horizontally to see all columns.

FeatureSequenceStatusNotes
kitty keyboard protocolCSI > u, < u, = u, ? uPartialKey encoding follows the flags requested by the program, with a separate stack per screen. Key-release, repeat and standalone modifier events are not sent.
DEC locatorDECELR DECSLE DECRQLP DECEFRYesThe mouse as a locator, for programs that ask for it. It replaces the xterm mouse reports while on.
Mouse click, drag and motionmodes 1000, 1002, 1003Yes
UTF-8 and SGR mouse coordinatesmodes 1005, 1006Yes
Urxvt and pixel mouse coordinates, X10 mousemodes 1015, 1016, 9NoRecorded and reported by DECRQM, with no effect.
Focus reportsmode 1004Yes
Alternate scrollmode 1007YesThe wheel sends arrow keys on the alternate screen.

06/Terminal comparison

Terminal comparison

Documented support and results from the recorded test runs. See each cell’s source and limitations.

Unknown means we couldn't find it documented either way (we checked on October 15, 2026), not that it's missing. Terminal.app’s column uses only our measurements. iTerm2’s interrupted suite runs are marked Unknown. Documentation entries were checked on that date and may differ from current releases.

Scroll horizontally to see all columns.

FeatureWormholeGhosttykittyWezTermiTerm2AlacrittyTerminal
kitty graphics protocol
PartialNo animation, files or shared memory.
UnknownUnknownUnknown
Sixel
PartialNo private palettes.
UnknownUnknown
Partial"Preliminary and incomplete".Source
UnknownUnknownUnknown
iTerm2 inline images
Yes
UnknownUnknownUnknownUnknown
Hyperlinks (OSC 8)
Yes
Unknown
Clipboard (OSC 52)
Yes
Unknown
PartialSet and clear; queries are ignored.Source
UnknownUnknown
kitty keyboard protocol
PartialNo key-release, repeat or standalone modifier events.
PartialA setting, off by default.Source
Unknown
Synchronized output (mode 2026)
Yes
YesListed as synchronized rendering.Source
UnknownUnknownUnknown
Grapheme clusters (mode 2027)Measured in this run
YesOn by default.
YesOn by default.
Noucs-detect finds no mode 2027.
UnknownNot measured: failed, no result within 1800s.
UnknownNot measured yet.
Noucs-detect finds no mode 2027.
Noucs-detect finds no mode 2027.
Desktop notifications
YesOSC 9, 99, 777.
YesOSC 9.Source
YesOSC 99, kitty's own.Source
YesOSC 9, 777.Source
YesOSC 9.Source
UnknownUnknown
Prompt marks (OSC 133)
Yes
UnknownUnknownUnknownUnknown
Progress (OSC 9;4)
PartialParsed but not displayed.
UnknownUnknownUnknownUnknownUnknown
Underline styles and colors
Yes
Unknown
PartialCurly and color documented.Source
PartialUnderline color (SGR 58, 59) listed; the styles are not.Source
Unknown
ZWJ emoji widths (ucs-detect)Measured in this run
Yes100.0% (1445/1445)
Yes100.0% (1445/1445)
Yes100.0% (1445/1445)
UnknownNot measured: failed, no result within 1800s.
UnknownNot measured yet.
Partial0.7% (10/1445)
No0.0% (0/1445)
Emoji presentation (VS16)Measured in this run
Yes100.0% (426/426)
Yes100.0% (426/426)
Partial97.9% (417/426)
UnknownNot measured: failed, no result within 1800s.
UnknownNot measured yet.
Partial50.0% (213/426)
Partial50.0% (213/426)
Flags (regional indicators)Measured in this run
Yes100.0% (262/262)
Yes100.0% (262/262)
Yes100.0% (262/262)
UnknownNot measured: failed, no result within 1800s.
UnknownNot measured yet.
Yes100.0% (262/262)
Partial98.9% (259/262)
Screen checksums (DECRQCRA)Measured in this run
YesOff by default: an opt-in setting.
No
No
Yes
UnknownNot measured yet.
No
No
Text-area size (CSI 18 t)Measured in this run
Yes
Yes
Yes
Yes
UnknownNot measured yet.
Yes
Yes
Yes
Partial
No
Unknown