mrkeyoor.com_
Tue 01 Sept 17:43 UTC
Dev Toolsevaluationupdated 27 Aug 2026

ratatui review

Ratatui is a Rust library for building interactive interfaces inside a terminal. It supplies layout, text, styling, widgets, buffers, and several terminal backends, leaving application state and event handling in your code.

+63stars / 7d
Verdict

Our Ratatui run installed 445 packages, built cleanly, and passed all 6,013 tests. It is our default Rust TUI recommendation for developers who want precise control and are comfortable writing the application loop. Accessibility and upgrade churn still need explicit planning, especially for long-lived tools or interfaces used beyond a technical audience.

We ran it

Lab card: what happened when we ran ratatuiScreenshot of ratatui (ratatui.rs)
Install✓ · 33s445 packages
Build✓ · 147s
Tests✓ · 113s6013 passed · 0 failed of 6013 (cargo test)
Repo431 files~81,723 lines of source · 4 MB · 5 CI workflows

Answers from our run

Does ratatui build from source?

Dependencies installed in 33 seconds (445 packages), and the build succeeded in 147 seconds. We cloned commit a1b0b9c into a clean Debian container with 3 CPUs and no project-specific setup.

Do ratatui's tests pass?

Yes: 6013 of 6013 passed when we ran the project's own test command (cargo test). Some failures need services or credentials a bare container does not have.

Who should not use ratatui?

Teams whose interface must be fully accessible today: issue 2610 asks for accessibility support and remains open.

What are the alternatives to ratatui?

Cursive, iocraft, tui-rs. Our Ratatui run installed 445 packages, built cleanly, and passed all 6,013 tests.

Setup5/5Fast dependency setup, clean build, and 6,013 passing tests
Docs5/5API docs, tutorials, examples, architecture, and migrations
Community5/5Current pushes, active issue replies, and a broad ecosystem
Maturity4/5Proven core with documented API and MSRV changes

Discussed on

  1. hnRatatui – App Showcase771 points
  2. hnMousefood – Build embedded terminal UIs for microcontrollers244 points
  3. hnRatatui238 points
  4. hnShow HN: RatatuiRuby wraps Rust Ratatui as a RubyGem – TUIs with the joy of Ruby152 points
  5. hnRatatui: tui-rs revival project132 points

Who it’s for

Rust developers building terminal dashboards, operations consoles, editors, or interactive command-line tools.
Teams that want a widget library while keeping control of state, events, and application structure.
Library authors who can depend on the smaller ratatui-core crate for shared widget and layout types.
Projects that need a choice of Crossterm, Termion, Termina, or Termwiz backends.

Who it’s NOT for

Teams whose interface must be fully accessible today: issue 2610 asks for accessibility support and remains open.
Developers who want a declarative component runtime that owns state and events: the quickstart writes the input loop and redraw logic directly.
Applications pinned below Rust 1.88: the breaking-change guide says version 0.30.1 raised the minimum supported Rust version to 1.88.0.
Projects that cannot budget for API migrations: the maintained breaking-change guide lists recurring changes to widgets, layouts, backends, feature flags, and minimum Rust versions.
Rich graphical applications that need a browser or native GUI rather than terminal cells and escape-sequence backends.

Setup reality

Our sandbox installed 445 packages in 33 seconds. The full build succeeded in 147 seconds, then cargo test completed in 113 seconds with all 6,013 tests passing. The checkout was 4 MB, with 431 files and about 81,723 lines of source.

A basic app needs Rust and a terminal backend, with Crossterm used by the quickstart. No hosted service or credential is required. The template path first installs cargo-generate, then creates a project; direct crate use is also possible through Cargo.

Ratatui draws widgets but your application owns the event loop, state, error handling, terminal restoration, and input behavior. Backend and feature choices affect portability. Version 0.30.1 requires Rust 1.88, and the project keeps a detailed breaking-change guide that should be checked before upgrades.

Terminal UI building blocks, with your code in charge

Ratatui gives Rust programs a vocabulary for drawing terminal interfaces: rectangles, constraints, styled text, buffers, widgets, and terminal backends. The quickstart is small enough to understand in one screen. Initialize a terminal, draw a frame, read an event, and restore the terminal on exit. A string can be rendered as a widget, while larger applications compose lists, tables, charts, paragraphs, scrollbars, and custom widgets.

The library does not impose an application framework. Your program owns state, input, timing, updates, and error handling. That makes Ratatui a good fit for tools whose behavior is already modeled in Rust and merely needs an interactive screen. It also means a developer must design the event loop and ensure the terminal is restored after failures.

Ratatui began as a 2023 fork of tui-rs after development there stopped. It has since become the active center of this Rust TUI style. The project points to a separate gallery and curated application list, which is useful when deciding whether terminal cells can express the interface you have in mind.

