cursive 0.15.0

A TUI (Text User Interface) library focused on ease-of-use.


Cursive is a TUI library - it lets you easily build rich interfaces for use in a terminal.

Getting started

  • Every application should start with a [Cursive] object. It is the main entry-point to the library.
  • A declarative phase then describes the structure of the UI by adding views and configuring their behaviours.
  • Finally, the event loop is started by calling [Cursive::run].


Views are the main components of a cursive interface. The [views] module contains many views to use in your application; if you don't find what you need, you may also implement the [View] trait and build your own.


Cursive is callback-driven: it reacts to events generated by user input.

During the declarative phase, callbacks are set to trigger on specific events. These functions usually take an &mut Cursive argument, allowing them to modify the view tree at will.


use cursive::Cursive;
use cursive::views::TextView;

let mut siv = Cursive::dummy();

siv.add_layer(TextView::new("Hello World!\nPress q to quit."));

siv.add_global_callback('q', |s| s.quit());;


The Cursive root initializes the terminal on creation, and does cleanups on drop. While it is alive, printing to the terminal will not work as expected, making debugging a bit harder.

One solution is to redirect stderr to a file when running the application, and log to it instead of stdout.

Or you can use gdb as usual.