Skip to content
cccskills
FreePublished on GitHub

ink

Comprehensive Ink skill for building CLI applications with React. Covers components (Text, Box, Static, Transform), hooks (useInput, useApp, useFocus), Flexbox layout, testing, and accessibility.

The English summary is being prepared. Showing the original description.

shadcn-labs/termcn1,219 stars(GitHub 1,219 + cccskills 0)

Run score Not tested

See how to install

Files included (24)

  • SKILL.md10.2 KB
  • references/accessibility/REFERENCE.md5.3 KB
  • references/components/box.md4.9 KB
  • references/components/REFERENCE.md1.7 KB
  • references/components/text.md2.4 KB
  • references/components/utilities.md3.3 KB
  • references/core/api.md3.4 KB
  • references/core/configuration.md3.7 KB
  • references/core/gotchas.md4.6 KB
  • references/core/patterns.md6.7 KB
  • references/core/REFERENCE.md3.1 KB
  • references/hooks/app-lifecycle.md1.9 KB
  • references/hooks/focus.md5.2 KB
  • references/hooks/input.md3.7 KB
  • references/hooks/REFERENCE.md1.7 KB
  • references/hooks/stdio.md3.1 KB
  • references/layout/patterns.md3.8 KB
  • references/layout/REFERENCE.md4.1 KB
  • references/testing/REFERENCE.md5.3 KB
  • rules/components.md8.3 KB
  • rules/core.md9.0 KB
  • rules/hooks.md10.1 KB
  • rules/performance.md6.6 KB
  • rules/RULES.md1.4 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Ink Platform Skill

Consolidated skill for building CLI applications with Ink (React for CLIs). Use decision trees below to find the right components and patterns, then load detailed references.

Critical Rules

Follow these rules in all Ink code:

  1. All text must be wrapped in <Text>. Raw strings outside <Text> will throw an error.
  2. <Text> only allows text nodes and nested <Text>. You cannot nest <Box> inside <Text>.
  3. <Box> is always display: flex. Think of every <Box> as <div style="display: flex">.
  4. Use useApp().exit() to exit. Never call process.exit() directly from within components.
  5. Install both ink and react. They are peer dependencies: npm install ink react.
  6. <Static> only renders new items. Changes to previously rendered items are ignored.

How to Use This Skill

Reference File Structure

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

./references/core/ contains:

FilePurposeWhen to Read
REFERENCE.mdOverview, when to use, quick startAlways read first
api.mdrender(), renderToString(), Instance, measureElementWriting code
configuration.mdRender options, environment varsConfiguring an app
patterns.mdCommon patterns, best practicesImplementation guidance
gotchas.mdPitfalls, limitations, debuggingTroubleshooting

Component, hook, and concept references in ./references/<area>/ have REFERENCE.md as the entry point.

Reading Order

  1. Start with core/REFERENCE.md for project overview
  2. Then read additional files relevant to your task:
    • Building UI -> components/REFERENCE.md + specific component files
    • Handling input -> hooks/input.md
    • Layout/positioning -> layout/REFERENCE.md
    • App lifecycle -> hooks/app-lifecycle.md
    • Focus management -> hooks/focus.md
    • Testing -> testing/REFERENCE.md
    • Accessibility -> accessibility/REFERENCE.md
    • Troubleshooting -> core/gotchas.md
    • Best practices / rules -> rules/RULES.md + specific rule files

Example Paths

./references/core/REFERENCE.md             # Start here
./references/core/api.md                   # render(), renderToString()
./references/components/text.md            # <Text> component
./references/components/box.md             # <Box> component (layout, borders)
./references/hooks/input.md                # useInput hook
./references/layout/patterns.md            # Common layout recipes
./references/testing/REFERENCE.md          # ink-testing-library
./rules/RULES.md                           # Best practices entry point
./rules/performance.md                     # FPS, Static, memoization
./rules/components.md                      # Per-component rules
./rules/hooks.md                           # Per-hook rules
./rules/core.md                            # render(), errors, environment

Quick Decision Trees

"I need to display content"

Display content?
├─ Plain or styled text -> components/text.md
├─ Container with layout -> components/box.md
├─ Container with borders -> components/box.md (borderStyle)
├─ Container with background color -> components/box.md (backgroundColor)
├─ Line breaks within text -> components/utilities.md (Newline)
├─ Flexible spacer -> components/utilities.md (Spacer)
├─ Permanent log output (completed items) -> components/utilities.md (Static)
└─ Transform text output (uppercase, gradient) -> components/utilities.md (Transform)

