opentui
This skill provides comprehensive documentation for OpenTUI, a terminal UI framework supporting Core, React, and Solid bindings.
Community author
- Agents
- Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode
- License
- MIT (permissive)
- Pin
- 8df8295pinned Oct 9, 2026
- Context cost
- about 3,000 tokenswhen the skill loads
- GitHub stars
- 13,496on anomalyco/opentui
- Scripts
- None found
What it does
“Build terminal UIs with OpenTUI. Covers Core, frameworks, components, application APIs, testing, extensions, integrations, deployment, and public API lookup.”
Generated summary from the skill's own text
This skill provides comprehensive documentation for OpenTUI, a terminal UI framework supporting Core, React, and Solid bindings. It covers building terminal applications with layout, keyboard input, components, audio and animation APIs, testing, extensions, SSH integration, and deployment across Bun and Node.js runtimes.
When to use it
- Building terminal user interfaces with flexible layouts and components
- Learning OpenTUI APIs, components, or framework bindings
- Setting up keyboard bindings, audio features, or SSH-based remote terminals
- Deploying terminal applications as standalone executables or bundles
When not to
- Creating web or desktop GUI applications with OpenTUI
- Developing Three.js applications requiring non-Bun runtimes
Install
These commands install from the publisher's repository and need no account.
skills CLI
npx skills add anomalyco/opentui --skill opentuiInstalls from the repository's default branch, which may have changed since the commit we checked.
GitHub CLI 2.90 or later
gh skill install anomalyco/opentui opentui@8df8295534aaf5c81ee62b236213e2f0dc92374dInstalls the commit we checked (8df8295).
Copy by hand
Download the folder at 8df8295 and put it in .claude/skills/opentui for Claude Code and in .agents/skills/opentui for Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode.
Copy for your agent
A prompt for any coding agent. It installs this skill from GitHub at the pinned commit, copies the files as they are, and runs nothing unless you ask.
Prompt
Install the agent skill "opentui" by anomalyco. Source, pinned to commit 8df8295534aaf5c81ee62b236213e2f0dc92374d: https://github.com/anomalyco/opentui/tree/8df8295534aaf5c81ee62b236213e2f0dc92374d/packages/web/src/content 1. Download that folder at exactly this commit. Do not use the default branch. 2. Copy every file unchanged, keeping the folder structure, into .claude/skills/opentui/ for Claude Code and .agents/skills/opentui/ for Codex, Cursor, Gemini CLI, GitHub Copilot and OpenCode. Create the folders if they do not exist. 3. Do not edit the files, and do not run any script in the folder unless I ask you to. 4. When you are done, list the files you copied and where you put them. Listing and checks: https://www.agentnative.dev/skills/anomalyco/opentui
SKILL.md at the pin
--- name: opentui description: Build terminal UIs with OpenTUI. Covers Core, frameworks, components, application APIs, testing, extensions, integrations, deployment, and public API lookup. --- # OpenTUI Skill Canonical reference docs are in the sibling `docs/**/*.mdx` files. Inside the OpenTUI repository, this skill root is `packages/web/src/content/`. The same files are available under `packages/web/src/content/docs/**/*.mdx` from the repository root. ## Terminal layout defaults Design for a terminal app, not a browser. Use the available columns and rows efficiently. - Do not use gaps between adjacent UI panels. - Do not add unnecessary margins or padding. - Prefer compact, information-dense layouts over website-style card spacing. ## Path invariant - `/docs` maps to `docs/getting-started.mdx`. - `/docs/components` maps to `docs/components/overview.mdx`. - Every other `/docs/<slug>` URL maps to `docs/<slug>.mdx` relative to this skill root. - From the repository root, prepend `packages/web/src/content/` to each source path. ## Choose packages Use Core directly or choose a React or Solid binding for the UI. Recommend companion packages when their features fit the task. Do not install every package by default. - [`@opentui/core`](docs/core-concepts/renderer.mdx): use imperative renderables and events with `createCliRenderer()`. - [`@opentui/react`](docs/bindings/react.mdx): use React components, JSX, and hooks with `createRoot()`. - [`@opentui/solid`](docs/bindings/solid.mdx): use Solid components, JSX, and signals with `render()`. - [`@opentui/keymap`](docs/keymap/overview.mdx): centralize keyboard bindings and named commands across views. The package supports focus-scoped layers, configurable shortcuts, and multi-key sequences. Start with `createDefaultOpenTuiKeymap()` from `@opentui/keymap/opentui`. Use `@opentui/keymap/react` or `@opentui/keymap/solid` for providers and hooks. [Direct keyboard events](docs/core-concepts/keyboard.mdx) or component-local bindings are enough for simple local input. - [`@opentui/ssh`](docs/reference/ssh.mdx): serve a terminal UI to standard SSH clients without a local app installation. Import `createServer()` from the package root. Pass each session's renderer to Core, React, or Solid. The package has no framework subpaths. Read the SSH guide for authentication, middleware, and session cleanup. - [`@opentui/qrcode`](docs/reference/qr-encoder.mdx): encode QR matrices, terminal text, or SVG, or display a `QRCodeRenderable`. For JSX, use `registerQRCode()` from `@opentui/qrcode/react` or `@opentui/qrcode/solid`. See the [QR code component](docs/components/qr-code.mdx). - [`@opentui/three`](docs/reference/three.mdx): render Three.js WebGPU scenes in the terminal with `ThreeRenderable`. This integration supports only Bun. Before you choose it, check its runtime and dependency requirements. See [Package entry points](docs/reference/package-entrypoints.mdx) for the full list of public imports. The list includes testing, addons, host adapters, and runtime-module maps. Use the [API and symbol index](docs/reference/api-index.mdx) to find exports. Use public package entry points instead of source-file deep imports. ## Reading order by area - Start: `/docs`, `/docs/getting-started/quickstart`, `/docs/getting-started/runtime-support` - Frameworks: `/docs/bindings/react`, `/docs/bindings/solid` - Core: `/docs/core-concepts/renderer`, `/docs/core-concepts/layout`, `/docs/core-concepts/keyboard` - Components: `/docs/components`, `/docs/components/text`, `/docs/components/input`, `/docs/components/image`, `/docs/components/embedded-terminal` - Application APIs: `/docs/core-concepts/clipboard`, `/docs/core-concepts/audio`, `/docs/application-apis/audio-streaming`, `/docs/application-apis/audio-capture`, `/docs/application-apis/animation` - Test and debug: `/docs/core-concepts/testing`, `/docs/test-and-debug/troubleshooting` - Extensions: `/docs/plugins/slots`, `/docs/extend/runtime-plugins` - Keymap: `/docs/keymap/overview` - Integrations: `/docs/reference/ssh`, `/docs/reference/three`, `/docs/reference/qr-encoder` - Native: `/docs/native/overview` - Ship: `/docs/ship/deploy`, `/docs/reference/standalone-executables` - Reference: `/docs/reference/api-index`, `/docs/reference/package-entrypoints`, `/docs/reference/env-vars`, `/docs/reference/native-image` ## Quick routing by intent | Intent(s) | Start here | | -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | | `getting-started`, `intro`, `examples`, `agent-skill` | `docs/getting-started.mdx` | | `installation`, `quickstart` | `docs/getting-started/quickstart.mdx` | | `runtime-support`, `bun`, `nodejs`, `native-artifacts`, `ffi`, `permissions`, `libc`, `runtime-assets` | `docs/getting-started/runtime-support.mdx` | | `react`, `jsx`, `hooks`, `keyboard`, `paste`, `focus`, `blur`, `selection`, `animation`, `testing` | `docs/bindings/react.mdx` | | `solid`, `jsx`, `signals`, `hooks`, `keyboard`, `animation`, `testing` | `docs/bindings/solid.mdx` | | `core`, `renderer`, `terminal`, `scrollback`, `lifecycle` | `docs/core-concepts/renderer.mdx` | | `layout`, `flexbox`, `yoga`, `positioning` | `docs/core-concepts/layout.mdx` | | `keyboard`, `input`, `keybindings`, `paste`, `focus` | `docs/core-concepts/keyboard.mdx` | | `components`, `component`, `component-support`, `support-matrix`, `react-components`, `solid-components` | `docs/components/overview.mdx` | | `text`, `styling`, `content`, `selection` | `docs/components/text.mdx` | | `input`, `form`, `editing`, `focus` | `docs/components/input.mdx` | | `image`, `image-renderable`, `image-display`, `kitty`, `sixel` | `docs/components/image.mdx` | | `embedded-terminal`, `terminal-renderable`, `ghostty`, `vt`, `pty` | `docs/components/embedded-terminal.mdx` | | `clipboard`, `copy`, `osc52`, `host-clipboard` | `docs/core-concepts/clipboard.mdx` | | `audio`, `native-audio`, `sound`, `playback`, `mixer`, `devices`, `tap` | `docs/core-concepts/audio.mdx` | | `audio-streaming`, `audio-stream`, `pcm`, `f32le`, `radio`, `mp3`, `flac`, `icy`, `backpressure`, `reconnect` | `docs/application-apis/audio-streaming.mdx` | | `audio-capture`, `microphone`, `pcm`, `recording`, `wav`, `audio-recorder` | `docs/application-apis/audio-capture.mdx` | | `animation`, `timeline`, `easing`, `use-timeline` | `docs/application-apis/animation.mdx` | | `testing`, `test-renderer`, `snapshots`, `frames` | `docs/core-concepts/testing.mdx` | | `troubleshooting`, `terminal-reset`, `ffi-errors`, `native-loading`, `runtime-plugins`, `protocols`, `test-timeouts` | `docs/test-and-debug/troubleshooting.mdx` | | `plugins`, `plugin`, `slots`, `registry`, `extensions` | `docs/plugins/slots.mdx` | | `runtime-plugins`, `dynamic-import`, `external-modules`, `bun-plugin`, `module-maps`, `plugin-loading` | `docs/extend/runtime-plugins.mdx` | | `keymap`, `keybindings`, `shortcuts`, `commands`, `leader`, `ex-commands` | `docs/keymap/overview.mdx` | | `ssh`, `remote-tui`, `ssh-server`, `authentication`, `middleware` | `docs/reference/ssh.mdx` | | `three`, `threejs`, `webgpu`, `3d`, `sprites`, `physics` | `docs/reference/three.mdx` | | `qr`, `qrcode`, `qr-encoder`, `svg-qr`, `gs1`, `eci`, `structured-append` | `docs/reference/qr-encoder.mdx` | | `deploy`, `bundle`, `bun-executable`, `nodejs-esm`, `node-sea`, `ssh-deployment` | `docs/ship/deploy.mdx` | | `standalone`, `executable`, `bun-compile`, `node-sea`, `node-assets` | `docs/reference/standalone-executables.mdx` | | `api`, `symbols`, `exports`, `public-api`, `api-index`, `lookup` | `docs/reference/api-index.mdx` | | `native`, `native-rendering`, `native-scene`, `native-api` | `docs/native/overview.mdx` | | `package-exports`, `entrypoints`, `subpath-exports`, `imports` | `docs/reference/package-entrypoints.mdx` | | `env`, `environment`, `configuration`, `flags` | `docs/reference/env-vars.mdx` | | `native-image`, `image-decode`, `png`, `jpeg`, `webp`, `gif`, `rgba`, `pixels`, `resize` | `docs/reference/native-image.mdx` | For a component request, read `docs/components/overview.mdx`, then open `docs/components/<name>.mdx`. For plugin slot details, start at `docs/plugins/slots.mdx`, then open the Core, React, or Solid page. For native applications, read `docs/native/overview.mdx`, `docs/native/resources.mdx`, and `docs/native/frames.mdx` in order. `docs/native/core.mdx` explains Core's TypeScript integration, not a native-language API. Read `docs/native/host-io-time.mdx` for Session clocks, terminal delivery, and native file operations. Then choose `docs/native/c.mdx` or `docs/native/zig.mdx` for a native program. ## Current skill entry pages - `docs/getting-started.mdx` - `docs/getting-started/quickstart.mdx` - `docs/getting-started/runtime-support.mdx` - `docs/bindings/react.mdx` - `docs/bindings/solid.mdx` - `docs/core-concepts/renderer.mdx` - `docs/core-concepts/layout.mdx` - `docs/core-concepts/keyboard.mdx` - `docs/components/overview.mdx` - `docs/components/text.mdx` - `docs/components/input.mdx` - `docs/components/image.mdx` - `docs/components/embedded-terminal.mdx` - `docs/core-concepts/clipboard.mdx` - `docs/core-concepts/audio.mdx` - `docs/application-apis/audio-streaming.mdx` - `docs/application-apis/audio-capture.mdx` - `docs/application-apis/animation.mdx` - `docs/core-concepts/testing.mdx` - `docs/test-and-debug/troubleshooting.mdx` - `docs/plugins/slots.mdx` - `docs/extend/runtime-plugins.mdx` - `docs/keymap/overview.mdx` - `docs/reference/ssh.mdx` - `docs/reference/three.mdx` - `docs/reference/qr-encoder.mdx` - `docs/native/overview.mdx` - `docs/ship/deploy.mdx` - `docs/reference/standalone-executables.mdx` - `docs/reference/api-index.mdx` - `docs/reference/package-entrypoints.mdx` - `docs/reference/env-vars.mdx` - `docs/reference/native-image.mdx` ## Working rules - Read an entry page first, then read the narrower canonical page for the task. - Read the sibling `docs/**/*.mdx` files directly. Do not copy their prose into this file. - Use canonical `/docs` URLs for references between documentation pages. For links in this file, use the corresponding relative `docs/**/*.mdx` paths.
From anomalyco/opentui at 8df8295, shown as plain text under its license: MIT (permissive). The license text is in LICENSE.
View SKILL.md on GitHub at 8df8295Files
- SKILL.md12 KB · d978beb6d778
- docs/
- application-apis/
- animation.mdx22 KB · 526ea6032211
- audio-capture.mdx18 KB · 0fa3ec376da8
- audio-streaming.mdx28 KB · ad1c488a4a6f
- bindings/
- react.mdx13 KB · 65389ecdba8b
- solid.mdx16 KB · d637b82e4fc9
- components/
- ascii-font.mdx6.0 KB · 58cb22e8b827
- box.mdx7.2 KB · 0ec4f7d7eca4
- code.mdx13 KB · ad889787420d
- diff.mdx6.6 KB · e500cc39b532
- embedded-terminal.mdx17 KB · 1985a2866798
- frame-buffer.mdx9.0 KB · d661120669e7
- image.mdx13 KB · 0546119f1633
- input.mdx6.8 KB · 2b79436ea15a
- line-number.mdx6.1 KB · cb79fc0ca1d9
- markdown.mdx13 KB · 4ace53092997
- overview.mdx10 KB · 1d4f358f6d3e
- qr-code.mdx6.3 KB · aaa31ebc3420
- scrollbar.mdx3.1 KB · bfcce529bdcb
- scrollbox.mdx9.4 KB · 30109a5b523d
- select.mdx7.7 KB · 123763eb00f0
- slider.mdx3.1 KB · d77abe4afd49
- tab-select.mdx7.1 KB · 5f8f821c104c
- text-table.mdx10 KB · 79e80718231a
- text.mdx7.2 KB · f259aad68682
- textarea.mdx11 KB · 3abfc140eb97
- time-to-first-draw.mdx5.6 KB · c8e61af835e5
- core-concepts/
- audio.mdx17 KB · fcd3485f7bb1
- clipboard.mdx16 KB · ec339600a78c
- colors.mdx8.2 KB · 86e43afc7142
- console.mdx9.8 KB · 669b34340992
- interaction.mdx15 KB · 211d2fec6947
- keyboard.mdx8.1 KB · 80fb2ee849a7
- layout.mdx14 KB · 7d6c5d33049f
- lifecycle.mdx14 KB · be1ea621a91b
- notifications.mdx6.8 KB · 255ef8a5b33d
- renderables.mdx7.7 KB · 6f91fb2bd0ef
- renderer.mdx12 KB · 09bd8e210f1a
- rendering-pipeline.mdx12 KB · 09830a4c87ec
- testing.mdx20 KB · 4b0f377e118d
- text-and-cells.mdx9.2 KB · 80a5a2c54017
- extend/
- custom-renderables.mdx21 KB · 3b6329156bbf
- editing.mdx23 KB · 6c146c2f2b3c
- post-processing.mdx12 KB · c2ad6bcbdc47
- runtime-plugins.mdx13 KB · f5bb4396e771
- getting-started.mdx3.1 KB · 1d5a60c6b94d
- getting-started/
- quickstart.mdx3.5 KB · d70fe5b93a18
- runtime-support.mdx9.7 KB · 6aff9624d338
- keymap/
- addons.mdx17 KB · ea7e091af798
- core.mdx37 KB · 1def8630373e
- custom-addons.mdx24 KB · 42f2bd2979fb
- hosts.mdx15 KB · 6aa85042b3f8
- overview.mdx5.5 KB · fb5c3be15631
- react.mdx7.0 KB · 6e591bbef37d
- solid.mdx6.9 KB · 777a27cf8e34
- native/
- c.mdx19 KB · 16d6e5c60089
- core.mdx19 KB · 4cbce7a4cb2b
- frames.mdx28 KB · 9a724f9cf09a
- host-io-time.mdx8.7 KB · c5c846f21d2e
- overview.mdx6.9 KB · a4cd8c5eded0
- resources.mdx20 KB · c132697c05ee
- zig.mdx8.7 KB · edec36b8eb7d
- plugins/
- core.mdx12 KB · bde4c3710f0b
- react.mdx6.3 KB · 3df7e8c328c7
- slots.mdx12 KB · c8174e62ebc6
- solid.mdx6.3 KB · 3791a5d99f7a
- reference/
- api-index.mdx136 KB · aa20e7cb7882
- buffer-api.mdx19 KB · 9424ad18d0d0
- color-matrix.mdx7.1 KB · c6fe2cf3eef6
- data-paths.mdx5.5 KB · b325b7dd3a78
- env-vars.mdx11 KB · fe9f1adaf67e
- native-image.mdx21 KB · 24bdf099ede0
- native-span-feed.mdx11 KB · 50aff6441717
- package-entrypoints.mdx15 KB · 064fc08cabb1
- qr-encoder.mdx15 KB · 4e21033c273d
- ssh.mdx17 KB · 6e7993b09484
- standalone-executables.mdx7.9 KB · 0b11bf6d38cc
- terminal-capabilities.mdx14 KB · 585de01dfd0c
- three.mdx17 KB · a0bbe300bfaa
- tree-sitter.mdx23 KB · c9493aea31d6
- yoga.mdx23 KB · 8ebc42498386
- ship/
- deploy.mdx6.4 KB · 6951c2787ebe
- test-and-debug/
- native-crashes.mdx2.2 KB · a175c2342ec9
- rendering-diagnostics.mdx12 KB · d9939582f2fd
- troubleshooting.mdx18 KB · 0943f4020227
- packages/
- opentui-core.mdx1.8 KB · 239551af229d
- opentui-examples.mdx1.3 KB · 00151f594403
- opentui-keymap.mdx958 B · 6a70260e121f
- opentui-qrcode.mdx1.2 KB · 3b3546aa1c55
- opentui-react.mdx1.4 KB · 955e6f49f2a6
- opentui-solid.mdx1.4 KB · c193025b31a8
- opentui-ssh.mdx1.0 KB · f2311c4c924f
- opentui-three.mdx991 B · 8ba63924e22d
- scrollback/
- fixing-markdown-tables.mdx3.8 KB · 53027a7f7704
- packages.md2.0 KB · caa6f66d3469
- whats-next-for-opentui.mdx9.2 KB · afdd007a55c9
96 files, 1.2 MB in total. Each file has a sha256 in the pin's manifest; the first 12 characters are shown.
Skill folder on GitHub at 8df8295Related in Frontend and design
next-bundle-optimizer
Audits Next.js applications to identify and reduce browser bundle size and initial-load work by analyzing routes, dependencies and client outputs.
by VercelOfficial publisher
Claude Code, Codex, Cursor +4 · about 2.3K tokens · pinned 7 days ago
next-cache-components-optimizer
Optimize Next.js routes to display meaningful UI instantly on initial load or client navigation by encoding the optimization goal as a failing…
by VercelOfficial publisher
Claude Code, Codex, Cursor +4 · about 5.6K tokens · pinned 7 days ago
next-partial-prefetching-adoption
Enables Partial Prefetching in Next.js 16.3+ apps and guides adoption through auditing Link prefetch behavior, preserving UI in tests or manually, and…
by VercelOfficial publisher
Claude Code, Codex, Cursor +4 · about 6.7K tokens · pinned 7 days ago
remotion-interactivity
This skill teaches how to structure Remotion code so the Studio IDE recognizes and makes it interactive.
by RemotionOfficial publisher
Claude Code, Codex, Cursor +3 · about 2.4K tokens · pinned 7 days ago
remotion-interactivity
This skill teaches how to structure Remotion video components to unlock Studio interactivity features like click selection, drag-and-drop, resizing, rotation…
by RemotionOfficial publisher
Claude Code, Codex, Cursor +3 · about 4.8K tokens · pinned 7 days ago
remotion-maps
This skill enables creating map-based animations with Remotion using four different mapping libraries: Mapbox, MapLibre, MapTiler, or CesiumJS.
by RemotionOfficial publisher
Contains scripts
Claude Code, Codex, Cursor +3 · about 240 tokens · pinned 7 days ago