PluginBench
Skill
Pass
Audit score 90

opentui

msmps/opentui-skill

Build terminal user interfaces with OpenTUI's core, React, or Solid frameworks.

What is opentui?

Comprehensive skill for developing terminal UIs using OpenTUI. Covers the imperative core API, React reconciler for declarative components, and Solid reconciler for fine-grained reactivity. Use this for any TUI development task including layout, keyboard handling, animations, and testing.

  • Choose between core imperative API, React reconciler, or Solid reconciler frameworks
  • Build components for text display, containers, inputs, code/diff viewing, and tables
  • Handle keyboard input, focus management, clipboard, and custom shortcuts
  • Create flexbox-style layouts with responsive sizing and absolute positioning
  • Implement timeline-based animations with easing and property transitions
  • Test TUI applications with snapshot and interaction testing

How to install opentui

npx skills add https://github.com/msmps/opentui-skill --skill opentui
Prerequisites
  • Bun runtime installed
  • Node.js/npm for project setup
  • Basic familiarity with your chosen framework (core, React, or Solid)
Claude Code
Cursor
Windsurf
Cline

How to use opentui

  1. 1.Run `npx skills add https://github.com/msmps/opentui-skill --skill opentui` to install
  2. 2.Choose your framework: read `./references/<framework>/REFERENCE.md` (core, react, or solid)
  3. 3.For your task, follow the decision trees in the skill guide (display content, user input, layout, animations, keyboard handling, or testing)
  4. 4.Read the relevant reference files based on your task (e.g., `components/inputs.md` for forms, `layout/REFERENCE.md` for positioning)
  5. 5.Use `create-tui` to scaffold new projects with `bunx create-tui -t <framework> <project-name>`
  6. 6.Follow critical rules: use `renderer.destroy()` instead of `process.exit()`, place options before arguments in create-tui, use nested tags for text styling

Use cases

Good for
  • Building a terminal dashboard with real-time data display and user input
  • Creating a code editor or diff viewer with syntax highlighting and line numbers
  • Developing an interactive CLI tool with forms, selections, and keyboard navigation
  • Building a terminal-based data table with scrolling and filtering
  • Creating animated terminal UI transitions and loading states
Who it's for
  • Terminal application developers
  • CLI tool builders
  • Full-stack developers building internal tools
  • Developers familiar with React or SolidJS wanting to build TUIs

opentui FAQ

Which framework should I choose: core, React, or Solid?

Use core for maximum control and performance with no framework overhead. Use React if you're familiar with React patterns and want declarative components. Use Solid for fine-grained reactivity and optimal re-renders.

How do I create a new OpenTUI project?

Use `bunx create-tui -t <framework> <project-name>` where framework is `core`, `react`, or `solid`. Remember: options must come before arguments.

What should I read first?

Always start with `./references/<framework>/REFERENCE.md` for your chosen framework. Then read additional files based on your task (e.g., `api.md` for components, `configuration.md` for setup, `gotchas.md` for troubleshooting).

How do I style text in React or Solid?

Use nested modifier elements, not props. See `components/text-display.md` for examples of proper text styling syntax.

What runtime requirements does OpenTUI have?

OpenTUI runs on Bun and uses Zig for native builds. See `./references/core/gotchas.md` for detailed runtime requirements and build guidance.

Full instructions (SKILL.md)

Source of truth, from msmps/opentui-skill.


name: opentui description: Comprehensive OpenTUI skill for building terminal user interfaces. Covers the core imperative API, React reconciler, and Solid reconciler. Use for any TUI development task including components, layout, keyboard handling, animations, and testing. metadata: references: core, react, solid

OpenTUI Platform Skill

Consolidated skill for building terminal user interfaces with OpenTUI. Use decision trees below to find the right framework and components, then load detailed references.

Critical Rules

Follow these rules in all OpenTUI code:

  1. Use create-tui for new projects. See framework REFERENCE.md quick starts.
  2. create-tui options must come before arguments. bunx create-tui -t react my-app works, bunx create-tui my-app -t react does NOT.
  3. Never call process.exit() directly. Use renderer.destroy() (see core/gotchas.md).
  4. Text styling requires nested tags in React/Solid. Use modifier elements, not props (see components/text-display.md).

How to Use This Skill

Reference File Structure

Framework references follow a 5-file pattern. Cross-cutting concepts are single-file guides.

Each framework in ./references/<framework>/ contains:

FilePurposeWhen to Read
REFERENCE.mdOverview, when to use, quick startAlways read first
api.mdRuntime API, components, hooksWriting code
configuration.mdSetup, tsconfig, bundlingConfiguring a project
patterns.mdCommon patterns, best practicesImplementation guidance
gotchas.mdPitfalls, limitations, debuggingTroubleshooting

Cross-cutting concepts in ./references/<concept>/ have REFERENCE.md as the entry point.

Reading Order

  1. Start with REFERENCE.md for your chosen framework
  2. Then read additional files relevant to your task:
    • Building components -> api.md + components/<category>.md
    • Setting up project -> configuration.md
    • Layout/positioning -> layout/REFERENCE.md
    • Keyboard/input handling -> keyboard/REFERENCE.md
    • Animations -> animation/REFERENCE.md
    • Troubleshooting -> gotchas.md + testing/REFERENCE.md