"I need user input"

User input?
├─ Keyboard shortcuts/arrow keys -> hooks/input.md (useInput)
├─ Raw stdin access -> hooks/stdio.md (useStdin)
├─ Tab/Shift+Tab focus cycling -> hooks/focus.md (useFocus)
├─ Programmatic focus control -> hooks/focus.md (useFocusManager)
└─ Cursor positioning (IME) -> hooks/focus.md (useCursor)

"I need layout/positioning"

Layout?
├─ Horizontal row of elements -> layout/REFERENCE.md (flexDirection: row)
├─ Vertical stack of elements -> layout/REFERENCE.md (flexDirection: column)
├─ Centering content -> layout/patterns.md
├─ Spacing between elements -> layout/REFERENCE.md (gap, margin, padding)
├─ Fixed width/height -> components/box.md (width, height)
├─ Percentage sizing -> components/box.md (width: "50%")
├─ Min/max constraints -> components/box.md (minWidth, maxWidth, maxHeight)
├─ Push elements apart -> components/utilities.md (Spacer)
├─ Flex grow/shrink -> layout/REFERENCE.md (flexGrow, flexShrink)
├─ Wrapping content -> layout/REFERENCE.md (flexWrap)
├─ Overflow control -> components/box.md (overflow)
└─ Complex nested layouts -> layout/patterns.md

"I need to manage app lifecycle"

App lifecycle?
├─ Mount and render -> core/api.md (render)
├─ Render to string (no terminal) -> core/api.md (renderToString)
├─ Exit the app programmatically -> hooks/app-lifecycle.md (useApp, exit)
├─ Wait for app to finish -> core/api.md (waitUntilExit)
├─ Re-render with new props -> core/api.md (rerender)
├─ Unmount the app -> core/api.md (unmount)
└─ Write to stdout/stderr outside Ink -> hooks/stdio.md

"I need to test my CLI"

Testing?
├─ Render and check output -> testing/REFERENCE.md
├─ Simulate user input -> testing/REFERENCE.md (stdin.write)
├─ Snapshot testing -> testing/REFERENCE.md
└─ Check last rendered frame -> testing/REFERENCE.md (lastFrame)

"I need accessibility"

Accessibility?
├─ Screen reader support -> accessibility/REFERENCE.md
├─ ARIA roles (checkbox, button, etc.) -> accessibility/REFERENCE.md
├─ ARIA state (checked, disabled, etc.) -> accessibility/REFERENCE.md
├─ Custom screen reader labels -> accessibility/REFERENCE.md (aria-label)
└─ Hide from screen readers -> accessibility/REFERENCE.md (aria-hidden)

"I need to debug/troubleshoot"

Troubleshooting?
├─ Text rendering issues -> core/gotchas.md
├─ Layout problems -> core/gotchas.md + layout/REFERENCE.md
├─ Input not working -> core/gotchas.md + hooks/input.md
├─ Process not exiting -> core/gotchas.md
├─ CI rendering issues -> core/configuration.md (CI mode)
├─ Console output mixing -> core/configuration.md (patchConsole)
└─ Performance/flickering -> core/configuration.md + rules/performance.md

"I want best practices / production-ready code"

Best practices?
├─ General rules (critical) -> rules/RULES.md
├─ Performance (FPS, Static, memoization) -> rules/performance.md
├─ Per-component patterns & anti-patterns -> rules/components.md
├─ Per-hook patterns & gotchas -> rules/hooks.md
└─ render() / errors / environment behavior -> rules/core.md

Troubleshooting Index

  • Text outside <Text> -> core/gotchas.md
  • <Box> inside <Text> -> core/gotchas.md
  • Process hanging/not exiting -> core/gotchas.md
  • Console.log mixing with output -> core/configuration.md
  • Layout misalignment -> layout/REFERENCE.md
  • Input not received -> hooks/input.md + rules/hooks.md
  • Focus not cycling -> hooks/focus.md + rules/hooks.md
  • CI output issues -> core/configuration.md + rules/core.md
  • Flickering/performance -> core/configuration.md + rules/performance.md
  • Anti-patterns / pitfalls -> rules/components.md, rules/hooks.md, rules/core.md

