Use when building terminal UIs with Ink component patterns for React-based CLI applications.
View on GitHubTheBushidoCollective/han
jutsu-ink
January 24, 2026
Select agents to install to:
npx add-skill https://github.com/TheBushidoCollective/han/blob/main/jutsu/jutsu-ink/skills/ink-component-patterns/SKILL.md -a claude-code --skill ink-component-patternsInstallation paths:
.claude/skills/ink-component-patterns/# Ink Component Patterns
You are an expert in building terminal UIs with Ink, React for the terminal.
## Core Principles
- Use functional components with TypeScript for type safety
- Leverage Ink's built-in components (Box, Text, Newline, Spacer)
- Keep components focused and composable
- Use proper prop types and interfaces
- Handle terminal resizing gracefully
## Component Structure
### Basic Component
```tsx
import { Box, Text } from 'ink';
import React from 'react';
interface MyComponentProps {
title: string;
items: string[];
}
export const MyComponent: React.FC<MyComponentProps> = ({ title, items }) => {
return (
<Box flexDirection="column">
<Text bold color="cyan">
{title}
</Text>
{items.map((item, index) => (
<Box key={index} marginLeft={2}>
<Text>• {item}</Text>
</Box>
))}
</Box>
);
};
```
### Layout Patterns
#### Vertical Stack
```tsx
<Box flexDirection="column">
<Text>First item</Text>
<Text>Second item</Text>
</Box>
```
#### Horizontal Row
```tsx
<Box>
<Text>Left</Text>
<Spacer />
<Text>Right</Text>
</Box>
```
#### Centered Content
```tsx
<Box justifyContent="center" alignItems="center" height={10}>
<Text>Centered content</Text>
</Box>
```
#### Padded Container
```tsx
<Box padding={1} borderStyle="round" borderColor="cyan">
<Text>Content with border and padding</Text>
</Box>
```
## Common Patterns
### List with Icons
```tsx
interface ListItem {
icon: string;
label: string;
value: string;
}
const List: React.FC<{ items: ListItem[] }> = ({ items }) => (
<Box flexDirection="column">
{items.map((item, i) => (
<Box key={i}>
<Text color="yellow">{item.icon} </Text>
<Text bold>{item.label}: </Text>
<Text>{item.value}</Text>
</Box>
))}
</Box>
);
```
### Status Messages
```tsx
const StatusMessage: React.FC<{ type: 'success' | 'error' | 'warning'; message: string }> = ({
type,
message,
}) => {
con