NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #1091 most downloaded on npm
Core Inquirer prompt API
Last release 10 days ago
07 Sep 2026
Release timing varies
gaps range from 8 days to 3 months
Some releases are documented
notes for 21 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
126 releases · first in 2019
Nothing published for this version
chore: Switch wrap-ansi with fast-wrap-ansi
wrap-ansi with fast-wrap-ansifeat(search): Add support for default.
search): Add support for default.rawlist): Add support for description of choices. That information is displayed under the list when the choice is highlighted.One column per quarter.
Feat: rawlist now supports default option.
rawlist now supports default option.select now infer return type properly when passing a choices array of string literals.useState doesn't require a default value anymore; in which case it'll default to undefineduseRef doesn't require a default value anymore; in which case it'll default to undefinedExamples:
const [value, setValue] = useState<number>();
// value: number | undefined;
const [value, setValue] = useState<number>(1);
// value: number;
Nothing published for this version
This makes Inquirer smaller and reduces risks of vulnerabilities coming from transitive dependencies.
This is a major release that modernizes the codebase for Node.js ≥ 20.
Impact: All packages are now ESM-only. CommonJS imports are no longer supported.
If you're on modern Node versions (≥ 20), this should be transparent and have no impact.
Minimum Node.js version is now 20.x
Node.js versions below 20 are no longer supported. Please upgrade to Node.js 20 or later.
Node min versions: >=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0
The following deprecated APIs have been removed after being deprecated in previous releases:
list prompt alias removed (affects inquirer package only)The list alias has been removed from the inquirer package. This only impacts users of the legacy inquirer package, not users of @inquirer/prompts or individual prompt packages.
// ❌ No longer available (inquirer package only)
import inquirer from 'inquirer';
const answer = await inquirer.prompt([
{ type: 'list', name: 'choice', message: 'Pick one:', choices: ['a', 'b'] }
]);
// ✅ Use 'select' instead
import inquirer from 'inquirer';
const answer = await inquirer.prompt([
{ type: 'select', name: 'choice', message: 'Pick one:', choices: ['a', 'b'] }
]);
helpMode theme property removed// ❌ No longer available
const answer = await select({
theme: { helpMode: 'never' }
});
// ✅ Use theme.style.keysHelpTip instead
const answer = await select({
theme: {
style: {
keysHelpTip: () => undefined // or your custom styling function
}
}
});
This affects the following prompts:
@inquirer/checkbox@inquirer/search@inquirer/selectinstructions config property removed// ❌ No longer available
const answer = await checkbox({
instructions: 'Custom instructions'
});
// ✅ Use theme.style.keysHelpTip instead
const answer = await checkbox({
theme: {
style: {
keysHelpTip: (text) => 'Custom instructions'
}
}
});
This affects the following prompts:
@inquirer/checkbox@inquirer/search@inquirer/selectcancel() method removedThe cancel() method on prompt return custom Promise has been removed.
// ❌ No longer available
const answerPromise = input({ message: 'Name?' });
answerPromise.cancel();
const answer = await answerPromise;
// ✅ Use AbortSignal instead
const controller = new AbortController();
const answer = await input(
{ message: 'Name?' },
{ signal: controller.signal }
);
controller.abort();
styleTextInternal change: The project now uses Node.js built-in util.styleText() instead of the yoctocolors package for terminal colors. This makes Inquirer smaller and reduces risks of vulnerabilities coming from transitive dependencies.
usePagination() doesn't return help tips anymore (and also doesn't take a theme argument anymore.) Help tips are now solely the responsibility of prompt implementation.Nothing published for this version
Nothing published for this version
Nothing published for this version
Feat: Thrown errors from Inquirer are now all custom (so they can be filtered.) Those errors are exported from the package.
Bugfix: usePrefix returned broken loader frames (bug introduced with the themability capabilities)
usePrefix returned broken loader frames (bug introduced with the themability capabilities)Hoist peer-dependencies to remove warning when using yarn
yarn@types/node is now only a peerDependencies. This reduces the install size of inquirer dramatically for folks not using Typescript. It's unlikely to br
@types/node is now only a peerDependencies. This reduces the install size of inquirer dramatically for folks not using Typescript. It's unlikely to break your builds if you used TS already, if it does run npm install --dev @types/node/yarn add --dev @types/node.type Theme, makeTheme)message option isn't transformed by the core anymore - options are now passed through as-is to the prompt.No technical breaking changes; but we changed the style of the question prefix once the answer is provided. Once a question is answer, the prefix beco…
No technical breaking changes; but we changed the style of the question prefix once the answer is provided. Once a question is answer, the prefix becomes a tick mark (previously it was the same ? as when the prompt is idle.)
This is theme-able, and so can be overwritten to with theme.prefix.
usePagination now requires pageSize to be passed in. The size of the pages should inform the help shown on the screen, and keeping this information in 2 areas leave a change the default value will mistmatch.number.transformer option now receive { isFinal } as a flag to allow transforming the final answer differently.name as default message if message isn't provided.password prompt.@inquirer/core bumped to ^12.0.0
@inquirer/core bumped to ^12.0.0No source changes.
Nothing published for this version
Feat: Added a loading message while validating input. Customizable through a theme option.
transformer option to the input prompt allowing you to modify the displayed user input. (Useful to modify colors as user type, etc)Fix: breaking change wrongly removed the Separator export.
Separator export.useEffect body. See #1307This decision was made to disambiguate what breaks in each package - with prompts re-exporting core, any core breaking change (no matter how minor) ca…
@inquirer/core isn't exported from @inquirer/prompts anymore. If you want to create custom prompts, import from the core package. This decision was made to disambiguate what breaks in each package - with prompts re-exporting core, any core breaking change (no matter how minor) caused a major version bump. Now only prompts interfaces breaking changes will be major on prompts. We're hoping this will simplify your usage of @inquirer/* packages.validate config; but it was rarely used. It's been removed and prompts relying on it are expected to handle it on their own (no default value.) The types were updated accordingly and will raise issue if you're using typescript.AsyncPromptConfig, it's been deprecated in favour of PromptConfig- import type { AsyncPromptConfig } from '@inquirer/core';
+ import type { PromptConfig } from '@inquirer/core';
- type Config = AsyncPromptConfig & { custom: 'value' };
+ type Config = PromptConfig<{ custom: 'value' }>;
Note: Old interface works for now, but is marked as deprecated.
Breaking: Upgrade to RxJS v5 which updates a bunch of Reactive interface method names.
For people not using the Reactive interface directly, this new major release should just work out of the box.
- feat: Add support for default.
default.@inquirer/select prompt. Also added a loop option to control the list loop behaviour when reaching the boundaries.theme.indexMode to control displaying an index prefix in front of each choice. (defaults to hidden)shortcut config. Allows to customize or disable shortcut keys for select all and invert selection.validationFailureMode: 'keep' | 'clear' to control the behaviour when validation fails.file option covering all options supported by external-editor.Prettify is now recursive, so makeTheme returns a fully flattened theme type (nested style intersections merged into one object) for better IDE display (#2239).All prompts are now themable. See each prompts documentation about the options available.
message option of each prompt must now be a string. It could previously be an asynchronous function. See recipes for a migration option.Major rewrite of the core to rely on node's async hooks for better isolation of each prompts. Relying on this means each prompt context is fully isolated (previously it would rely on the module level context.)
We expect this update to be transparent to most. Though some custom event handlers within useEffect could stop working. If you find any issues there, first please let us know - there might be thing to improve internally to make it transparent. The manual fix will likely be to explicitly define events callback as an AsyncResource.
Let us know how this works for you!
The core codebase went through a major es5 to 6 refactor. As such, we're dropping support for Node 4.
This change will likely require changes to the community Plugins as es6 classes are enforcing more restriction (like constructor can only be invoked with new).
list, expand and rawlist prompts now accepts the value as default (previously it would only accept the choice index).Fix bug where a setState call triggered from useEffect might re-render the screen with the previous state.
setState call triggered from useEffect might re-render the screen with the previous state.Fix: There was an issue with ESM/CJS imports interoperability that should now be fixed. Ref #1297
Feature: New end-to-end testing utilities: @inquirer/testing/vitest & @inquirer/testing/jest. View documentation.
@inquirer/testing/vitest & @inquirer/testing/jest. View documentation.password prompt can now rendered hidden input (Unix style)filter function now also receive the current answers as argumentTried to maintain backward compatibility as best as possible, but there could be type issue surface. Legacy API marked as deprecated.
Rewrite internals to support a clean promise API. Tried to maintain backward compatibility as best as possible, but there could be type issue surface. Legacy API marked as deprecated.
@inquirer/core.Paginator is deprecated in favour of the usePagination hook. This hook will always properly reflect the width of the output stream.Fix bug where Common.js Typescript types definition were broken (should have no impact on ESM users)
Fix bug where Common.js Typescript types definition were broken (should have no impact on ESM users)
Add support for Separator in the choices array.
Separator in the choices array.@inquirer/core@9.1.0 adding support for { signal: AbortSignal } in the context options to programatically cancel a prompt.[Typescript] value is now generic and will be inferred from the values passed in.
value is now generic and will be inferred from the values passed in.key in the choice array.@inquirer/core@9.1.0 adding support for { signal: AbortSignal } in the context options to programatically cancel a prompt.useState), it'll only re-renders if the value changed.If you're setting multiple state in a callback from an async function (like setTimeout or a network call), those will not be merged in a single re-renders. For those case, you're better using a state object holding all values to reduce the amount of re-renders. Open to discuss this in #1251
@inquirer/select now support search when typing letters (aiming to imitate how the HTML search works)
@inquirer/select now support search when typing letters (aiming to imitate how the HTML <select> search works)getFullOutput() utility that'll return a raw string of everything that was written to the output streamuseEffect now pass the active Readline instance to the effect callback. e.g useEffect((readline) => ...
This shouldn't cause issue for most, but if you had specific or uncommon use of the testing framework, this could be a breaking change.
Rewrote how raw input is handled. This shouldn't cause issue for most, but if you had specific or uncommon use of the testing framework, this could be a breaking change.
Major refactor of the core to allow multiple features:
input(...).cancel())Now includes a stricter answer parser. Prior to this change, the prompt would default to Yes on almost any input.
name with . are now expand in the answer object. e.g. name.sub would generate an answer object formatted as {name: {sub: 'answer'}}.expand prompt default value if not specified is now help.Now supports the loop: false option. (This feature was available on inquirer, but not ported to new prompts yet)
loop: false option. (This feature was available on inquirer, but not ported to new prompts yet)Nothing published for this version
Nothing published for this version
Now exposes the waitForUserInput option. Setting it to false will automatically launch the editor.
Now exposes the waitForUserInput option. Setting it to false will automatically launch the editor.
Be careful using this option as this mean the user will not have read the question/instruction before reaching the editor.
a and i keys to trigger select all and invert selection.editor prompt is now non blocking.filter functions are now surfaced to the user.Fix bug where options passed to Inquirer were mutated.
Fix list prompts being re-render each time enter key was pressed.
Search now support autocomplete like behaviours - See documentation
@inquirer/core@9.1.0 adding support for { signal: AbortSignal } in the context options to programatically cancel a prompt.editor prompt to launch an editor allowing to easily enter multiline content - or edit file content.Nothing published for this version
Allow falsy values as option value in expand prompt.
value in expand prompt.Release tooling package.
package pin <dependency> command rewrites caret/tilde ranges to exact versions across public packages; the release pipeline uses it to pin @inquirer/type in published manifests (#2247).package normalize command applies the fixups required to make manifests valid for npm publishing. It replaces the inline jq step that stripped workspace:* devDependencies (byte-identical output, now also covering the published tools/* packages).index.ts + command.ts, tests colocated); bin.ts only assembles the CLI.Fix issue where vim/emacs keybindings would conflict with the search term input when typing letters used to navigate through the list.
Fix issue where vim/emacs keybindings would conflict with the search term input when typing letters used to navigate through the list.
expand prompt to correctly use the value key as the prompt answer.expand prompt support the filter key.Make @types/node an optional peer dependency.
@types/node an optional peer dependency.Fix issue where typing would disallow the following
search({
...,
source: async (term: string = '') => {
...
},
});
space key instead of any keys.readline2 in favor of Node core version. This might fix some edge cases some users on windows encountered.Drop-in replacement for @inquirer/prompts with localized text.
New package - first release!
Drop-in replacement for @inquirer/prompts with localized text.
The whole inquirer API is now based on promises!
inquirer.prompt(questions).then(). There's no more callback function.this.async().filter is now always run before validate #122inquirer.prompt doesn't take a callback argument anymoreAnd various other minor fixes and cleanup to the code base.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →