opentui

작성자: msmps

터미널 사용자 인터페이스를 구축하기 위한 포괄적인 OpenTUI 스킬입니다. 핵심 명령형 API, React 리컨실러, Solid 리컨실러를 다룹니다. 컴포넌트, 레이아웃, 키보드 처리, 애니메이션, 테스트를 포함한 모든 TUI 개발 작업에 사용하세요.

npx skills add https://github.com/msmps/opentui-skill --skill opentui

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
    • Layered keybindings/commands -> keymap/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)
├─ Standalone scrollbar -> components/containers.md (scrollbar)
├─ ASCII art banner/title -> components/text-display.md (ascii-font)
├─ PNG/JPEG/WebP/GIF image -> components/text-display.md (image)
├─ First-draw diagnostic -> components/text-display.md (time-to-first-draw)
├─ QR code -> components/text-display.md (qr-code, @opentui/qrcode)
├─ Embedded child terminal/VT output -> components/containers.md (Core only)
├─ Data table with borders/wrapping -> components/code-diff.md (TextTable)
├─ Code with syntax highlighting -> components/code-diff.md
├─ Diff viewer (unified/split, hunk nav) -> 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)
├─ Value slider -> components/inputs.md (slider)
├─ Declarative/layered keybindings -> keymap/REFERENCE.md (@opentui/keymap)
└─ 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
├─ Layered bindings, commands, leader keys -> keymap/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)
└─ Host/terminal clipboard service or 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 platform capabilities (audio, images, clipboard, notifications, SSH)"

Platform capability?
├─ Play loaded sound or MP3/FLAC stream -> core/api.md (Audio)
├─ Capture microphone PCM / record WAV -> core/api.md (Audio)
├─ Decode, transform, or display images -> components/text-display.md (image)
├─ Read/write host or terminal clipboard -> keyboard/REFERENCE.md (clipboard)
├─ Desktop notifications (OSC 9/777/99) -> core/api.md (triggerNotification)
├─ Custom stdin/stdout (PTY, xterm.js) -> core/api.md (createCliRenderer)
└─ Serve a TUI over SSH -> core/REFERENCE.md (@opentui/ssh)

"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.mdLow-level keyboard input handling
Keymap./references/keymap/REFERENCE.mdDeclarative layered keybindings (@opentui/keymap)
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, image, time-to-first-draw, styled text, qr-code
Containers./references/components/containers.mdbox, scrollbox, scrollbar, embedded-terminal, borders
Inputs./references/components/inputs.mdinput, textarea, select, tab-select, slider
Code & Diff./references/components/code-diff.mdcode, line-number, diff, markdown, text-table

Additional Packages

PackageDescriptionDocs
@opentui/keymapLayered keybinding/command engine (Bun or Node, no FFI)./references/keymap/REFERENCE.md
@opentui/qrcodeQR code component./references/components/text-display.md
@opentui/sshServe a TUI over SSH./references/core/REFERENCE.md
@opentui/threeThree.js WebGPU renderer (formerly core/src/3d)upstream packages/three
@opentui/examplesRunnable examples (formerly core/src/examples)upstream packages/examples

Core also ships loaded/streaming/captured Audio, native images, host and terminal clipboard services, and OSC desktop notifications.

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/examples/src Awesome List: https://github.com/msmps/awesome-opentui

관련 스킬

flutter-databases
flutter
MVVM을 준수하는 Flutter 데이터 레이어로, Repository 패턴, 상태 없는 서비스, 지능형 로컬 캐싱 전략을 포함합니다. 데이터 유형, 크기, 관계형 복잡성에 따라 지속성 기술(shared_preferences, sqflite, drift, hive_ce, isar_community 또는 파일 I/O) 선택을 안내합니다. Repository를 단일 진실 공급원으로 구현하며, DatabaseService와 ApiClient를 비공개 상태 없는 종속성으로 격리합니다. 도메인 모델, SQLite 작업 등에 대한 완전한 코드 예제를 제공합니다.
huggingface-zerogpu
huggingface
AI demos and GPU compute with Gradio Spaces and Hugging Face Spaces ZeroGPU. Use when writing or reviewing code that uses `@spaces.GPU`, configuring…
PR Review
openshift
oc(OpenShift CLI)에 대한 포괄적인 PR 리뷰입니다. 빌드, 테스트, 린팅을 실행한 후 Go 스타일 개선 사항을 적용하고 상세한 코드 리뷰 피드백을 제공합니다.
ef-core
github
Entity Framework Core 모범 사례 가이드로, 설계, 성능, 보안 및 테스트 패턴을 다룹니다. DbContext 설계, 엔터티 모델링, 성능 최적화, 마이그레이션, 쿼리 전략, 변경 추적, 보안 및 테스트 접근 방식 등 8가지 핵심 영역을 포함하며, DbContextFactory, IEntityTypeConfiguration 분리, 읽기 전용 쿼리를 위한 AsNoTracking(), 자주 실행되는 작업을 위한 컴파일된 쿼리와 같은 실용적인 패턴을 강조합니다. 마이그레이션 모범 사례도 포함됩니다...
analyzing-code-security
bitwarden
이 스킬은 사용자가 "코드 보안 문제 분석", "OWASP 취약점 확인", "CWE Top 25 기준 코드 검토", "찾기…"를 요청할 때 사용해야 합니다.
test-audio
facebook
iwsdk CLI를 사용하여 오디오 예제에 대해 오디오 시스템(AudioSource 로딩, 재생 상태, 정지, 공간 오디오)을 테스트합니다.
index-knowledge
cloudflare
코드베이스에 대한 계층적 AGENTS.md 지식 베이스를 생성합니다. 루트 및 복잡도 점수가 매겨진 하위 디렉토리 문서를 만듭니다.
golang-project-layout
samber
Go 프로젝트 레이아웃과 워크스페이스 설정 가이드를 제공합니다. 새 Go 프로젝트를 시작하거나, 기존 코드베이스를 정리하거나, 여러 패키지가 있는 모노레포를 설정하거나, 여러 메인 패키지가 있는 CLI 도구를 만들거나, cmd/internal/pkg 디렉토리 규칙을 결정하거나, 패키지 재구성, 패키지 분할, 모듈 분할을 논의할 때 사용하세요.
development