TypeScript TUI.
Near-Native Performance.
56 widgets, functional or JSX syntax, and a native rendering engine. Build rich terminal interfaces with the DX you already know.
What You Can Build
From dashboards to developer tools — Rezi ships canvas graphics, data visualization, a code editor, and 50+ more widgets out of the box.
⡠⠔⠊⠉⠉⠉⠉⠊⠒⢄
⡇ ⢸
⠣⡀ ⢀⠜
⠈⠢⣀ ⣀⠔⠁
⠈⠒⠊⠁
▲
█ ▲ draw shapes
█ █ ▲ in braille,
█ █ █ ▲ sextant,
▀ ▀ ▀ ▀ or blocksCanvas API — lines, arcs, circles, rects with sub-cell precision
CPU ▁▂▃▅▇▅▃▂▁▂▃▅▇█▇▅
MEM ▂▂▃▃▃▄▄▅▅▅▆▆▆▆▇▇
Disk ████████████░░░░ 74%
Mem ██████████░░░░░░ 61%
PID NAME CPU%
1024 node 12.4
1031 zireael 8.1
1042 postgres 3.7Data Viz — sparklines, gauges, bar charts, tables, and heatmaps
1 import { ui } from 'rezi';
2
3 app.view((s) =>
4 ui.column([
5 ui.text('Hello'),
6 ui.text(s.name),
7 ]),
8 );Code Editor — syntax highlighting, search, undo/redo, diagnostics
Two Syntaxes, One Framework
Use the functional ui.* API or opt into JSX with zero React overhead. Same engine, same widgets — pick the style you prefer.
import { ui } from '@rezi-ui/core';
import { createNodeApp } from '@rezi-ui/node';
const app = createNodeApp<{ count: number }>({
initialState: { count: 0 },
});
app.view((s) =>
ui.column({ gap: 1 }, [
ui.text(`Count: ${s.count}`),
ui.button('inc', '+1', {
onPress: () =>
app.update((prev) => ({
count: prev.count + 1,
})),
}),
]),
);
await app.start();/** @jsxImportSource @rezi-ui/jsx */
import { createNodeApp } from '@rezi-ui/node';
import { Column, Text, Button } from '@rezi-ui/jsx';
const app = createNodeApp<{ count: number }>({
initialState: { count: 0 },
});
app.view((s) => (
<Column gap={1}>
<Text>Count: {'{s.count}'}</Text>
<Button
id="inc"
label="+1"
onPress={() =>
app.update((prev) => ({
count: prev.count + 1,
}))
}
/>
</Column>
));
await app.start();Everything You Need
A batteries-included framework for building production terminal applications.
56 Widgets
The most comprehensive widget library for terminal UIs. Buttons, tables, charts, modals, command palettes, and more — all out of the box.
Native C Rendering
The Zireael engine handles layout, diffing, and painting in native C. Your TypeScript code drives state; the engine drives pixels.
JSX Without React
Familiar JSX syntax with zero React overhead. The same mental model you already know, compiled to direct Zireael calls.
6 Themes
Built-in theme system with 6 hand-crafted palettes. Switch themes at runtime or let users choose their own.
Charts & Graphics
Sparklines, bar charts, line charts, and a full canvas API. Render data visualizations directly in the terminal.
Type-Safe
Full TypeScript with strict types across every API surface. Catch errors at compile time, not at runtime in production.
Widget Gallery
56 widgets across 11 categories. Scroll to explore, then click any category to see the full API docs.
Up and Running in Seconds
One command to scaffold, one to run. No config files, no boilerplate.
Performance
Rezi offloads layout and painting to a native C engine. Here’s how it compares in our benchmark suite.
vs Ink · Lower-level operations show larger gains