ink

Renders JSON specs into interactive terminal UIs using Ink components.

Updated May 22, 2026
One-click install
npx skills add https://github.com/Asygnuz-S-A-S/one-star --skill ink-asygnuz-s-a-s
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: ink
Source: https://github.com/Asygnuz-S-A-S/one-star/tree/main/.agents/skills/ink
Command: npx skills add https://github.com/Asygnuz-S-A-S/one-star --skill ink-asygnuz-s-a-s

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires @json-render/core, @json-render/ink, zod, react, ink.

What problem does it solve? Building terminal user interfaces from structured data normally requires hand-writing Ink component trees. This Skill lets you turn JSON specs—often generated by an AI model—into interactive terminal UIs with standard components, state binding, visibility rules, and event-driven actions. ## Core Features & Use Cases - JSON-to-Terminal Rendering: Convert flat element-map specs into Ink component trees with layout, content, and interactive components like TextInput, Select, Tabs, and ProgressBar. - State, Binding & Actions: Use $state, $bindState, $template expressions, visibility conditions, repeat loops, and built-in setState/pushState/removeState actions for dynamic UIs. - Streaming & AI Integration: Stream specs progressively with useUIStream and generate AI system prompts from your catalog via the server export. - Use Case: Build an AI assistant that outputs JSON specs describing a dashboard with tabs, tables, and forms, then render it live in the terminal with two-way form binding and keyboard navigation. ## Quick Start Ask the AI to generate a JSON spec for a terminal dashboard with a heading, a table, and a select menu, then render it with the Ink renderer.

Frequently Asked Questions about ink

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I render a JSON spec as a terminal UI with Ink?▼

Define a catalog with defineCatalog and the Ink schema, create a registry with defineRegistry, then pass the spec to the Renderer component inside a JSONUIProvider. The spec uses a flat element map with a root key referencing element IDs.

How do I bind form inputs to state in json-render Ink?▼

Use the $bindState expression on the natural value prop of form components like TextInput or Select for two-way binding. For reading state one-way, use $state with a JSON Pointer path such as /form/name.

What components are included in the @json-render/ink standard catalog?▼

The standard catalog includes layout components (Box, Text, Spacer), content components (Heading, Table, Card, Markdown, BarChart, Sparkline), and interactive components (TextInput, Select, MultiSelect, ConfirmInput, Tabs) with keyboard navigation.

Can I stream AI-generated UI specs into the terminal?▼

Yes, use the useUIStream hook with an API endpoint to progressively render specs from JSONL patch streams. It returns the current spec, a send function, and an isStreaming flag for loading states.

How do I show or hide elements based on state in json-render?▼

Set the visible field on an element with a condition like { "$state": "/path", "eq": value }. Combine conditions with $and and $or operators, and the VisibilityProvider evaluates them at render time.

Does @json-render/ink support external state management?▼

Yes, create a store with createStateStore and pass it to StateProvider or JSONUIProvider via the store prop. Updates through store.set trigger React re-renders, and initialState is ignored in controlled mode.