Socket
Socket
Sign inDemoInstall

enquirer

Package Overview
Dependencies
1
Maintainers
2
Versions
37
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    enquirer

Stylish, intuitive and user-friendly prompt system. Fast and lightweight enough for small projects, powerful and extensible enough for the most advanced use cases.


Version published
Maintainers
2
Install size
168 kB
Created

Package description

What is enquirer?

The enquirer npm package is a stylish, intuitive, and user-friendly way to interact with users via the command line. It provides a rich set of prompt types and utilities to make CLI development easier and more interactive.

What are enquirer's main functionalities?

Text Input

This feature allows you to ask users for text input. The example shows how to ask for a username.

const { prompt } = require('enquirer');

prompt({
  type: 'input',
  name: 'username',
  message: 'What is your username?'
}).then(answer => console.log('Username:', answer.username));

Password Input

This feature enables you to securely ask users for a password, hiding their input on the screen.

const { prompt } = require('enquirer');

prompt({
  type: 'password',
  name: 'password',
  message: 'What is your password?'
}).then(answer => console.log('Password:', answer.password));

Multiple Choice (Select)

This feature allows users to choose from a list of options. The example demonstrates asking users to pick a color from a list.

const { prompt } = require('enquirer');

prompt({
  type: 'select',
  name: 'color',
  message: 'Pick a color',
  choices: ['Red', 'Green', 'Blue']
}).then(answer => console.log('Selected color:', answer.color));

Checkbox

This feature lets users select multiple options from a list. The example asks users to select their favorite fruits.

const { prompt } = require('enquirer');

prompt({
  type: 'multiselect',
  name: 'fruits',
  message: 'What are your favorite fruits?',
  choices: ['Apple', 'Orange', 'Grape', 'Watermelon']
}).then(answer => console.log('Favorite fruits:', answer.fruits));

Other packages similar to enquirer

Readme

Source

Enquirer

version travis downloads



Stylish CLI prompts that are user-friendly, intuitive and easy to create.
>_ Prompts should be more like conversations than inquisitions▌


Enquirer Survey Prompt



