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 29 apps in this directory
Activepieces
Automation · AI Assistants
Open-source AI automation platform that converts 280+ workflow integrations into MCP servers for LLMs, with no-code builders and TypeScript extensibility.
AFFiNE
Productivity · Project Management · Note Taking
Write, draw, and plan in one infinite canvas — the open-source alternative to Notion and Miro that keeps your data yours.
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.
Cryptgeon
File Storage · Security
Self-destructing encrypted notes and files that vanish after viewing — the server never sees your keys.
Directus
CMS · Low Code Platforms
Connect any SQL database and get instant REST and GraphQL APIs, a visual management Studio, and a native MCP server for AI agents — free for most organizations.
Fern
Developer Tools
Fern turns a single OpenAPI, AsyncAPI, or Protobuf definition into type-safe SDKs for nine languages and a hosted API documentation site, all from one CLI and one source of truth.
Ghost
CMS · Blogging
Open source headless Node.js CMS for professional publishing, paid memberships, and newsletters with a fully owned audience.
Jitsu
Data Engineering
Open-source, fully-scriptable data ingestion engine that streams events from web, apps, and APIs to any data warehouse in real time.
Kibana
Analytics · Monitoring
Your open source window into the Elastic Stack — query, visualize, and act on data stored in Elasticsearch with real-time dashboards, AI-assisted search, and automated alerting.