Ink gives React developers a terminal renderer
Ink renders React components into terminal text and uses Yoga for Flexbox layout. <Text> styles content, <Box> arranges it, <Static> preserves completed output, and <Transform> changes rendered strings. State and effects come from React. Ink fits teams that already think in components and would rather avoid writing their own cursor-coordinate renderer.
The README documents input, paste handling, focus, window size, measurements, cursor placement, screen-reader detection, and animation. A render can suspend terminal state while an editor or fzf runs, then restore the modes and repaint. That covers the space between a basic prompt and a full-screen terminal application.
Static output stays above a changing live region
<Static> prints completed items while the remaining component tree keeps updating. Ink renders only new items added to its array; changing an older item does not repaint it. This works for completed tests or generated files above a live counter, but the array does not behave like ordinary React state.
The standard path caps updates at 30 frames per second. Incremental rendering can rewrite only changed lines. In CI or when stdout is not a TTY, Ink skips cursor control and writes the final non-static frame on unmount. A CLI needs checks for captured output and a real terminal session because those paths behave differently.
What happened when we ran it
Our Node 22 sandbox installed 674 npm packages in 69 seconds, occupying 501 MB. The repository was 1.4 MB with 311 files and about 41,605 source lines. Its TypeScript build completed in 6 seconds, and npm audit reported 0 known vulnerabilities across all four severity levels. The clean build and audit made Ink easy to shortlist; the tests changed that assessment.
The test command ran for 293 seconds and exited with code 1. AVA reported 65 failed tests and 4 known failures. The supplied tail shows test/use-box-metrics.tsx line 135 receiving false instead of true, followed by repeated Runner.runTest frames. It does not give one cause for all 65 failures, so the result cannot be reduced to that assertion.
The checkout had one CI workflow and a tests directory, with no Dockerfile. A fresh Debian container can differ from a normal interactive terminal, which is precisely why the result matters. The install and build needed no extra system setup; the full suite did not pass. Adopters should run interactive, redirected-output, resize, and input cases on their supported terminals.
The README describes code newer than v7.1.1
The README says it documents the upcoming version and sends stable users to npm. GitHub's latest release was v7.1.1 on July 16, 2026. That release fixed a <Static> line erased after a full-clear frame and added coordinates to measureElement(). Check the installed package before copying a hook or render option from the default branch.
Current package metadata requires Node 22 or newer and React 19.3 or newer. Ink is ESM, and JSX needs TypeScript, Babel, or another loader. No service credentials are required. Our install added 674 packages and 501 MB, a reasonable trade for a substantial interactive tool and a poor one for a command that prints a table once.
CJK input and raw-mode remounts need targeted tests
Open issue 759 reports lag, dropped characters, and cursor trouble for CJK users typing through an input method editor. Ink documents useCursor() and advises width calculation for CJK characters and emoji. The open report means an English-only input test cannot cover a product serving Japanese, Chinese, or Korean users.
Issue 978 reports external memory growth on v7.1.1 when a test repeatedly renders and unmounts components around useStdin().setRawMode(). The reporter's process was eventually killed and the included Yoga theory is explicitly unconfirmed. The observed memory growth is enough to justify isolating that lifecycle pattern in your own suite.
Fast full-screen redraws expose terminal mechanics
Issue 1032 reports that output caches are rebuilt between frames, repeating tokenization and text measurement. Issue 1023 covers an incremental-rendering case where a terminal height shrink can move the cursor without repainting the frame. These reports matter most to dashboards, monitors, and coding agents that keep a screen active for hours.
Scrolling is another boundary. A request opened in 2019 remains active, while the README links community scroll-view, scroll-list, and virtual-list packages. Core Ink is a renderer rather than a complete widget suite. Plan to select and test third-party inputs, tables, scrolling, and selection components.
September activity is strong, while terminal testing stays yours
GitHub recorded a push on September 28, 2026, and issue activity continued that month. The repository had 39,972 stars and 34 open issues and pull requests when fetched. Maintenance is current, while the July v7.1.1 release remains the stable package boundary. Default-branch work is still work in motion until released.
Ink makes sense when React fluency saves more engineering time than the 674-package install costs. Use it as a renderer and lifecycle layer, choose extra widgets deliberately, and verify input, resize, memory, and redirected output on supported terminals. Our 65 failed tests are enough reason to require that evidence before making Ink the shell around an important workflow.

