opentui

Build terminal UIs with OpenTUI. Covers Core, frameworks, components, application APIs, testing, extensions, integrations, deployment, and public API lookup.

Install
npx skills add 'https://github.com/anomalyco/opentui/tree/main/packages/web/src/content'
Download bundle ↓
main · ac753b4Scanned 2026-09-15

Contributors

GitHub-linked commit authors for this SKILL.md at the saved revision. Co-authors and history before file renames are not included.

File history ↗

docs/components/overview.mdx

docs/components/overview.mdxBrowse 89 files
View on GitHub
← Back to SKILL.md

title: Components description: Choose a component and compare Core, React, and Solid availability skill: entry: true intents: [components, component, component-support, support-matrix, react-components, solid-components]

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.
  • 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
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.

Referenced from SKILL.md