Created by jonschlinkert and doowb, Enquirer is fast, easy to use, and lightweight enough for small projects, while also being powerful and customizable enough for the most advanced use cases.

  • Fast - Loads in ~4ms (that's about 3-4 times faster than a single frame of a HD movie at 60fps)
  • Lightweight - Only one dependency.
  • Easy to implement - Uses promises and async/await and sensible defaults to make prompts easy to create and implement.
  • Easy to use - Thrill your users! Navigating around input and choices is a breeze. You can even create quizzes, or record and playback keypresses to aid with tutorials and videos.
  • Intuitive - Keypress combos are available to simplify usage.
  • Flexible - All prompts can be used standalone or chained together.
  • Stylish - Easily override semantic styles and symbols for any part of the prompt.
  • Extensible - Easily create and use custom prompts by extending Enquirer's built-in prompts.
  • Pluggable - Add advanced features to Enquirer using plugins.
  • Validation - Optionally validate user input with any prompt.
  • Well tested - All prompts are well-tested, and tests are easy to create without having to use brittle, hacky solutions to spy on prompts or "inject" values.
  • Examples - There are numerous examples and recipes available to help you get started.

❯ Getting started

Get started with Enquirer, the most powerful and easy-to-use Node.js library for creating interactive CLI prompts.


❯ Install

Install with npm:

$ npm install --save enquirer

(Requires Node.js 8.6 or higher. Please let us know if you need support for an earlier version by creating an issue.)


❯ Overview

How does Enquirer work?

Enquirer is a Node.js library. The main export is the Enquirer class.


❯ Usage

Single prompt

The easiest way to get started with enquirer is to pass a question object to the prompt method.

const { prompt } = require('enquirer');

const response = await prompt({
  type: 'input',
  name: 'username',
  message: 'What is your username?' 
});

console.log(response); 
//=> { username: 'jonschlinkert' }

(Examples with await need to be run inside an async function)

Multiple prompts

Pass an array of "question" objects to run a series of prompts.

const response = await prompt([
  {
    type: 'input',
    name: 'name',
    message: 'What is your name?' 
  },
  {
    type: 'input',
    name: 'username',
    message: 'What is your username?' 
  }
]);

console.log(response);
//=> { name: 'Edward Chan', username: 'edwardmchan' }

Jump to: Getting Started · Prompts · Options · Keypresses


TODO

We're currently working on documentation for the following items. Please star and watch the repository for updates!

  • Customizing symbols
  • Customizing styles (palette)
  • Customizing styles
  • Links to recipes

❯ Enquirer API

Enquirer

Create an instance of Enquirer.

Params

  • options {Object}: (optional) Options to use with all prompts.
  • answers {Object}: (optional) Answers object to initialize with.

Example

const Enquirer = require('enquirer');
const enquirer = new Enquirer();

register

Register a custom prompt type.

Params

  • type {String}
  • fn {Function|Prompt}: Prompt class, or a function that returns a Prompt class.
  • returns {Object}: Returns the Enquirer instance

Example

const Enquirer = require('enquirer');
const enquirer = new Enquirer();
enquirer.register('customType', require('./custom-prompt'));

prompt

Prompt function that takes a "question" object or array of question objects, and returns an object with responses from the user.

Params

  • questions {Array|Object}: Options objects for one or more prompts to run.
  • returns {Promise}: Promise that returns an "answers" object with the user's responses.

Example

const Enquirer = require('enquirer');
const enquirer = new Enquirer();

const response = await enquirer.prompt({
  type: 'input',
  name: 'username',
  message: 'What is your username?'
});
console.log(response);

use

Use an enquirer plugin.

Params

  • plugin {Function}: Plugin function that takes an instance of Enquirer.
  • returns {Object}: Returns the Enquirer instance.

Example

const Enquirer = require('enquirer');
const enquirer = new Enquirer();
const plugin = enquirer => {
  // do stuff to enquire instance
};
enquirer.use(plugin);

Enquirer#prompt

Prompt function that takes a "question" object or array of question objects, and returns an object with responses from the user.

Params

  • questions {Array|Object}: Options objects for one or more prompts to run.
  • returns {Promise}: Promise that returns an "answers" object with the user's responses.

Example

const { prompt } = require('enquirer');
const response = await prompt({
  type: 'input',
  name: 'username',
  message: 'What is your username?'
});
console.log(response);

❯ Prompts

AutoComplete Prompt

Prompt that auto-completes as the user types, and returns the selected value as a string.

Enquirer Autocomplete Prompt

Related prompts

↑ back to: Getting Started · Prompts

Confirm Prompt

Prompt that returns true or false.

Enquirer Confirm Prompt

Related prompts

↑ back to: Getting Started · Prompts

Form Prompt

Prompt that allows the user to enter and submit multiple values on a single terminal screen.

Enquirer Form Prompt

Related prompts

↑ back to: Getting Started · Prompts

Input Prompt

Prompt that takes user input and returns a string.

Enquirer Input Prompt

Related prompts

↑ back to: Getting Started · Prompts

Invisible Prompt

Prompt that takes user input, hides it from the terminal, and returns a string.

Enquirer Invisible Prompt

Related prompts

↑ back to: Getting Started · Prompts

List Prompt

Prompt that returns a list of values, created by splitting the user input. The default split character is , with optional trailing whitespace.

Enquirer List Prompt

Related prompts

↑ back to: Getting Started · Prompts

Multiselect Prompt

Prompt that allows the user to select multiple items from a list of options.

Enquirer Multiselect Prompt

Related prompts

↑ back to: Getting Started · Prompts

Numeral Prompt

Prompt that takes a number as input.

Enquirer Numeral Prompt

Related prompts

↑ back to: Getting Started · Prompts

Password Prompt

Prompt that takes user input and masks it in the terminal. Also see the invisible prompt

Enquirer Password Prompt

Related prompts

↑ back to: Getting Started · Prompts

Select Prompt

Prompt that allows the user to select from a list of options.

Enquirer Select Prompt

Related prompts

↑ back to: Getting Started · Prompts

Snippet Prompt

Prompt that allows the user to replace placeholders in a snippet of code or text.

Prompts

Related prompts

↑ back to: Getting Started · Prompts

Sort Prompt

Prompt that allows the user to sort items in a list.

Example

In this example, custom styling is applied to the returned values to make it easier to see what's happening.

Enquirer Sort Prompt

Related prompts

↑ back to: Getting Started · Prompts

Survey Prompt

Prompt that allows the user to provide feedback for a list of questions.

Enquirer Survey Prompt

Related prompts

❯ Types

Enquirer 2.0 introduced the concept of prompt "types", with the goal of making custom prompts easier than ever to create and use. There are 4 (soon to be 5!) type classes:

Each type is a low-level class that may be used as a starting point for creating higher level prompts. Continue reading to learn how.

ArrayPrompt

The ArrayPrompt class is used for creating prompts that display a list of choices in the terminal. For example, Enquirer uses this class as the basis for the Select and Survey prompts.

Options

In addition to the options available to all prompts, Array prompts also support the following options.

OptionRequired?TypeDescription
typeYesstring|functionEnquirer uses this value to determine the type of prompt to run, but it's optional when prompts are run directly.
nameYesstring|functionUsed as the key for the answer on the returned values (answers) object.
messageYesstring|functionThe message to display when the prompt is rendered in the terminal.
autofocusnostring|numberThe index or name of the choice that should have focus when the prompt loads. Only one choice may have focus at a time.
initialnostring|functionThe default value to return when the user does not supply a value.
formatnofunctionFunction to format user input in the terminal.
resultnofunctionFunction to format the final submitted value before it's returned.
stdinnostreamThe input stream to use for emitting keypress events. Defaults to process.stdin.
stdoutnostreamThe output stream to use for writing the prompt to the terminal. Defaults to process.stdout.
validatenofunctionFunction to validate the submitted value before it's returned. This function may return a boolean or a string. If a string is returned it will be used as the validation error message.
Properties

Array prompts have the following instance properties and getters.

Property nameTypeDescription
choicesarrayArray of choices that have been normalized from choices passed on the prompt options.
cursornumberPosition of the cursor relative to the user input (string).
enabledarrayReturns an array of enabled choices.
focusedarrayReturns the currently selected choice in the visible list of choices. This is similar to the concept of focus in HTML and CSS. Focused choices are always visible (on-screen). When a list of choices is longer than the list of visible choices, and an off-screen choice is focused, the list will scroll to the focused choice and re-render.
focusedGets the currently selected choice. Equivalent to prompt.choices[prompt.index].
indexnumberPosition of the pointer in the visible list (array) of choices.
limitnumberThe number of choices to display on-screen.
selectedarrayEither a list of enabled choices (when options.multiple is true) or the currently focused choice.
visiblestring
Methods
MethodDescription
pointer()Returns the visual symbol to use to identify the choice that currently has focus. The symbol is often used for this. The pointer is not always visible, as with the autocomplete prompt.
indicator()Returns the visual symbol that indicates whether or not a choice is checked/enabled.
focus()Sets focus on a choice, if it can be focused.
Choices

Array prompts support the choices option, which is the array of choices you want to allow the user to select from. Choices may be defined as strings or objects.

Choice objects

Choices are normalized to the following interface:

{
  name: string;
  message: string | undefined;
  value: string | undefined;
  hint: string | undefined;
  disabled: boolean | string | undefined;
}

Choice properties

OptionTypeDescription
namestringThe unique key to identify a choice
messagestringThe message to display in the terminal. name is used when this is undefined.
valuestringValue to associate with the choice. Useful for creating key-value pairs from user choices. name is used when this is undefined.
choicesarrayArray of "child" choices.
hintstringHelp message to display next to a choice.
rolestringDetermines how the choice will be displayed. Currently the only role supported is separator. Additional roles may be added in the future (like heading, etc). Please create a [feature request]
enabledbooleanEnabled a choice by default. This is only supported when options.multiple is true or on prompts that support multiple choices, like MultiSelect.
disabledboolean|stringDisable a choice so that it cannot be selected. This value may either be true, false, or a message to display.
indicatorstring|functionCustom indicator to render for a choice (like a check or radio button).

Example usage

const { prompt } = require('enquirer');

const question = {
  type: 'select',
  name: 'color',
  message: 'Favorite color?',
  initial: 1,
  choices: [
    { name: 'red',   message: 'Red',   value: '#ff0000' },
    { name: 'green', message: 'Green', value: '#00ff00' },
    { name: 'blue',  message: 'Blue',  value: '#0000ff' }
  ]
};

prompt(question)
  .then(answer => console.log('Answer:', answer))
  .catch(console.error);

BooleanPrompt

The BooleanPrompt class is used for creating prompts that display and return a boolean value.

Returns: boolean

NumberPrompt

The NumberPrompt class is used for creating prompts that display and return a numerical value.

Returns: string|number (number, or number formatted as a string)

StringPrompt

The StringPrompt class is used for creating prompts that display and return a string value.


❯ Custom prompts

With Enquirer 2.0, custom prompts are easier than ever to create and use.

How do I create a custom prompt?

Custom prompts are created by extending Enquirer's Prompt class, or one of the built-in prompts or low-level types.

const { Prompt } = require('enquirer');

class HaiKarate extends Prompt {
  constructor(options = {}) {
    super(options);
    this.value = options.initial || 0;
    this.cursorHide();
  }
  up() {
    this.value++;
    this.render();
  }
  down() {
    this.value--;
    this.render();
  }
  render() {
    this.clear(); // clear previously rendered prompt from the terminal
    this.write(`${this.state.message}: ${this.value}`);
  }
}

To register a custom prompt, you must first instantiate Enquirer.

const Enquirer = require('enquirer');
const enquirer = new Enquirer();

Then use the .register() method to add your custom prompt.

enquirer.register('haikarate', HaiKarate);

Now you can do the following when defining "questions".

let spritzer = require('cologne-drone');
let answers = await enquirer.prompt([
  {
    type: 'haikarate',
    name: 'cologne',
    message: 'How many sprays do you need?',
    initial: 10,
    async onSubmit(name, value) {
      await spritzer.activate(value); //<= activate drone 
      return value;
    }
  }
]);

❯ Keypresses

All prompts

Key combinations that may be used with all prompts.

commanddescription
ctrl+aMove the cursor to the first character in user input.
ctrl+cCancel the prompt.
ctrl+gReset the prompt to its initial state.

Move cursor

Key combinations that may be used on prompts that support user input, such as the input prompt, password prompt, and invisible prompt).

