Framework compatibility
Ink, OpenTUI, Ratatui, and Bubble Tea integrations use the exact versions listed here. Textual and tview instead check the runtime or compiled capabilities of a compatible version; their table entry is the minimum and measured baseline.
When a test requires semantics and an integration cannot attach, launch fails. Otherwise the application can still run through the black-box terminal API.
Support matrix
Section titled “Support matrix”| Framework | Version policy | Runtime | Stable identity | Viewport visibility | Click by locator |
|---|---|---|---|---|---|
| Ink | 7.1.1 | Node.js ^22.0.0 || ^24.0.0; Bun >=1.2.15 | Yes | Yes | Application setup required |
| OpenTUI | 0.5.3, 0.5.4, 0.5.6, 0.5.7, 0.5.8, 0.5.9, 0.5.10 | Bun >=1.2.15; Node.js ^22.0.0 || ^24.0.0 | Yes | Yes | Yes |
| Textual | ≥ 8.2.8, capability checked | CPython >=3.9 | Yes | Yes | Yes |
| tview | ≥ v0.42.0, capability checked | Go >=1.24; Node.js ^22.0.0 || ^24.0.0 | Yes | No | Application setup required |
| Ratatui | 0.30.2 | Rust >=1.88; Cargo stable | With semantic_key | No | Application setup required |
| Bubble Tea / Bubbles | v1.3.10, v2.0.8, v2.0.9 | Go >=1.24; Node.js ^22.0.0 || ^24.0.0 | With SemanticKey | No | Application setup required |
“Application setup required” means the application must expose its production pointer routing to Termwright. Installing the integration alone is not enough. Every locator click also requires the application to enable terminal mouse reporting at runtime.
- Install
@termwright/probe-inkand launch through its wrapper. - Roles and names come from retained Ink nodes, rendered content, and optional
annotations from
termwright/ink. - Viewport geometry is available.
- Ink does not identify the focused host node automatically.
- Locator clicks are unavailable unless the application supplies pointer regions and hit testing. Bounds alone do not enable clicking.
- Only
7.1.1is enabled.
OpenTUI
Section titled “OpenTUI”- Install
@termwright/probe-opentuiand launch through its wrapper. - Stable identity, focus, clipped geometry, and pointer hit testing are available automatically.
- Framework type names can change after minification because they come from constructor names.
- Use
@termwright/opentuiannotations when native state does not contain the application role or name you need. - Tested versions:
0.5.3, 0.5.4, 0.5.6, 0.5.7, 0.5.8, 0.5.9, 0.5.10.
Textual
Section titled “Textual”- Install the Python
termwrightprobe and start the application throughpython -m termwright_probe -- …. - Stable identity, focus, clipped geometry, render order, and pointer hit testing are available for the active Textual screen.
- Inactive screens are absent from the semantic tree rather than present as hidden nodes.
python -Sandpython -Ebypass probe loading.- Minimum measured version:
8.2.8. Newer versions attach only when their runtime capabilities match.
- Prepare the Go build with
@termwright/probe-tview. - Built-in primitives expose stable identities, focus, roles, and intended bounds.
- Clipping and render order are unavailable.
- Locator clicks require the application to expose its production pointer router.
- Prebuilt binaries cannot be instrumented; run them through the black-box API.
- Minimum measured version:
v0.42.0. Newer versions must pass the integration’s compile-time capability checks.
Ratatui
Section titled “Ratatui”- Prepare an instrumented Cargo build with
termwright-probe-ratatui. - Ordinary immediate-mode elements have identity for one frame only. Add a
unique
semantic_keywhen a locator must follow the same element across frames. - Intended bounds are available; clipping and render order are not.
- Locator clicks require the application to expose its production pointer router.
- Git, path, alternate-registry, and multiple-version dependency graphs are not supported by the launcher.
- Tested version:
0.30.2.
Bubble Tea and Bubbles
Section titled “Bubble Tea and Bubbles”- Prepare the Go build with
@termwright/probe-charm. - The framework renders a styled string, so component geometry is not available automatically.
- Model values are copied during updates. Add a unique
SemanticKeywhen an element needs stable identity across frames. - Locator clicks require the application to expose its production pointer router.
- A project using Bubble Tea v1 and v2 at the same time cannot enable semantics.
- Tested versions:
v1.3.10, v2.0.8, v2.0.9.
Machine-readable data
Section titled “Machine-readable data”The JSON registry contains the full integration contracts used by Termwright’s checks. Its JSON Schema is available for tooling.
The registry includes internal capability and conformance fields that are not required for writing tests. Use the framework guides and table above for the public behavior.