reliverse / prompts

@reliverse/prompts 😎 The CLI prompt library you didn’t realize you’ve been desperate for. It’s blazing-fast, type-safe, and has built-in crash resilienceβ€”so your command-line app can look slick without bursting into flames. Forget boilerplate-heavy setupsβ€”this library makes CLI development smooth and effortless.

Home Page:https://docs.reliverse.org

Repository from Github https://github.comreliverse/promptsRepository from Github https://github.comreliverse/prompts

@reliverse/prompts

Docs | npmjs.com | GitHub | Discord

version downloads

@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

CLI Example

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 prompts
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. 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. 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. 3-simple.ts: A simple example highlighting the core functionalities of @reliverse/prompts. The entire implementation is contained within a single file for easy understanding.
  4. 4-args-a.ts: An example of how to run commands using arguments.
  5. 5-args-b.ts: Another example of how to run commands using arguments.

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.

The mission of @reliverse/prompts is to achieve the 🟒 in all categories.

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 @chjj/blessed
- Full ES 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 🟒 🟑 🟑 🟑 🟑 🟑 🟑 🟑 🟑
- Customization 🟒 Colors, typography, variants, borders, and more 🟑 🟑 🟑 🟑 🟑 🟑 🟑 🟑
- 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 πŸ”΅ 🟑 🟑 🟑 πŸ”΅ 🟒 🟑 🟑 🟒
- Extendable APIs 🟒 Works well with @reliverse/relinka 🟒 Huge number of community prompts 🟑 🟑 🟑 🟑 🟑 🟑 🟑
- Designed With UX/DX in Mind 🟒 🟑 🟑 🟑 🟑 🟑 🟑 🟑 🟑
- All components support Ctrl+C πŸ”΅ 🟑 🟑 🟑 🟑 🟑 🟑 🟑 🟑
- As minimal number of dependencies as possible πŸ”΅ 🟒 🟑 🟑 🟑 🟑 🟑 🟑 🟑
-------------------------------------------------------- -------------------------------------------------------------- ------------------------------------------ ---------------------- ------------------ -------------------- ------------------------- --------------- ------------------ -----------------
Components
-------------------------------------------------------- -------------------------------------------------------------- ------------------------------------------ ---------------------- ------------------ -------------------- ------------------------- --------------- ------------------ -----------------
- Visual Components 🟒 Animated Text (incl. 6 anims) & ASCII Art (incl. 290 fonts) 🟑 🟑 🟑 🟑 🟑 🟑 🟑 🟑
- Mono Component 🟒 Mono (All-In-One) & Separate 🟑 🟑 🟑 πŸ”΅ Mono-only 🟑 🟑 🟑 🟑
- Start Component 🟒 🟑 🟑 🟑 🟑 🟑 🟑 🟑 🟑
- Text Component 🟒 🟑 🟑 🟑 🟑 🟑 🟑 🟑 🟑
- Password Component πŸ”΅ 🟑 🟑 🟑 🟑 🟑 🟑 🟑 🟑
- Number Component πŸ”΅ 🟑 🟑 🟑 🟑 🟑 🟑 🟑 🟑
- Confirm Component πŸ”΅ 🟑 🟑 🟑 🟑 🟑 🟑 🟑 🟑
- Select Component πŸ”΅ Native separator support πŸ”΅ Separator supported via new keyword 🟑 🟑 🟑 🟑 🟑 🟑 🟑
- Multiselect Component πŸ”΅ Native separator support πŸ”΅ Separator supported via new keyword 🟑 🟑 🟑 🟑 🟑 🟑 🟑
- Search/Autocomplete Component πŸ”΅ 🟑 🟑 🟑 🟑 🟑 🟑 🟑 🟑
- Task/Spinner & Progressbar Components πŸ”΅ 🟑 🟑 🟑 🟑 🟒 🟑 🟑 🟑
- Image Component πŸ”΄ Planned 🟑 🟑 🟑 🟑 🟒 🟑 🟑 🟑
- Range Component πŸ”΅ 🟑 🟑 🟑 🟑 🟒 🟑 🟑 🟑
-------------------------------------------------------- -------------------------------------------------------------- ------------------------------------------ ---------------------- ------------------ -------------------- ------------------------- --------------- ------------------ -----------------
Arguments Support
-------------------------------------------------------- -------------------------------------------------------------- ------------------------------------------ ---------------------- ------------------ -------------------- ------------------------- --------------- ------------------ -----------------
- 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: @reliverse/relinka, ESM/CJS, "Pure ESM package", Clean code, "UX patterns for CLI tools", DX (Developer Experience), TypeBox, "ANSI Escape Sequences", @chjj/blessed, Wrapping, Visual Control

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

About

@reliverse/prompts 😎 The CLI prompt library you didn’t realize you’ve been desperate for. It’s blazing-fast, type-safe, and has built-in crash resilienceβ€”so your command-line app can look slick without bursting into flames. Forget boilerplate-heavy setupsβ€”this library makes CLI development smooth and effortless.

https://docs.reliverse.org

License:MIT License


Languages

Language:TypeScript 99.3%Language:JavaScript 0.7%