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.