commanddescription
leftMove the cursor forward one character.
rightMove the cursor back one character.
ctrl+aMove cursor to the start of the line
ctrl+eMove cursor to the end of the line
ctrl+bMove cursor back one character
ctrl+fMove cursor forward one character
ctrl+xToggle between first and cursor position

Select choices

These key combinations may be used on prompts that support multiple choices, such as the multiselect prompt, or the select prompt when the multiple options is true.

commanddescription
spaceToggle the currently selected choice when options.multiple is true.
numberMove the pointer to the choice at the given index. Also toggles the selected choice when options.multiple is true.
aToggle all choices to be enabled or disabled.
iInvert the current selection of choices.
gToggle the current choice group.

Hide/show choices

commanddescription
fn+upDecrease the number of visible choices by one.
fn+downIncrease the number of visible choices by one.

Move/lock Pointer

commanddescription
numberMove the pointer to the choice at the given index. Also toggles the selected choice when options.multiple is true.
upMove the pointer up.
downMove the pointer down.
ctrl+aMove the pointer to the first visible choice.
ctrl+eMove the pointer to the last visible choice.
(mac) fn+left / (win) homeMove the pointer to the first choice in the choices array.
(mac) fn+right / (win) endMove the pointer to the last choice in the choices array.
shift+upScroll up one choice without changing pointer position (locks the pointer while scrolling).
shift+downScroll down one choice without changing pointer position (locks the pointer while scrolling).