The modular split makes sense

Version 0.30 reorganized the project into a workspace. Most applications use the main ratatui crate, which re-exports the widgets, core types, backends, macros, and experimental pieces. Widget authors can depend on ratatui-core for the Widget traits, buffer, layout, text, style, and symbols without pulling in every built-in widget or backend. Standard widgets live in ratatui-widgets.

Backends are separate crates for Crossterm, Termion, Termina, and Termwiz. Crossterm is the cross-platform choice shown in the quickstart. Termion targets Unix, Termina fits applications using its event and escape-sequence types, and Termwiz covers another backend family. This split lets a project choose its terminal integration while sharing the same buffer and widget contracts.

The main crate remains the sensible starting point. The smaller crates become useful when compile dependencies or third-party widget compatibility matter. The architecture document says all workspace crates currently share a version, so users still get one coordinated release line rather than a puzzle of independent compatibility ranges.

What happened when we ran it

We cloned commit a1b0b9c into a fresh Debian container with three CPUs, 12 GB of RAM, no secrets, and an unprivileged user. The checkout was compact: 431 files, about 81,723 lines of source, and 4 MB on disk. Cargo installed 445 packages in 33 seconds.

The complete build succeeded in 147 seconds. cargo test then finished in 113 seconds with 6,013 tests passing and zero failures. There was no top-level tests directory, but Rust projects commonly keep unit tests beside source and integration checks elsewhere in a workspace. Five CI workflow files were present, and the repository had no Dockerfile.

This was the cleanest lab result in this group. It does not measure rendering speed, input latency, or behavior across terminal emulators, and we will not infer those properties from a successful suite. It does show that the pinned checkout could resolve dependencies, compile the workspace, and pass its full reported test target in a fresh environment.

The tradeoffs appear at interaction boundaries

Terminal rendering has edge cases that ordinary web layouts avoid. Open issue 2730 reports that an empty symbol passed to Fill can shift later cells. Issue 2710 reports that a single fixed-length item expands under Flex::SpaceBetween. Both reports include small reproductions, and maintainers are discussing the behavior. These are narrow bugs, yet they demonstrate why snapshot or buffer tests belong in any serious TUI project.

Accessibility is a larger constraint. Issue 2610 asks for an accessibility layer and discusses AccessKit, but no implementation is promised there. Terminal applications can also inherit limitations from terminal emulators, screen readers, color settings, and keyboard conventions. If the tool is required for someone to do their job, test it with the actual assistive setup and provide a non-TUI path where necessary.

API evolution deserves similar attention. The breaking-change document records renamed alignment types, backend trait changes, widget method changes, feature-flag behavior, and repeated minimum Rust version increases. Version 0.30.1 requires Rust 1.88.0. The guide includes migration examples, which lowers the cost, but teams should pin releases and schedule upgrades rather than letting a wide version range move unnoticed.

Documentation and project health

The documentation is unusually complete for a UI library. The README links to API documentation, a concepts website, step-by-step tutorials, widget examples, full application examples, an architecture guide, a generated changelog, and the manual breaking-change list. Templates through cargo-generate provide a working starting shape. A forum, Discord server, and Matrix bridge cover questions that do not belong in issue tracking.

The last push was August 24, 2026. Release ratatui-v0.30.2 shipped on June 19 with a new Termina backend and fixes for wide-cell rendering and scrollbar geometry. GitHub listed 217 open issues and pull requests combined. That is a substantial queue, but current issue discussions and the previous day's push show active work rather than neglect. Recent bug reports received maintainer responses within days.

Choose Ratatui when you want a Rust-native terminal interface and prefer explicit control over a managed component runtime. It has enough widgets and learning material to move quickly, while the core crate gives library authors a narrower dependency. Pin the crate, test the terminal behaviors your app relies on, and treat accessibility as a product requirement outside the rendering API.

Alternatives

ProjectWhat it isPick it when
CursiveA Rust TUI library with a view tree and callback-oriented application model.pick this instead when you prefer a higher-level view system that manages more of the interaction structure.
iocraftA Rust library for terminal interfaces written with a declarative component model.pick this instead when a component-style API suits your application better than Ratatui's explicit draw loop.
tui-rsThe earlier Rust TUI library from which Ratatui was forked in 2023.pick this instead only when maintaining an existing tui-rs application that cannot migrate yet.

What people are saying

  1. [github-trending] ratatui/ratatui

Sources

  1. Ratatui repository
  2. Ratatui README
  3. Ratatui architecture
  4. Ratatui breaking changes
  5. Ratatui v0.30.2 release
  6. Accessibility request 2610
  7. Fill rendering report 2730
  8. Layout behavior report 2710

More dev tools reviews

workmux · v2rayNG · SecLists · hashcat · eslint · fastfetch · the whole board →