mrkeyoor.com_
Mon 28 Sept 13:44 UTC
Dev Toolsevaluationupdated 28 Sept 2026

ink review

Ink lets you build interactive command-line interfaces with React components and hooks. It turns familiar ideas such as Flexbox, state, focus, and component tests into terminal output, so a React team does not have to invent a screen renderer first.

Verdict

Our Ink run built in 6 seconds and found 0 audit vulnerabilities, but 65 tests failed, so the checked-out code needs a project-specific terminal test matrix before adoption. Ink remains the clearest fit for React teams building a serious Node CLI because its layout, lifecycle, and input APIs cover much more than a prompt library. Use v7.1.1 carefully for CJK input, repeated raw-mode mounts, and fast full-screen redraws, and do not treat the upcoming-version README as release documentation.

We ran it

Lab card: what happened when we ran inkScreenshot of ink (term.ink)
Install✓ · 69s674 packages · 501 MB
Build✓ · 6s
Tests✗ · 293sran, no count parsed
Known vulns00 critical · 0 high · 0 moderate · 0 low (npm audit)
Repo311 files~41,605 lines of source · 1.4 MB · 1 CI workflows · tests dir

Answers from our run

Does ink build from source?

Dependencies installed in 69 seconds (674 packages), and the build succeeded in 6 seconds. We cloned commit 7cd7fd9 into a clean Debian container with 3 CPUs and no project-specific setup.

Do ink's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Does ink have known vulnerabilities in its dependencies?

npm audit found none in the dependency tree at the time of our run.

Who should not use ink?

Products where CJK input must be dependable today: open issue 759 reports lag, dropped characters, and cursor errors when an IME is active.

What are the alternatives to ink?

Bubble Tea, Ratatui, Textual. Our Ink run built in 6 seconds and found 0 audit vulnerabilities, but 65 tests failed, so the checked-out code needs a project-specific terminal test matrix before adoption.

Setup3/569-second install, 674 packages, and 65 failed tests
Docs5/5Deep API examples, with an explicit upcoming-version warning
Community5/539,972 stars and current September 2026 issue activity
Maturity3/5v7.1.1 is widely used, but our full suite failed heavily

Who it’s for

React developers building interactive setup flows, dashboards, coding tools, or long-running command-line apps.
Teams that want component state, Flexbox layout, input hooks, and snapshot-friendly output in one Node package.
CLI authors who need static logs above a changing interface, focus management, terminal sizing, or child-process handoff.
Maintainers willing to test several terminal emulators and operating systems before shipping.

Who it’s NOT for

Products where CJK input must be dependable today: open issue 759 reports lag, dropped characters, and cursor errors when an IME is active.
Test suites that repeatedly mount and unmount raw-mode components in one process: issue 978 reports unreclaimed external memory with that pattern on v7.1.1.
High-refresh, full-screen dashboards with a tight CPU budget: issue 1032 reports that output caches are rebuilt and text is measured again on every frame.
Teams that need a built-in scrollable container: scrolling remains an open issue, while the README points to community scroll-view and virtual-list packages.
Developers who expect the default README to describe only the npm release: it explicitly says the page documents the upcoming Ink version.

Setup reality

Our fresh Debian sandbox installed commit 7cd7fd9 in 69 seconds on 3 CPUs and 8 GB of RAM, adding 674 npm packages and using 501 MB for a 1.4 MB checkout. The build succeeded in 6 seconds. Tests ran for 293 seconds and exited 1: AVA reported 65 failed tests and 4 known failures. npm audit found 0 known vulnerabilities.

Ink needs Node 22 or newer plus React 19.3 or newer in the checked-out package metadata. It needs no API key or external service. The package is ESM, while JSX still needs a TypeScript or Babel toolchain such as the scaffold described in the README.

The repository has one CI workflow and a tests directory, but no Dockerfile. CI and non-TTY output use a quieter rendering path, while interactive behavior depends on terminal capabilities. The README also documents an upcoming version, so pin the npm release and read its matching API before copying current examples.

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.

Alternatives

ProjectWhat it isPick it when
Bubble Tea gh↗A Go framework for terminal apps based on an update and view architecture.pick this instead when you want a compiled Go binary and do not need React components.
Ratatui gh↗A Rust library for composing terminal interfaces with explicit drawing and state.pick this instead when Rust performance and control matter more than React familiarity.
TextualA Python application framework for interfaces that run in terminals and browsers.pick this instead when the application is Python-first or needs a browser target too.

What people are saying

  1. [velocity-scout] vadimdemedes/ink
  2. [hackernews] Ink and Switch Interactive Homepage
  3. [hackernews] Show HN: An e-ink frame that hears birds and draws them as 1800s illustrations

Sources

  1. Ink README
  2. Ink repository
  3. Ink v7.1.1 release
  4. CJK input issue
  5. Raw-mode remount memory issue
  6. Per-frame output cache issue
  7. Incremental rendering resize issue

More dev tools reviews

kitter · flea · sonicloud_opensdk · cn · GSYVideoPlayer · fyne · the whole board →