❯ Options

Each prompt takes an options object (aka "question" object), that implements the following interface:

{
  // required
  type: string | function,
  name: string | function,
  message: string | function | async function,

  // optional 
  initial: string | function | async function
  format: function | async function,
  result: function | async function,
  validate: function | async function
}

General options

All prompts take the following options.

PropertyRequired?TypeDescription
typeYesstring|functionEnquirer uses this value to determine the type of prompt to run, but it's optional when prompts are run directly.
nameYesstring|functionUsed as the key for the answer on the returned values (answers) object.
messageYesstring|functionThe message to display when the prompt is rendered in the terminal.
initialnostring|functionThe default value to return if the user does not supply a value.
formatnofunctionFunction to format user input in the terminal.
resultnofunctionFunction to format the final submitted value before it's returned.
validatenofunctionFunction to validate the submitted value before it's returned. This function may return a boolean or a string. If a string is returned it will be used as the validation error message.

Example usage

const { prompt } = require('enquirer');

const question = {
  type: 'input',
  name: 'username',
  message: 'What is your username?'
};

prompt(question)
  .then(answer => console.log('Answer:', answer))
  .catch(console.error);

❯ Release History

Please see CHANGELOG.md.

❯ Performance

MacBook Pro, Intel Core i7, 2.5 GHz, 16 GB.

Load time

Time it takes for the module to load the first time (average of 3 runs):

enquirer: 4.013ms
inquirer: 286.717ms

❯ About

Contributing

Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.

Running Tests

Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:

$ npm install && npm test
Building docs

(This project's readme.md is generated by verb, please don't edit the readme directly. Any changes to the readme must be made in the .verb.md readme template.)

To generate the readme, run the following command:

$ npm install -g verbose/verb#dev verb-generate-readme && verb

Contributors

CommitsContributor
72jonschlinkert
12doowb
1mischah
1skellock

Author

Jon Schlinkert

Credit

Thanks to derhuerst, creator of prompt libraries such as prompt-skeleton, which influenced some of the concepts we used in our prompts.

License

Copyright © 2018, Jon Schlinkert. Released under the MIT License.

Keywords

FAQs

Last updated on 09 Nov 2018

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc