A toolkit for building your own interactive prompt in Rust.
Put the package in your Cargo.toml.
[dependencies]
promkit = { version = "0.14.0", features = ["runtime", "texteditor"] }- Application-owned composition — Implement the
Promptlifecycle and combine only the widget states an application needs. Key bindings, focus, validation, background work, and other event policy remain in the application instead of framework-owned presets. - Optional runtime and terminal lifecycle — Use the asynchronous prompt
runtime when useful, and independently manage raw mode, the alternate screen,
cursor visibility, and mouse capture with
TerminalSession. - Viewport-aware rendering —
promkit-corehandles wrapping or truncation, vertical pane allocation, cursor scrolling, clipping, resizing, and screen-to-widget hit testing. - Reusable widget states —
promkit-widgetsprovides text editing and display, list and checkbox selection, prefix search, spinners and status output, trees, JSON and YAML documents, and CSV tables. - Efficient large-content projection — JSON, YAML, and table widgets can project only the visible terminal viewport instead of rebuilding all content on every redraw.
- Feature-gated modules — No Cargo features are enabled by default. Choose the runtime, terminal session, capabilities, and individual widgets needed by the application.
- Cross-platform terminal support — UNIX and Windows are supported through crossterm.
See here.
promkit provides a runtime and reusable widgets for building interactive terminal applications. The examples own their event policies and demonstrate how applications can compose the widgets they need.
| Example | Description |
|---|---|
| Readline | Single-line editing with history and completion |
| Confirm | Validated yes-or-no input |
| Password | Masked input with validation |
| Form | Multiple editable fields in one prompt |
| Listbox | Keyboard-driven single selection |
| QuerySelector | Prefix search over selectable candidates |
| Checkbox | Keyboard-driven multiple selection |
| Tree | Navigation and folding for hierarchical data |
| JSON | Line-numbered navigation and folding for JSON |
| YAML | Line-numbered navigation and folding for YAML |
| CSV | Vertical and horizontal navigation for tabular data |
| Text | Scrollable styled text |
| Async Task with Spinner | Background work with live input and progress feedback |
| Multiline REPL | Multiline editing in an interactive loop |
Each section includes a command, source link, and recorded demo.
Command
cargo run --bin readlineCommand
cargo run --bin confirmCommand
cargo run --bin passwordCommand
cargo run --bin formCommand
cargo run --bin listboxCommand
cargo run --bin query-selectorCommand
cargo run --bin checkboxCommand
cargo run --bin treeCommand
cargo run --bin json ${PATH_TO_JSON_FILE}Command
cargo run --bin yaml ${PATH_TO_YAML_FILE}Command
cargo run --bin csv ${PATH_TO_CSV_FILE}Command
cargo run --bin textThese examples demonstrate how to compose widgets and rendering primitives for application-specific event loops and asynchronous workflows.
Command
cargo run --bin async_taskCommand
cargo run --bin repl