TermUI vs Ink
Write JSX in the terminal, without React.
Ink renders React components to the terminal using React and Yoga. TermUI ships its own JSX runtime, so you get JSX, hooks, and flexbox layout with no React dependency, plus a router, a store, TSS theming, and a hot-reload dev server in one framework.
TermUI vs Ink at a glance
| Feature | TermUI | Ink |
|---|---|---|
| Language | TypeScript | JS / TS |
| Runtime dependency | None | React + Yoga |
| JSX / components | Own JSX runtime | Via React |
| Flexbox layout | Yes (built-in) | Yes (Yoga) |
| CSS-like theming | TSS, 12 themes | Limited |
| Spring animations | Yes | No |
| Router | Built-in | No |
| Global state | Built-in store | Use React |
| Test renderer | Yes | ink-testing-library |
| Hot reload dev server | Yes | No |
| Components | 230 | Small core |
| License | MIT | MIT |
Key differences
No React dependency
Ink pulls in React and Yoga. TermUI ships its own JSX runtime and flexbox engine, so there is no React version to track and the install is smaller.
Batteries included
Ink leaves routing, state, and theming to the ecosystem. TermUI bundles a router, a Zustand-style store, TSS theming with 12 themes, and spring animations.
Same mental model
You still write JSX with useState, useEffect, and flexbox props. Porting an Ink component means swapping imports, not relearning the model.
230 components
TermUI ships 230 components across widgets and UI, from Table and Spinner to DataGrid, charts, and a command palette. Browse them in the catalog.
Frequently asked questions
- What is the difference between TermUI and Ink?
- Ink depends on React and Yoga; you write React components and Ink renders them to the terminal. TermUI ships its own JSX runtime, so you write JSX and hooks with no React dependency, plus a built-in flexbox layout engine, TSS theming, a router, a store, and a hot-reload dev server.
- Is TermUI a drop-in replacement for Ink?
- No, the imports and some APIs differ. The mental model is the same: JSX, hooks like useState and useEffect, and flexbox layout. Most Ink components port over by swapping React imports for @termuijs/jsx and Ink primitives for TermUI widgets.
- Why choose TermUI over Ink?
- TermUI has no React or Yoga dependency, so the install is smaller and there is no React version to manage. It also bundles features Ink leaves to the ecosystem: a router, a global store, CSS-like theming, spring animations, and a test renderer.
- Does TermUI run on Node.js like Ink?
- Yes. Published TermUI packages run on Node 18+ with no native C extensions. Bun 1.3+ is only needed for the development server.
- How do I migrate a CLI from Ink to TermUI?
- Install @termuijs/core, @termuijs/jsx, and @termuijs/widgets, replace React imports with @termuijs/jsx, swap Ink Box and Text for TermUI widgets, and mount with the App class. Hooks and flexbox props map closely.
Ink is a trademark of its authors. This comparison reflects public documentation as of June 2026 and is maintained by the TermUI project.