You build a TUI with ratatui by initializing a terminal backend, defining a render loop, and drawing widgets to the frame.
use crossterm::{
event::{self, Event, KeyCode},
execute,
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
};
use ratatui::{
backend::CrosstermBackend,
widgets::{Block, Paragraph},
Frame, Terminal,
};
use std::io;
fn main() -> Result<(), Box<dyn std::error::Error>> {
enable_raw_mode()?;
let mut stdout = io::stdout();
execute!(stdout, EnterAlternateScreen)?;
let backend = CrosstermBackend::new(stdout);
let mut terminal = Terminal::new(backend)?;
loop {
terminal.draw(|f| {
let block = Block::default().title("Hello");
let paragraph = Paragraph::new("World").block(block);
f.render_widget(paragraph, f.area());
})?;
if let Event::Key(key) = event::read()? {
if key.code == KeyCode::Esc {
break;
}
}
}
disable_raw_mode()?;
execute!(terminal.backend_mut(), LeaveAlternateScreen)?;
terminal.show_cursor()?;
Ok(())
}