Skip to content

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.

FrameworkVersion policyRuntimeStable identityViewport visibilityClick by locator
Ink7.1.1Node.js ^22.0.0 || ^24.0.0; Bun >=1.2.15YesYesApplication setup required
OpenTUI0.5.3, 0.5.4, 0.5.6, 0.5.7, 0.5.8, 0.5.9, 0.5.10Bun >=1.2.15; Node.js ^22.0.0 || ^24.0.0YesYesYes
Textual8.2.8, capability checkedCPython >=3.9YesYesYes
tviewv0.42.0, capability checkedGo >=1.24; Node.js ^22.0.0 || ^24.0.0YesNoApplication setup required
Ratatui0.30.2Rust >=1.88; Cargo stableWith semantic_keyNoApplication setup required
Bubble Tea / Bubblesv1.3.10, v2.0.8, v2.0.9Go >=1.24; Node.js ^22.0.0 || ^24.0.0With SemanticKeyNoApplication 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-ink and 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.1 is enabled.
  • Install @termwright/probe-opentui and 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/opentui annotations 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.
  • Install the Python termwright probe and start the application through python -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 -S and python -E bypass 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.
  • Prepare an instrumented Cargo build with termwright-probe-ratatui.
  • Ordinary immediate-mode elements have identity for one frame only. Add a unique semantic_key when 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.
  • 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 SemanticKey when 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.

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.