How to Build a TUI Application in Rust with ratatui

Cli
You build a TUI in Rust by adding the `ratatui` and `crossterm` crates, initializing the terminal, and running a render loop that updates a `Frame`.

How to Build a TUI Application in Rust with ratatui

You build a TUI in Rust by adding the ratatui and crossterm crates, initializing the terminal, and running a render loop that updates a Frame.

use crossterm::{
    cursor::Show,
    event::{self, DisableMouseCapture, EnableMouseCapture, Event, KeyCode},
    execute,
    terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
};
use ratatui::{
    backend::CrosstermBackend,
    layout::Rect,
    style::Style,
    widgets::Paragraph,
    Frame,
    Terminal,
};
use std::io;

fn main() -> io::Result<()> {
    let mut stdout = io::stdout();
    enable_raw_mode()?;
    execute!(stdout, EnterAlternateScreen, EnableMouseCapture)?;
    let backend = CrosstermBackend::new(stdout);
    let mut terminal = Terminal::new(backend)?;

    loop {
        terminal.draw(|f| ui(f))?;
        if let Event::Key(key) = event::read()? {
            if key.code == KeyCode::Char('q') {
                break;
            }
        }
    }

    disable_raw_mode()?;
    execute!(
        terminal.backend_mut(),
        LeaveAlternateScreen,
        DisableMouseCapture
    )?;
    execute!(terminal.backend_mut(), Show)?;
    Ok(())
}

fn ui(frame: &mut Frame) {
    let area = frame.area();
    let paragraph = Paragraph::new("Hello TUI!").style(Style::default());
    frame.render_widget(paragraph, area);
}

Add to Cargo.toml:

[dependencies]
ratatui = "0.28"
crossterm = "0.28"

Run with cargo run.