Skip to content

Introduction

@matthesketh/ink-* is a collection of 30 production-grade UI components for building terminal applications with Ink 5 and React.

Why?

Ink gives you React for the terminal, but the ecosystem of reusable components is thin. These packages fill the gaps with components you’d expect in any UI toolkit: tables, forms, modals, toasts, charts, trees, tabs, and more.

Every component:

  • Works with Ink 5 and React 18
  • Ships with TypeScript declarations
  • Has zero runtime dependencies beyond ink and react
  • Follows consistent API patterns

Packages by category

Layout

viewport, split-pane, modal, rule

tabs, breadcrumb, scrollable-list, pager, tree

Input

input-dispatcher, fuzzy-select, checkbox, radio, switch, textarea, masked-input, form, file-picker

Data Display

table, chart, gauge, pipeline, task-list, timeline, diff, markdown, log-viewer

Feedback

toast, status-bar, keybinding-help

Quick example

import React from 'react';
import { render } from 'ink';
import { Table } from '@matthesketh/ink-table';
const data = [
{ name: 'Alice', role: 'Admin' },
{ name: 'Bob', role: 'User' },
];
function App() {
return <Table data={data} columns={['name', 'role']} />;
}
render(<App />);

Source

All packages live in the wrxck/ink monorepo and are published independently to npm under the @matthesketh scope.