Familiar React API
React 18 + 19 — hooks, refs, effects, suspense, context, portals. Flexbox layout.98.6% Ink compatible — same Box/Text/useInput you already know.Ink comparison →
Powerful apps. Polished UIs. Proudly terminal.
╭─ User ─────────────────────────────────────────────────────╮ │ add a blinking cursor after the tagline │ ╰────────────────────────────────────────────────────────────╯ ● Read .vitepress/theme/custom.css ✓ found .VPHero .tagline selector at line 148 ● Edit .vitepress/theme/custom.css + tagline::after blink animation (1Hz steps(1)) ✓ applied · 12 insertions · 0 deletions ╭─ Assistant ────────────────────────────────────────────────╮ │ Blink lands at end of tagline. │ │ One cursor per page · matches the design doc. │ ╰────────────────────────────────────────────────────────────╯ ╭─ Input ────────────────────────────────────────────────────╮ │ ❯ █ │ ╰────────────────────────────────────────────────────────────╯
Silvery grew out of building a complex terminal app — a multi-pane workspace with thousands of nodes. Components needed to know their size during render. Updates needed to be fast. Scroll containers, mouse events, focus scopes, and Playwright-style testing needed to just work. What started as a renderer grew into a layout engine, then 45+ components, theming, testing infrastructure, and eventually a framework.
Along the way, three principles emerged. Take the best from the web, stay true to the terminal, and raise the bar for developer ergonomics, architecture composability, and performance.
→ The Silvery Way · Silvery vs Ink · About
$ npm install silvery react$ bun add silvery react$ pnpm add silvery react$ yarn add silvery reactimport { useState } from "react"
import { render, Box, Text, useInput } from "silvery"
function Counter() {
const [count, setCount] = useState(0)
useInput((input) => {
if (input === "j") setCount((c) => c + 1)
})
return (
<Box borderStyle="round" padding={1}>
<Text>Count: {count}</Text>
</Box>
)
}
await render(<Counter />).run()→ Continue with the Getting Started guide
Try the interactive examples:
$ npx @silvery/examples$ bunx @silvery/examples$ pnpm dlx @silvery/examples$ vp @silvery/examples| Package | Description |
|---|---|
silvery | Components, hooks, renderer — the one package you need |
@silvery/ink / @silvery/chalk | Ink compatibility — 99% of Ink 7.0 tests, 100% of Chalk tests |
@silvery/test | Playwright-style testing — locators, press(), buffer assertions |
@silvery/create | Composable app builder — pipe() providers (under active development) |
@silvery/theme | 84 color schemes, semantic tokens ($primary, $muted), auto-detect |
@silvery/commander | Beautiful CLIs for free — help renders through Silvery itself |
@silvery/headless | Pure state machines — portable, embeddable, no React |
@silvery/ansi | Terminal primitives — styling, SGR, truecolor, detection |
Standalone projects Silvery builds on — each stands on its own: