@reliverse/prompts
Docs | npmjs.com | GitHub
@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.
@reliverse/prompts is a full-featured alternative to @inquirer/prompts (Inquirer.js), enquirer, @clack/prompts, terkelg prompts, cronvel terminal-kit, unjs consola, and similar libraries.
Installation
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)
Screenshot
Key Features
- 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.
Prompt Types
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.
Input Validation
All prompts support custom validation logic, providing immediate feedback to users.
Contributing
@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 relinka
bun i
Playground
Run bun dev
to launch the examples/launcher.ts CLI, which helps you to 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.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.ts: A quiz game example inspired by Fireship's video about CLIs. 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-relinka.ts: The example which demonstrates how @reliverse/relinka extends the possibilities of @reliverse/prompts.
- 4-simple.ts: A simple example highlighting the core functionalities of @reliverse/prompts. The entire implementation is contained within a single file for easy understanding.
Extendable Configuration
Example Configuration:
const basicConfig = {
titleColor: "cyanBright",
titleTypography: "bold",
borderColor: "viceGradient",
} satisfies PromptOptions;
const extendedConfig = {
...basicConfig,
contentTypography: "italic",
contentColor: "dim",
} satisfies PromptOptions;
const username = await inputPrompt({
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,
});
Mono Component
The Mono Component is a special component that includes all other components. It's a great way to get started quickly or to see how all the components work together.
This component requires providing prompt id. To have typesafety use something like the following:
export const IDs = {
start: "start",
username: "username",
dir: "dir",
spinner: "spinner",
password: "password",
age: "age",
lang: "lang",
color: "color",
birthday: "birthday",
features: "features",
};
Prompts Library Comparison
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 | @enquirer/enquirer | @clack/prompts | @terkelg/prompts | @cronvel/terminal-kit | @unjs/citty | @unjs/consola |
---|
Full Node.js Modules Support | π’ Native ES module package | π‘ | π‘ | π‘ | π΄ CJS-only | π΄ CJS-only | π‘ | π‘ |
Works both in node, bun, and deno environments | π΅ node+bun (deno support is coming soon) | π‘ | π‘ | π‘ | π‘ | π‘ | π’ | π’ |
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 | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ |
Visual Components: Separator, Animated Text, ASCII Art | π’ Includes 6 animations and 290 ASCII fonts | π΅ Separator only | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ |
Password Component | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ |
Number Component | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ |
Confirm Component | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ |
Select Component | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ |
Multiselect Component | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ |
Search/Autocomplete Component | π΅ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ |
Spinner & Progressbar Components | π‘ | π‘ | π‘ | π‘ | π‘ | π’ | π‘ | π‘ |
Image Component | π‘ | π‘ | π‘ | π‘ | π‘ | π’ | π‘ | π‘ |
Custom Validation | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ |
Error Handling | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ |
Ease of Setup | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ |
Crash Resilience | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ |
General DX | π΅ Clean and understandable TypeScript code | π‘ | π‘ | π‘ | π΄ JS-only | π΄ JS-only | π‘ | π‘ |
DX: Classes | π’ Minimal number of classes as possible | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ |
Documentation | π΅ | π‘ | π‘ | π‘ | π΅ | π’ | π‘ | π‘ |
Designed With UX/DX in Mind | π’ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ |
Fast and lightweight argument parser | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π’ | π‘ |
Smart value parsing with typecast | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π’ | π‘ |
Boolean shortcuts and unknown flag handling | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π’ | π‘ |
Nested sub-commands | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π’ | π‘ |
Lazy and Async commands | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π’ | π‘ |
Pluggable and composable API | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π’ | π‘ |
Auto generated usage and help | π‘ | π‘ | π‘ | π‘ | π‘ | π‘ | π’ | π‘ |
Related Links: ESM/CJS, "Pure ESM package", Clean code, "UX patterns for CLI tools", DX (Developer Experience), TypeBox, "ANSI Escape Sequences"
Wrap-Up
@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.
Learn More
Special Thanks
This project wouldnβt exist without the amazing work of the huge number of contributors to the list of projects below. Many of the @reliverse/prompts prompts are based on the incredible work of:
@inquirer/prompts | terkelg/prompts | @clack/prompts | create-t3-app | create-astro | cronvel/terminal-kit | unjs/consola | nodejs/string_decoder | TooTallNate/keypress | derhuerst
License
MIT Β© Nazarii Korniienko