Expand description
A Ratatui widget set for friendly prompts and input flows. Part of the tui-widgets suite by Joshka.
GitHub Repository · API Docs · Examples · Changelog · Contributing
§Installation
cargo add ratatui tui-prompts crossterm§Usage
Pick a prompt type, keep its state, and render it inside your UI.
§Text Prompt
Code
use ratatui::layout::{Constraint, Direction, Layout, Rect};
use ratatui::Frame;
use tui_prompts::{Prompt, TextPrompt, TextRenderStyle, TextState};
struct App<'a> {
username_state: TextState<'a>,
password_state: TextState<'a>,
invisible_state: TextState<'a>,
}
impl<'a> App<'a> {
fn draw_ui(&mut self, frame: &mut Frame) {
let (username_area, password_area, invisible_area) = split_layout(frame.area());
TextPrompt::from("Username")
.draw(frame, username_area, &mut self.username_state);
TextPrompt::from("Password")
.with_render_style(TextRenderStyle::Password)
.draw(frame, password_area, &mut self.password_state);
TextPrompt::from("Invisible")
.with_render_style(TextRenderStyle::Invisible)
.draw(frame, invisible_area, &mut self.invisible_state);
}
}
fn split_layout(area: Rect) -> (Rect, Rect, Rect) {
let rows = Layout::default()
.direction(Direction::Vertical)
.constraints([
Constraint::Length(1),
Constraint::Length(1),
Constraint::Length(1),
])
.split(area);
(rows[0], rows[1], rows[2])
}
See the text example for more details.
§Soft Wrapping
Text is automatically character wrapped to fit in the render area.

See the multi line example for more details.
§Features
- Text prompt
- Password prompt
- Invisible prompt
- Readline / emacs style Key Bindings
- Crossterm backend
- Soft wrapping single lines
- Multi-line input
- Scrolling
-
More prompt types:
- Number
- Confirm
- List
- Toggle
- Select
- Multi-select
- Autocomplete
- Autocomplete multi-select
- Date
- Bracketed paste
- Validation
- Default initial value
- Custom style
- Themes
- Custom formatting
- Backend agnostic keyboard event handling
- Customizable key bindings
-
Handle more advanced multi-key bindings e.g.
^[band^[f - Prompt chaining
§Key Bindings
| Key | Action |
|---|---|
| Home, Ctrl+A | Move cursor to beginning of line |
| End, Ctrl+E | Move cursor to end of line |
| Left, Ctrl+B | Move cursor one character left |
| Right, Ctrl+F | Move cursor one character right |
| Backspace (Delete on Mac), Ctrl+H | Delete character before cursor |
| Delete (Fn+Delete on Mac), Ctrl+D | Delete character at cursor |
| Ctrl+K | Delete all characters from the cursor to the end of line |
| Ctrl+U | Delete the entire line |
| Enter | Complete the prompt |
| Escape, Ctrl+C | Abort the prompt |
§More widgets
For the full suite of widgets, see tui-widgets.
Modules§
Structs§
- Text
Prompt - A prompt widget that displays a message and a text input.
- Text
State
Enums§
- Focus
State - The focus state of a prompt.
- Status
- The result of a prompt.
- Text
Render Style