Components

The tables compare each component's availability across Core, React, and Solid.

An automatic framework element needs no component-specific registration. Separately registered elements require the package setup shown on their component page. Unavailable means that the shipped API does not expose that surface.

Display and layout

  • Text displays labels, prose, and styled text. Choose Code for parsed source or Markdown for documents.

  • Box lays out children and can draw a background, border, and title. Choose ScrollBox when the children must scroll.

ComponentPackageCore renderableReactSolidStatus
Text@opentui/coreTextRenderable<text> (automatic)<text> (automatic)Built in
Box@opentui/coreBoxRenderable<box> (automatic)<box> (automatic)Built in

Inline text elements

React and Solid also register <span>, <b>, <strong>, <i>, <em>, <u>, <br>, and <a>. These elements are built-in text children, not standalone layout components. Use them only inside <text>. The <a> element accepts href and creates terminal hyperlink metadata.

SurfacePackageCore renderableReactSolidStatus
Inline styling@opentui/react, @opentui/solidTextNodeRenderable<span>, <b>, <strong>, <i>, <em>, <u><span>, <b>, <strong>, <i>, <em>, <u>Built-in framework text nodes
Line break@opentui/react, @opentui/solidTextNodeRenderable<br><br>Built-in framework text node
Hyperlink@opentui/react, @opentui/solidTextNodeRenderable<a href><a href>Built-in framework text node

Input and selection

  • Input edits one line of text. Choose Textarea for multi-line editing.

  • Textarea edits multiple lines with cursor and selection support. Choose Input for one line.

  • Select shows discrete choices in a vertical list. Choose TabSelect for a horizontal strip or Slider for a continuous value.

  • TabSelect shows peer choices in a horizontal tab strip. Choose Select for a vertical list.

  • Slider selects a continuous value with a draggable thumb. Choose Select for discrete choices.

ComponentPackageCore renderableReactSolidStatus
Input@opentui/coreInputRenderable<input> (automatic)<input> (automatic)Built in
Textarea@opentui/coreTextareaRenderable<textarea> (automatic)<textarea> (automatic)Built in
Select@opentui/coreSelectRenderable<select> (automatic)<select> (automatic)Built in
TabSelect@opentui/coreTabSelectRenderable<tab-select> (automatic)<tab_select> (automatic)Built in
Slider@opentui/coreSliderRenderableUnavailableUnavailableBuilt-in Core renderable

Scrolling

  • ScrollBox owns scrollable children, clipping, and scrollbars. Use it for normal scrolling containers.

  • ScrollBar controls an external scroll position. Use it when another model owns the scroll state.

ComponentPackageCore renderableReactSolidStatus
ScrollBox@opentui/coreScrollBoxRenderable<scrollbox> (automatic)<scrollbox> (automatic)Built in
ScrollBar@opentui/coreScrollBarRenderableUnavailableUnavailableBuilt-in Core renderable

Rich content

  • Code displays syntax-highlighted source. Choose Markdown for documents or Diff for patches.

  • Markdown renders document structure and fenced code. Choose Code when all content is source code.

  • Line number gutter adds numbers and signs to line-aware content. Diff manages its own gutters.

  • Diff displays the first file patch in unified or split form. Create one instance for each file patch.

  • TextTable lays out styled cell data. Choose Markdown when the table starts as Markdown source.

ComponentPackageCore renderableReactSolidStatus
Code@opentui/coreCodeRenderable<code> (automatic)<code> (automatic)Built in
Markdown@opentui/coreMarkdownRenderable<markdown> (automatic)<markdown> (automatic)Built in
Line number gutter@opentui/coreLineNumberRenderable<line-number> (automatic)<line_number> is runtime built in. The Solid binding lacks an exact props declaration.Built in with a Solid typing limitation
Diff@opentui/coreDiffRenderable<diff> (automatic)<diff> is runtime built in. The Solid binding lacks an exact props declaration.Built in with a Solid typing limitation
TextTable@opentui/coreTextTableRenderableUnavailableUnavailableBuilt-in Core renderable

OpenTUI bundles parsers for JavaScript and JSX, TypeScript and TSX, Markdown and Markdown inline, and Zig. Other grammars require Tree-sitter configuration.

Graphics and media

  • ASCIIFont draws short text with bundled ASCII art fonts. Choose Text for labels and prose.

  • FrameBuffer exposes direct cell drawing. Choose Image when you only need to display an image source.

  • Image displays encoded images or a NativeImage. Use the NativeImage API to decode or transform pixels.

  • Video plays an MP4 file. Decoding, timing, and audio stay native.

  • QR code displays text as a scannable symbol. Use the QR encoder for matrices and serialized output.

  • Embedded terminal parses VT output and draws a child terminal. It does not start a process.

ComponentPackageCore renderableReactSolidStatus
ASCIIFont@opentui/coreASCIIFontRenderable<ascii-font> (automatic)<ascii_font> (automatic)Built in
FrameBuffer@opentui/coreFrameBufferRenderableUnavailableUnavailableAdvanced
Image@opentui/coreImageRenderable<image> (automatic)<image> (automatic)Built in
Video@opentui/coreVideoRenderable<video> (automatic)<video> (automatic)Built in
QR code@opentui/qrcodeQRCodeRenderableRegister @opentui/qrcode/react, then use <qr-code>Register @opentui/qrcode/solid, then use <qr_code>Separately registered
Embedded terminal@opentui/coreEmbeddedTerminalRenderableUnavailableUnavailableBuilt-in Core renderable

Use the Buffer API for low-level OptimizedBuffer ownership and drawing operations.

Diagnostics

TimeToFirstDraw is a diagnostic, not a general display component. See Rendering diagnostics for its timestamp behavior.