Product Index

Core

AreaEntry FileDescription
Core./references/core/REFERENCE.mdOverview, quick start, project setup
API./references/core/api.mdrender, renderToString, Instance
Config./references/core/configuration.mdRender options, environment variables
Patterns./references/core/patterns.mdCommon patterns and recipes
Gotchas./references/core/gotchas.mdPitfalls and debugging

Components

ComponentEntry FileDescription
Overview./references/components/REFERENCE.mdAll components at a glance
Text./references/components/text.mdText display and styling
Box./references/components/box.mdLayout, borders, backgrounds
Utilities./references/components/utilities.mdNewline, Spacer, Static, Transform

Hooks

HookEntry FileDescription
Overview./references/hooks/REFERENCE.mdAll hooks at a glance
Input./references/hooks/input.mduseInput for keyboard handling
App Lifecycle./references/hooks/app-lifecycle.mduseApp for exit control
Stdio./references/hooks/stdio.mduseStdin, useStdout, useStderr
Focus./references/hooks/focus.mduseFocus, useFocusManager, useCursor

Cross-Cutting Concepts

ConceptEntry FileDescription
Layout./references/layout/REFERENCE.mdYoga/Flexbox layout system
Layout Patterns./references/layout/patterns.mdCommon layout recipes
Testing./references/testing/REFERENCE.mdink-testing-library
Accessibility./references/accessibility/REFERENCE.mdScreen reader & ARIA support

Best Practices (Rules)

Rule FileEntry FileDescription
Overview./rules/RULES.mdEntry point + 10 critical rules
Performance./rules/performance.mdFPS tuning, Static, memoization, incremental rendering
Components./rules/components.mdBox, Text, Static, Transform, Newline, Spacer rules
Hooks./rules/hooks.mduseInput, useApp, useFocus, useCursor, useStdin rules
Core./rules/core.mdrender(), renderToString(), errors, CI, Kitty protocol

Resources

Repository: https://github.com/vadimdemedes/ink npm: https://www.npmjs.com/package/ink Testing Library: https://github.com/vadimdemedes/ink-testing-library Create Ink App: https://github.com/vadimdemedes/create-ink-app

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Launch and promote a custom shadcn/ui registry end-to-end: validate registry.json, prepare the official shadcn-ui/ui directory PR, community directory PRs (registry.directory, shadcntemplates, birobirobiro/awesome-shadcn-ui, bytefer/awesome-shadcn-ui), and draft social posts for Reddit r/shadcn, X, Dev.to, and Hacker News. Use whenever the user says "launch my registry", "list on shadcn directory", "submit to awesome-shadcn-ui", "announce my shadcn registry", "registry.directory PR", or wants to promote a new @scope registry — even if they do not say "launch-shadcn-registry" explicitly.

The English summary is being prepared. Showing the original description.

shadcn-labs/termcn1.2KUpdated Oct 7, 2026

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.

The English summary is being prepared. Showing the original description.

shadcn-labs/termcn1.2KUpdated Oct 7, 2026

Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.

The English summary is being prepared. Showing the original description.

shadcn-labs/termcn1.2KUpdated Oct 7, 2026

Guide for implementing smooth, native-feeling animations using React's View Transition API (`<ViewTransition>` component, `addTransitionType`, and CSS view transition pseudo-elements). Use this skill whenever the user wants to add page transitions, animate route changes, create shared element animations, animate enter/exit of components, animate list reorder, implement directional (forward/back) navigation animations, or integrate view transitions in Next.js. Also use when the user mentions view transitions, `startViewTransition`, `ViewTransition`, transition types, or asks about animating between UI states in React without third-party animation libraries.

The English summary is being prepared. Showing the original description.

shadcn-labs/termcn1.2KUpdated Oct 7, 2026

Add haptic feedback to web apps using the web-haptics library. Use when building mobile-facing UIs that need tactile feedback on buttons, toggles, forms, pickers, and other interactive elements.

The English summary is being prepared. Showing the original description.

shadcn-labs/termcn1.2KUpdated Oct 7, 2026

Reference for writing and editing skills well — the vocabulary and principles that make a skill predictable.

The English summary is being prepared. Showing the original description.

shadcn-labs/termcn1.2KUpdated Oct 7, 2026

See all skills by shadcn-labs

Report a problem with this skill