Stylish, intuitive and user-friendly prompt system for creating interactive CLI interfaces
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
The core API provides the primary interface for running prompts and managing prompt sessions in Enquirer.
The main entry point for running prompts without creating an Enquirer instance.
/**
* Prompt function that takes a question object or array of questions
* @param questions - Single question object or array of question objects
* @param options - Optional global options for all prompts
* @returns Promise resolving to answers object
*/
function prompt(questions, ...options);Usage Examples:
const { prompt } = require('enquirer');
// Single prompt
const response = await prompt({
type: 'input',
name: 'username',
message: 'What is your username?'
});
console.log(response.username);
// Multiple prompts
const responses = await prompt([
{
type: 'input',
name: 'name',
message: 'What is your name?'
},
{
type: 'confirm',
name: 'proceed',
message: 'Continue?'
}
]);
// With global options
const responses = await prompt(questions, { prefix: '?' });Main class for creating reusable prompt instances with shared configuration and state.
/**
* Create an instance of Enquirer
* @param options - Default options to use with all prompts
* @param answers - Initial answers object
*/
class Enquirer extends EventEmitter {
constructor(options, answers);
}Usage Examples:
const Enquirer = require('enquirer');
// Create instance with default options
const enquirer = new Enquirer({
prefix: '❯',
stdin: process.stdin,
stdout: process.stdout
});
// Create with initial answers
const enquirer = new Enquirer({}, { username: 'admin' });Run one or more prompts using the instance configuration.
/**
* Prompt function that takes a question object or array of questions
* @param questions - Single question object or array of question objects
* @returns Promise resolving to answers object
*/
async prompt(questions);Usage Examples:
const enquirer = new Enquirer();
const response = await enquirer.prompt({
type: 'select',
name: 'framework',
message: 'Choose a framework',
choices: ['React', 'Vue', 'Angular']
});
// Answers are accumulated across calls
const moreAnswers = await enquirer.prompt({
type: 'input',
name: 'projectName',
message: 'Project name?'
});
console.log(enquirer.answers); // Contains all answersRun a single prompt question and return the result. This is used internally by prompt() but can be called directly.
/**
* Ask a single question and return the answer
* @param question - Single question object
* @returns Promise resolving to the answer value
*/
async ask(question);Usage Examples:
const enquirer = new Enquirer();
// Ask a single question
const username = await enquirer.ask({
type: 'input',
name: 'username',
message: 'Enter username:'
});
// Dynamic question type
const answer = await enquirer.ask({
type: (question, answers) => answers.mode === 'advanced' ? 'input' : 'select',
name: 'config',
message: 'Configuration:',
choices: ['basic', 'advanced']
});
// Function-based question
const result = await enquirer.ask(() => ({
type: 'confirm',
name: 'proceed',
message: 'Continue with installation?'
}));Register custom prompt types for use in prompts.
/**
* Register a custom prompt type
* @param type - Prompt type name or object mapping types to constructors
* @param fn - Prompt class or factory function
* @returns Enquirer instance for chaining
*/
register(type, fn);Usage Examples:
const CustomPrompt = require('./custom-prompt');
// Register single type
enquirer.register('custom', CustomPrompt);
// Register multiple types
enquirer.register({
'type1': Type1Prompt,
'type2': Type2Prompt
});
// Use registered type
const response = await enquirer.prompt({
type: 'custom',
name: 'result',
message: 'Custom prompt'
});Apply plugins to extend Enquirer functionality.
/**
* Use an enquirer plugin
* @param plugin - Plugin function that receives the Enquirer instance
* @returns Enquirer instance for chaining
*/
use(plugin);Usage Examples:
function themePlugin(enquirer) {
// Customize enquirer instance
enquirer.options.prefix = '🎯';
// Add custom methods
enquirer.quickConfirm = async (message) => {
return enquirer.prompt({
type: 'confirm',
name: 'confirmed',
message
});
};
}
enquirer.use(themePlugin);
const result = await enquirer.quickConfirm('Are you sure?');All built-in prompt types are available as static methods on the Enquirer class and as instance methods.
// Available as static methods (complete list)
Enquirer.autocomplete(options);
Enquirer.basicauth(options);
Enquirer.confirm(options);
Enquirer.editable(options);
Enquirer.form(options);
Enquirer.input(options);
Enquirer.invisible(options);
Enquirer.list(options);
Enquirer.multiselect(options);
Enquirer.numeral(options);
Enquirer.password(options);
Enquirer.quiz(options);
Enquirer.scale(options);
Enquirer.select(options);
Enquirer.snippet(options);
Enquirer.sort(options);
Enquirer.survey(options);
Enquirer.text(options);
Enquirer.toggle(options);
// Available as instance methods (complete list)
enquirer.autocomplete(options);
enquirer.basicauth(options);
enquirer.confirm(options);
enquirer.editable(options);
enquirer.form(options);
enquirer.input(options);
enquirer.invisible(options);
enquirer.list(options);
enquirer.multiselect(options);
enquirer.numeral(options);
enquirer.password(options);
enquirer.quiz(options);
enquirer.scale(options);
enquirer.select(options);
enquirer.snippet(options);
enquirer.sort(options);
enquirer.survey(options);
enquirer.text(options);
enquirer.toggle(options);Usage Examples:
// Static usage
const name = await Enquirer.input({
message: 'Your name?',
initial: 'Anonymous'
});
// Instance usage
const enquirer = new Enquirer();
const color = await enquirer.select({
message: 'Pick a color',
choices: ['red', 'green', 'blue']
});The static prompt function also exposes all prompt types as methods for convenience.
// Available on the static prompt function
const { prompt } = require('enquirer');
prompt.autocomplete(options);
prompt.basicauth(options);
prompt.confirm(options);
prompt.editable(options);
prompt.form(options);
prompt.input(options);
prompt.invisible(options);
prompt.list(options);
prompt.multiselect(options);
prompt.numeral(options);
prompt.password(options);
prompt.quiz(options);
prompt.scale(options);
prompt.select(options);
prompt.snippet(options);
prompt.sort(options);
prompt.survey(options);
prompt.text(options);
prompt.toggle(options);Usage Examples:
const { prompt } = require('enquirer');
// Use specific prompt types directly
const username = await prompt.input({
message: 'Enter username:',
initial: 'admin'
});
const framework = await prompt.select({
message: 'Choose framework:',
choices: ['React', 'Vue', 'Angular']
});
const confirmed = await prompt.confirm({
message: 'Are you sure?'
});Access accumulated answers from all prompts run on the instance.
// Instance property
answers: object;Access registered prompt types.
// Static and instance property
static prompts: object;
prompts: object;Access to the base Prompt class for extending.
// Static and instance property
static Prompt: class;
Prompt: class;The Enquirer class extends EventEmitter and emits events during prompt execution. Both Enquirer instances and individual prompts emit various events throughout their lifecycle.
// Main Enquirer events
enquirer.on('prompt', (prompt, enquirer) => {});
enquirer.on('answer', (name, value, prompt) => {});// Base prompt events (available on all prompt types)
prompt.on('keypress', (input, key) => {});
prompt.on('state', (state) => {});
prompt.on('alert', () => {});
prompt.on('submit', (value) => {});
prompt.on('cancel', (error) => {});
prompt.on('close', () => {});
prompt.on('start', (prompt) => {});
prompt.on('run', () => {});
// Array prompt events (select, multiselect, autocomplete, etc.)
prompt.on('choice', (choice, index, prompt) => {});
prompt.on('toggle', (choice, prompt) => {});The static prompt function also extends EventEmitter and bubbles events from individual prompts.
const { prompt } = require('enquirer');
// Events on the static prompt function
prompt.on('prompt', (promptInstance, enquirer) => {});
prompt.on('answer', (name, value, promptInstance) => {});
prompt.on('keypress', (input, key) => {});
prompt.on('submit', (value) => {});
prompt.on('cancel', (error) => {});Usage Examples:
const enquirer = new Enquirer();
// Track all prompts and answers
enquirer.on('prompt', (prompt) => {
console.log(`Starting prompt: ${prompt.options.name}`);
});
enquirer.on('answer', (name, value) => {
console.log(`Answered ${name}: ${value}`);
});
// Listen for individual prompt events
enquirer.on('keypress', (input, key) => {
if (key.name === 'escape') {
console.log('User pressed escape');
}
});
await enquirer.prompt({
type: 'input',
name: 'username',
message: 'Username?'
});
// Using static prompt with events
const { prompt } = require('enquirer');
prompt.on('answer', (name, value) => {
console.log(`Global answer listener: ${name} = ${value}`);
});
const response = await prompt({
type: 'select',
name: 'framework',
message: 'Choose framework',
choices: ['React', 'Vue', 'Angular']
});
// Individual prompt instance events
const promptInstance = enquirer.prompt({
type: 'multiselect',
name: 'features',
message: 'Select features',
choices: ['auth', 'routing', 'testing']
});
// Listen to choice events on array prompts
promptInstance.on('choice', (choice, index) => {
console.log(`Focused on choice: ${choice.name} at index ${index}`);
});
promptInstance.on('toggle', (choice) => {
console.log(`Toggled choice: ${choice.name} (${choice.enabled ? 'enabled' : 'disabled'})`);
});
const result = await promptInstance;// Keypress event data
interface KeypressData {
sequence: string;
name: string;
ctrl: boolean;
meta: boolean;
shift: boolean;
}
// State event data
interface StateData {
name: string;
message: string;
value: any;
submitted: boolean;
cancelled: boolean;
// ... other state properties
}
// Choice event data
interface ChoiceData {
name: string;
value: any;
enabled: boolean;
disabled: boolean | string;
message?: string;
hint?: string;
// ... other choice properties
}Install with Tessl CLI
npx tessl i tessl/npm-enquirer