// the find
vadimdemedes/ink
🌈 React for interactive command-line apps
Ink is a React renderer for the terminal — you write JSX with Box and Text components, it runs Yoga (Facebook's Flexbox engine) to compute layout, and outputs ANSI sequences. It's for developers building interactive CLI tools who already know React and don't want to deal with raw terminal escape codes.
The Flexbox layout model is the right abstraction here — it handles wrapping, alignment, and nested layouts without the developer thinking in cursor positions. The `<Static>` component solves a real problem: keeping completed output locked above a live-updating region without screen-clearing hacks. The testing story is solid — `ink-testing-library` lets you assert on rendered output without spawning a terminal. The adoption list is a genuine signal: Claude Code, Wrangler, Shopify CLI, and Prisma all use it, which means it's production-proven at scale.
The Node.js process lifecycle is a footgun — if your component has no async work, it exits immediately and you get nothing, and the docs bury this. There's no native scrollable container; implementing a scrollable list means tracking offset in state yourself, which gets ugly fast. Performance degrades with large re-renders because every state change re-runs Yoga layout for the whole tree — fine for progress bars, painful if you're streaming thousands of log lines. The README admits it only documents an upcoming unreleased version, meaning what's on npm diverges from what the docs describe.