@reliverse/prompts is a powerful library that enables seamless, type-safe, and resilient prompts for command-line applications. Crafted with simplicity and elegance, it provides developers with an intuitive and robust way to build interactive CLIs.
Install with your preferred package manager:
bun add @reliverse/prompts # Replace 'bun' with npm, pnpm, or yarn if desired (deno and jsr support coming soon)
- Type Safety: Built with TypeScript, ensuring strong typing to prevent runtime errors.
- Schema Validation: Validates user inputs using schemas for enhanced reliability.
- Flexible Prompt Types: Supports a range of prompt types, including text, password, number, select, and multiselect.
- Crash Resilience: Designed to handle cancellations and errors gracefully, ensuring stability.
Each type has its own validation and display logic. More types are planned for future releases.
- Text: Collects text input.
- Password: Hidden input for secure password entries.
- Number: Numeric input with optional validation.
- Confirm: Simple Yes/No prompt.
- Select: Dropdown selection for multiple choices.
- Multiselect: Allows users to select multiple items from a list.
All prompts support custom validation logic, providing immediate feedback to users.
@reliverse/prompts is a work in progress. We welcome feedback and contributions to help make it the best library it can be. Thank you!
Here is how to install the library for development:
git clone https://github.com/reliverse/prompts.git
cd prompts
bun i
Run bun dev
to launch the examples/run-example.ts CLI, where you can dive into and explore any of the examples listed below. Experiment with @reliverse/prompts by running examples locally or reviewing the linked code:
- 1-main-example.ts: A comprehensive example of a CLI application featuring a well styled UI config. This example showcases all available prompt components, with code organized into separate functions and files for better readability and clarity.
- 2-mono-example.ts: A quiz game example inspired by Fireship's video. It demonstrates the dynamic capabilities of @reliverse/prompts by using a prompt() that includes all prompt components, so you don't need to import each component separately.
- 3-basic-example.ts: A simple example highlighting the core functionalities of @reliverse/prompts. The entire implementation is contained within a single file for easy understanding.
Note: This table contains approximate and placeholder values. More detailed assessments will be provided as libraries continue to evolve.
Icon Legend:
- 🟡: Not yet verified
- 🟢: Fully supported
- 🔵: Partially supported
- 🔴: Not supported
Feature | @reliverse/prompts | @inquirer/prompts | @clack/prompts | @terkelg/prompts | @cronvel/terminal-kit | @unjs/consola |
---|---|---|---|---|---|---|
Full Node.js Modules Support | 🟢 ESM-only | 🟡 | 🟡 | 🔴 CJS-only | 🔴 CJS-only | 🟡 |
Codebase typesafety with intellisense | 🔵 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
Runtime typesafety with schema validation | 🟢 TypeBox & Custom | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
Usage Examples | 🟢 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
Mono Component | 🟢 Mono (All-In-One) & Separate | 🟡 | 🟡 | 🟢 Mono-only | 🟡 | 🟡 |
Start Component | 🟢 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
Text Component | 🟢 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
Customization | 🟢 Colors, typography, variants, borders, and more | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
Animated Text | 🟢 Includes 6 animations | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
ASCII Art Component | 🟢 Includes 290 fonts | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
Password Component | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
Number Component | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
Confirm Component | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
Select Component | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
Multiselect Component | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
ProgressBar Component | 🟡 | 🟡 | 🟡 | 🟡 | 🟢 | 🟡 |
Image Component | 🟡 | 🟡 | 🟡 | 🟡 | 🟢 | 🟡 |
Custom Validation | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
Error Handling | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
Ease of Setup | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
Crash Resilience | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
General DX | 🔵 Clean and understandable TypeScript code | 🟡 | 🟡 | 🔴 JS-only | 🔴 JS-only | 🟡 |
DX: Classes | 🟢 Zero classes | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
Documentation | 🟡 | 🟡 | 🟡 | 🔵 | 🟢 | 🟡 |
Designed With UX in Mind | 🔵 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 |
Related Links: ESM/CJS, "Pure ESM package", Clean code, "UX patterns for CLI tools", DX (Developer Experience), TypeBox
This project wouldn’t exist without the amazing work of the following projects:
@inquirer/prompts | terkelg/prompts | @clack/prompts | create-t3-app | create-astro | cronvel/terminal-kit | unjs/consola
@reliverse/prompts is a versatile library designed to accelerate CLI development by providing customizable prompt components. Integrated into the Reliverse CLI, @reliverse/prompts enables you to create a unique design aligned with your CLI app’s aesthetics, similar to how @shadcn/ui supports customizable web UI components. Quickly get started by copying configurations from the Reliverse Docs and using components that fit your project, making it faster to bring your CLI app to life. You’re free to customize each component as desired, with default designs provided to ensure an attractive interface from the start.
Example Configuration:
const basicConfig = {
titleColor: "cyanBright",
titleTypography: "bold",
borderColor: "viceGradient",
} satisfies OptionalPromptOptions;
const extendedConfig = {
...basicConfig,
contentTypography: "italic",
contentColor: "dim",
} satisfies OptionalPromptOptions;
const username = await textPrompt({
id: "username",
title: "We're glad you're testing our library!",
content: "Let's get to know each other!\nWhat's your username?",
schema: schema.properties.username,
...extendedConfig,
});