Skip to content

Terminal compatibility

Termwright runs the application in a real PTY and renders its output with the shared headless terminal emulator. “Real PTY” does not mean that Termwright emulates every feature of Kitty, iTerm2, or another terminal application.

FeatureRendered or deliveredAssertableNotes
Normal and alternate screenYesYesscreen().buffer identifies the active buffer.
ANSI/SGR color and attributesYesYesAvailable per cell and in cell snapshots.
Cursor position and visibilityYesYesPosition is part of screen() and shell.status().
DECSCUSR cursor shapeYesYesBlock, underline, and bar shapes are exposed when set.
Terminal title (OSC 0/2)YesYesUse title(), waitForTitle(), or shell.status().
BellYesYesCounted by shell.status(); audio is not played.
OSC 8 hyperlinksYesYesURI and retained id are available on cells.
Bracketed pasteYesYespaste() follows the mode enabled by the child.
Application cursor keysYesYesArrow-key bytes follow the active mode.
SGR mouseYesYes where observablePointer actions additionally require exact target ownership.
Focus in/out reportsYesYes where observableMode state is unknown where the host hides it.
Synchronized outputYesYesRender revisions settle after the synchronized block.
OSC 7 working directoryNo visible outputYesExposed through shell.status().
OSC 133 shell integrationNo visible outputYesEnables exact prompts, command output, and exit codes.
OSC 52 clipboardNot exposedNoTests should not depend on the host clipboard.
Kitty keyboard protocolNoNoUse the documented key encodings and standard terminal modes.
Sixel / Kitty graphics / iTerm imagesNoNoImage payloads are not rendered into cells.

Certified PTY backends, including pinned passthrough ConPTY, expose mouse and focus mode changes to Termwright. unknown is reserved for an embedding that explicitly cannot prove what the child requested; it is never converted into a positive or negative fact.

Run termwright doctor on the target host and keep OS coverage in the CI matrix. The repository’s PTY conformance suite exercises escape transport on supported CI platforms.

Terminal profiles select deterministic width and resize behavior. They do not emulate the terminal application named by the profile. See Terminal profiles for the current Unicode and grapheme limits.