A Text User Interface library for the Rust programming language
Rust
4,855
1,802 commits
updated Sep 25, 2026
Cursive is a TUI (Text User Interface) library for rust. It uses the crossterm backend by default, but other backends are available.
It allows you to build rich user interfaces for terminal applications.
It is designed to be safe and easy to use:
[dependencies]
cursive = "0.21"
Or to use the latest git version:
[dependencies]
cursive = { git = "https://github.com/gyscos/cursive" }
use cursive::views::{Dialog, TextView};
fn main() {
// Creates the cursive root - required for every application.
let mut siv = cursive::default();
// Creates a dialog with a single "Quit" button
siv.add_layer(Dialog::around(TextView::new("Hello Dialog!"))
.title("Cursive")
.button("Quit", |s| s.quit()));
// Starts the event loop.
siv.run();
}
Check out the other examples to get these results, and more:
(Colors may depend on your terminal configuration.)
These tutorials may help you get started with cursive:
Here are a few crates implementing new views for you to use:
hjkl controls.Here are some cool applications using cursive:
First off, terminals are messy. A small set of features is standard, but beyond that, almost every terminal has its own implementation.
key_codes example can be a useful tool to see how the library reacts to various key presses.See also ratatui - and a small comparison page.
(top 24 of 86)
9,710 followers · starred May 2021
587 followers · starred Aug 2020
402 followers · starred May 2018
1,023 followers · starred Mar 2018
Rust
100.0%
A Text User Interface library for the Rust programming language
Rust
4,855
1,802 commits
updated Sep 25, 2026
Cursive is a TUI (Text User Interface) library for rust. It uses the crossterm backend by default, but other backends are available.
It allows you to build rich user interfaces for terminal applications.
It is designed to be safe and easy to use:
[dependencies]
cursive = "0.21"
Or to use the latest git version:
[dependencies]
cursive = { git = "https://github.com/gyscos/cursive" }
use cursive::views::{Dialog, TextView};
fn main() {
// Creates the cursive root - required for every application.
let mut siv = cursive::default();
// Creates a dialog with a single "Quit" button
siv.add_layer(Dialog::around(TextView::new("Hello Dialog!"))
.title("Cursive")
.button("Quit", |s| s.quit()));
// Starts the event loop.
siv.run();
}
Check out the other examples to get these results, and more:
(Colors may depend on your terminal configuration.)
These tutorials may help you get started with cursive:
Here are a few crates implementing new views for you to use:
hjkl controls.Here are some cool applications using cursive:
First off, terminals are messy. A small set of features is standard, but beyond that, almost every terminal has its own implementation.
key_codes example can be a useful tool to see how the library reacts to various key presses.See also ratatui - and a small comparison page.
(top 24 of 86)
9,710 followers · starred May 2021
587 followers · starred Aug 2020
402 followers · starred May 2018
1,023 followers · starred Mar 2018
Rust
100.0%