promkit
A toolkit for building your own interactive prompt in Rust.
Getting Started
Put the package in your Cargo.toml.
[]
= { = "0.14.0", = ["runtime", "texteditor"] }
Features
- 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.
Concept
See here.
Projects using promkit
Examples/Demos
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.
Table of contents
| 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.
Readline
Confirm
Password
Form
Listbox
QuerySelector
Checkbox
Tree
JSON
YAML
CSV
Text
Advanced Examples
These examples demonstrate how to compose widgets and rendering primitives for application-specific event loops and asynchronous workflows.
Async Task with Spinner
Multiline REPL