Inquirer.js
Interactive command-line prompts for Node.js — lists, checkboxes, confirms, and more with a single async API.
Repository Health
Technical Analysis
Inquirer.js is the collection of interactive command-line user interfaces most Node.js CLI tools reach for first. A single inquirer.prompt() call takes an array (or map, or RxJS observable) of question objects and resolves an answers hash, handling validation, defaults, conditional branching (when), and terminal rendering along the way.
The project has shipped since 2013 and now sits at 50M+ weekly npm downloads, making it one of the most battle-tested pieces of CLI infrastructure in the JavaScript ecosystem. Tools like Yeoman, npm init flows, and countless scaffolding CLIs are built on top of it.
The modern codebase is a monorepo of @inquirer/* scoped packages (core, prompts, checkbox, confirm, select, input, editor, search, ansi, type) with the inquirer package itself acting as a thin, backward-compatible wrapper around them — so existing inquirer.prompt() call sites keep working while the underlying primitives can be composed directly via @inquirer/prompts for new code.
What You Get
- A
prompt()function that accepts an array, a map, or an RxJS-compatible observable of question objects and returns a promise of the collected answers - Built-in prompt types (list, rawlist, expand, checkbox, confirm, input, number, password, editor) covering the vast majority of CLI input needs out of the box
- Conditional flow control via a
whenfunction/boolean per question, plus per-questionvalidate,filter, andtransformerhooks that can run sync or async - A
createPromptModule()escape hatch for isolated prompt registries, andregisterPrompt()for adding custom/community prompt types - A reactive interface — passing an RxJS
Subjectof questions lets a CLI push new questions dynamically as earlier answers resolve
Common Use Cases
- Project scaffolding CLIs that ask a sequence of setup questions (name, template, package manager) before generating files
- Interactive
git-style ornpm-style command wrappers that confirm destructive actions before running them - Multi-step onboarding flows where later questions are conditionally shown based on earlier answers via
when - Build tools and generators (in the Yeoman lineage) that need password/editor/checkbox prompts alongside plain text input
Under The Hood
Architecture
The inquirer package (packages/inquirer/src/index.ts → ui/prompt.ts) is a compatibility shim over the newer @inquirer/core primitives: PromptsRunner.run() iterates an async generator of questions (getQuestions), resolves each one’s message/default/choices (which may be async functions) via fetchAsyncQuestionProperty, decides whether to ask it via shouldRun (respecting when and previously-answered values), and dispatches to either a modern PromptFn or a legacy class-based LegacyPromptConstructor detected through duck-typing (isPromptConstructor). Underneath, @inquirer/core’s createPrompt() (packages/core/src/lib/create-prompt.ts) wires a React-like hooks engine (hook-engine.ts, backed by AsyncLocalStorage rather than a VDOM) to a ScreenManager that mutes stdout via mute-stream and re-renders only on state change, with useKeypress/useEffect-style primitives driving the terminal UI. This hooks-over-readline design is the core abstraction the whole prompt catalogue is built from — changing it would ripple through every @inquirer/* prompt package.
Tech Stack
A Yarn (v4) + Turborepo workspace of TypeScript-first ESM packages (packages/*), targeting current Node.js LTS ranges, with @inquirer/core handling readline/terminal concerns, mute-stream for output muting during editing, run-async for callback/promise interop on legacy validate/filter functions, and optional rxjs support for the observable-based prompt session API. Builds run through tsc orchestrated by turbo, tests via vitest, and linting via oxlint/oxfmt plus eslint.
Code Quality
The inquirer package carries an extensive public-API test suite (inquirer.test.ts, well over a thousand lines) covering question maps, arrays, observables, validation/filter/when timing, and TTY edge cases, run under vitest. CI (main.yml) gates on tsc, oxlint, oxfmt --check, and eslint before tests, with a separate CodeQL workflow and a zizmor job specifically linting the GitHub Actions workflows themselves for supply-chain issues — a level of CI rigor above most CLI libraries of this age.
API Design
The headline API is a single inquirer.prompt(questions) call returning a plain answers object, which is about as low-boilerplate as an interactive CLI API gets. Question objects follow one consistent shape (type, name, message, default, choices, validate, filter, when) across every prompt type, and the README documents each field and prompt type with runnable examples in packages/inquirer/examples/. The main tension is that this package now explicitly documents itself as the legacy/back-compat layer, steering new adoption toward the more ergonomic per-prompt @inquirer/prompts functions.
Used by 66 apps in this directory
Activepieces
AI Assistants · Automation · Mcp
Open-source AI automation platform that converts 280+ workflow integrations into MCP servers for LLMs, with no-code builders and TypeScript extensibility.
AFFiNE
Collaboration · Note Taking · Productivity
Write, draw, and plan in one infinite canvas — the open-source alternative to Notion and Miro that keeps your data yours.
AFFiNE
Collaboration · Note Taking · Productivity
Write, draw, and plan in one infinite canvas — the open-source alternative to Notion and Miro that keeps your data yours.
AnythingLLM
AI Assistants · Automation · Developer Tools
The all-in-one AI platform for private document chat, no-code agents, and local LLMs with zero setup friction.
Budibase
Low Code Platforms · No Code Platforms
Build AI agents, automations, and internal apps on a single open-source platform with full self-hosting control.
byterover-cli
AI Agents · AI Code Assistants · AI Memory
A portable memory layer for AI coding agents — curate structured project knowledge into a version-controlled context tree that syncs across tools, machines, and teammates.
Convex Backend
Databases · Developer Tools
Open-source reactive database that lets developers build live-updating apps with pure TypeScript, strong consistency, and real-time subscriptions—no separate API layer required.
Convex Backend
Databases · Developer Tools
Open-source reactive database that lets developers build live-updating apps with pure TypeScript, strong consistency, and real-time subscriptions—no separate API layer required.
Convex Backend
Databases · Developer Tools
Open-source reactive database that lets developers build live-updating apps with pure TypeScript, strong consistency, and real-time subscriptions—no separate API layer required.