Example Paths

./references/react/REFERENCE.md           # Start here for React
./references/react/api.md              # React components and hooks
./references/solid/configuration.md    # Solid project setup
./references/components/inputs.md      # Input, Textarea, Select docs
./references/core/gotchas.md           # Core debugging tips

Runtime Notes

OpenTUI runs on Bun and uses Zig for native builds. Read ./references/core/gotchas.md for runtime requirements and build guidance.

Quick Decision Trees

"Which framework should I use?"

Which framework?
├─ I want full control, maximum performance, no framework overhead
│  └─ core/ (imperative API)
├─ I know React, want familiar component patterns
│  └─ react/ (React reconciler)
├─ I want fine-grained reactivity, optimal re-renders
│  └─ solid/ (Solid reconciler)
└─ I'm building a library/framework on top of OpenTUI
   └─ core/ (imperative API)

"I need to display content"

Display content?
├─ Plain or styled text -> components/text-display.md
├─ Container with borders/background -> components/containers.md
├─ Scrollable content area -> components/containers.md (scrollbox)
├─ ASCII art banner/title -> components/text-display.md (ascii-font)
├─ Data table with borders/wrapping -> components/code-diff.md (TextTable)
├─ Code with syntax highlighting -> components/code-diff.md
├─ Diff viewer (unified/split) -> components/code-diff.md
├─ Line numbers with diagnostics -> components/code-diff.md
└─ Markdown content (streaming) -> components/code-diff.md (markdown)

"I need user input"

User input?
├─ Single-line text field -> components/inputs.md (input)
├─ Multi-line text editor -> components/inputs.md (textarea)
├─ Select from a list (vertical) -> components/inputs.md (select)
├─ Tab-based selection (horizontal) -> components/inputs.md (tab-select)
└─ Custom keyboard shortcuts -> keyboard/REFERENCE.md

"I need layout/positioning"

Layout?
├─ Flexbox-style layouts (row, column, wrap) -> layout/REFERENCE.md
├─ Absolute positioning -> layout/patterns.md
├─ Responsive to terminal size -> layout/patterns.md
├─ Centering content -> layout/patterns.md
└─ Complex nested layouts -> layout/patterns.md

"I need animations"

Animations?
├─ Timeline-based animations -> animation/REFERENCE.md
├─ Easing functions -> animation/REFERENCE.md
├─ Property transitions -> animation/REFERENCE.md
└─ Looping animations -> animation/REFERENCE.md

"I need to handle input"

Input handling?
├─ Keyboard events (keypress, release) -> keyboard/REFERENCE.md
├─ Focus management -> keyboard/REFERENCE.md
├─ Paste events -> keyboard/REFERENCE.md
├─ Mouse events -> components/containers.md
├─ Text selection & copy-on-select -> keyboard/REFERENCE.md (selection)
└─ Clipboard (OSC 52) -> keyboard/REFERENCE.md (clipboard)

"I need to test my TUI"

Testing?
├─ Snapshot testing -> testing/REFERENCE.md
├─ Interaction testing -> testing/REFERENCE.md
├─ Test renderer setup -> testing/REFERENCE.md
└─ Debugging tests -> testing/REFERENCE.md

"I need to debug/troubleshoot"

Troubleshooting?
├─ Runtime errors, crashes -> <framework>/gotchas.md
├─ Layout issues -> layout/REFERENCE.md + layout/patterns.md
├─ Input/focus issues -> keyboard/REFERENCE.md
└─ Repro + regression tests -> testing/REFERENCE.md

Troubleshooting Index

  • Terminal cleanup, crashes -> core/gotchas.md
  • Text styling not applying -> components/text-display.md
  • Input focus/shortcuts -> keyboard/REFERENCE.md
  • Layout misalignment -> layout/REFERENCE.md
  • Flaky snapshots -> testing/REFERENCE.md

For component naming differences and text modifiers, see components/REFERENCE.md.

Product Index

Frameworks

FrameworkEntry FileDescription
Core./references/core/REFERENCE.mdImperative API, all primitives
React./references/react/REFERENCE.mdReact reconciler for declarative TUI
Solid./references/solid/REFERENCE.mdSolidJS reconciler for declarative TUI

Cross-Cutting Concepts

ConceptEntry FileDescription
Layout./references/layout/REFERENCE.mdYoga/Flexbox layout system
Components./references/components/REFERENCE.mdComponent reference by category
Keyboard./references/keyboard/REFERENCE.mdKeyboard input handling
Animation./references/animation/REFERENCE.mdTimeline-based animations
Testing./references/testing/REFERENCE.mdTest renderer and snapshots

Component Categories

CategoryEntry FileComponents
Text & Display./references/components/text-display.mdtext, ascii-font, styled text
Containers./references/components/containers.mdbox, scrollbox, borders
Inputs./references/components/inputs.mdinput, textarea, select, tab-select
Code & Diff./references/components/code-diff.mdcode, line-number, diff, markdown, text-table

Resources

Repository: https://github.com/anomalyco/opentui Core Docs: https://github.com/anomalyco/opentui/tree/main/packages/core/docs Examples: https://github.com/anomalyco/opentui/tree/main/packages/core/src/examples Awesome List: https://github.com/msmps/awesome-opentui