explaingit

fdehau/tui-rs

10,874RustAudience · developerComplexity · 2/5LicenseSetup · moderate

TLDR

tui-rs is an archived Rust library for building visual dashboards and tool interfaces that run inside a terminal window, with charts, tables, and progress bars, new projects should use the community fork ratatui instead.

Mindmap

mindmap
  root((tui-rs))
    What it does
      Terminal UI library
      Buffer-based rendering
      Screen diff updates
    Widgets
      Charts and gauges
      Tables and lists
      Canvas drawing
    Backends
      crossterm
      termion
    Status
      Archived Aug 2023
      Fork: ratatui
    Audience
      Rust developers
      CLI tool builders
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Build a terminal dashboard to monitor system metrics with live-updating charts and progress bars.

USE CASE 2

Create a file manager or database browser with panels, tables, and keyboard navigation that runs in any terminal.

USE CASE 3

Migrate an existing tui-rs project to ratatui using this repo as a reference for the original API.

USE CASE 4

Study the source code to understand how terminal buffer diffing works before building your own TUI framework.

Tech stack

Rustcrosstermtermion

Getting it running

Difficulty · moderate Time to first run · 30min

Library is archived, add the ratatui crate instead for new projects, tui-rs still compiles but receives no updates.

Use freely for any purpose, including commercial use, as long as you keep the MIT license notice.

In plain English

tui-rs is a Rust library that lets developers build visual interfaces that run entirely inside a terminal window, rather than in a web browser or desktop GUI. Think of programs like file managers, system monitors, or database tools that display organized panels, charts, and menus inside a plain terminal. That is what this library was built to produce. An important note up front: as of August 2023, this project is no longer maintained. The community has moved to an actively maintained fork called ratatui. If you are starting a new project, the README directs you there instead. The library works by redrawing the entire screen on every update, using an internal buffer system to figure out which parts of the display actually changed and only sending those updates to the terminal. This keeps things fast even though Rust programs can render very quickly. The library does not handle keyboard or mouse input on its own. Developers pair it with separate input libraries for that. Out of the box it includes a set of ready-made visual building blocks: blocks with borders, progress gauges, sparkline mini-charts, full line charts, bar charts, scrollable lists, tables, text paragraphs, a canvas for drawing points and lines, and tabbed views. These can be combined to build complex dashboards or tool interfaces. The library runs on top of two different terminal backends, crossterm (the default, which works on Windows, macOS, and Linux) and termion (Linux and macOS only). Developers choose which one fits their project. Many well-known terminal tools were built with tui-rs, including a Spotify client, a Git interface, a network bandwidth monitor, a Docker container manager, and a database browser, among others. The long list in the README shows how broadly it was adopted before the maintenance shift. The code is released under the MIT license, which allows free use in both personal and commercial projects.

Copy-paste prompts

Prompt 1
Show me how to build a simple terminal dashboard in Rust using tui-rs with a bar chart and a table side by side.
Prompt 2
How do I add keyboard input handling to a tui-rs app using crossterm so users can navigate a list?
Prompt 3
What is the difference between tui-rs and the ratatui fork, and how do I migrate my existing tui-rs project to ratatui?
Prompt 4
Walk me through creating a progress gauge and sparkline in tui-rs to display live download speeds in the terminal.
Prompt 5
How does tui-rs decide which parts of the screen to redraw on each frame, and how can I optimize rendering for a fast-updating view?
Open on GitHub → Explain another repo

← fdehau on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.