Expert workflow for modern Ink CLI development and migration. Use when building React-based terminal apps with Ink, upgrading old Ink v4/v5 projects to v6+, implementing keyboard/paste/focus/cursor behavior, integrating @inkjs/ui components, or debugging/testing interactive CLI rendering in local and CI environments.
Build and troubleshoot production-grade Ink CLIs with current APIs and version-aware migration steps. Treat this skill as the default path when a task includes Ink architecture, interactive terminal UX, or Ink testing.
Run version checks before writing or changing code:
node -v
npm ls ink react --depth=0
If ink is below 6.x or react is below 19.x, treat it as a migration task and use references/bootstrap-and-migration.md.
create-ink-app, treat it as a shell scaffold and immediately upgrade dependencies because its shipped templates can lag behind latest Ink."type": "module") and verify Node engine compatibility.<Box>, <Text>, <Static>, <Spacer>, <Transform>, <Newline>.useInput for key events and navigation.usePaste for full pasted payload handling.useFocus/useFocusManager for keyboard-accessible focus models.useBoxMetrics for measured width/height/position.useWindowSize for responsive layout.useCursor for IME and cursor placement correctness.Use render() options according to environment:
interactive: true (default in TTY).kittyKeyboard only when you need richer key semantics (eventType, extra modifiers).concurrent: true only when you rely on Suspense/transitions and are ready for changed render timing.For static output generation (docs, file output, deterministic snapshots), use renderToString() instead of render().
ink-testing-library for frame-level assertions and stdin simulation.<Text> nodes.console.* with ad-hoc terminal writes unless behavior is intentional.When using this skill to deliver code or guidance, produce:
node, ink, react).useInput, usePaste, useBoxMetrics, etc.).