NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #882 most downloaded on npm
A collection of common interactive command line user interfaces.
Last release 11 days ago
07 Sep 2026
Release timing varies
gaps range from 8 days to 3 months
Most releases are documented
notes for 48 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
240 releases · first in 2013
Nothing published for this version
Bugfix: Fix a dependency who became ESM only
Nothing published for this version
Nothing published for this version
One column per quarter.
Performance improvements to usePrefix() when switched to loading mode. There's now a little delay of 300ms before displaying the loader to avoid flick
usePrefix() when switched to loading mode. There's now a little delay of 300ms before displaying the loader to avoid flickering when fast validation occurs.Nothing published for this version
chore: Switch wrap-ansi with fast-wrap-ansi
wrap-ansi with fast-wrap-ansirawList prompt.feat(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.checkbox prompt: Update the help message to be more complete. And the help message is now shown until a selection is made.Fix older Node version compatibility issue.
Fix older Node version compatibility issue.
Fix an error being thrown inside the rawlist prompt
rawlist promptFix password prompt appearing when doing async filtering/validation
And bump of all dependencies.
- Fix bug on rawList prompt - Bump dependencies
rawList promptFix: Number prompt default behavior.
Fix: Number prompt default behavior.
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;
inquirer.prompt() now accept a shorthand object syntax instead of an array with named prompts:const { foo, bar } = await inquirer.prompt({
foo: {
message: '...',
default: '...',
},
bar: {
default: '...',
}
}):
Fix issue with duplicate keys in expand prompt not being caught if casing didn't match
Fixes
expand prompt not being caught if casing didn't matchrawlist prompt ignoring short optionAnd lastly general dependency upgrade (to non-ESM versions)
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.postfix option to the editor prompt to allow easily turning on proper syntax highlightingFix an issue where inquirer would throw if Node is ran with the new `--frozen-intrinsics` flag.
--frozen-intrinsics flag.This fix is also released through patches of all specific prompts packages.
Fix the loop: false option in the checkbox prompt.
Fix the loop: false option in the checkbox prompt.
Mark @types/node as an optional peer dependency across all packages.
@types/node as an optional peer dependency across all packages.New option loop (boolean) for list type prompts. This prevents the list from looping when reaching the top or bottom of the selection.
loop (boolean) for list type prompts. This prevents the list from looping when reaching the top or bottom of the selection.039a55c7ec04d95887bdeb9b164cc634f26beb57 #923 Only import used lodash methods. (@merceyz)
@inquirer/confirm formatted output value. (@rbardini)engines field for Node.js 8. (@LitoMore)Feat: Thrown errors from Inquirer are now all custom (so they can be filtered.) Those errors are exported from the package.
Nothing published for this version
Nothing published for this version
Errors when running in non-TTY environment are now marked and catchable.
Errors when running in non-TTY environment are now marked and catchable.
Nothing published for this version
Revert broken fix done in 7.0.2
Revert broken fix done in 7.0.2
Bugfix: usePrefix returned broken loader frames (bug introduced with the themability capabilities)
usePrefix returned broken loader frames (bug introduced with the themability capabilities)~Work around bug affecting Windows user with Node 10 (#767)~ (Reverted in v7.0.3)
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.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix memory leak with some event listeners not being cleaned up after a prompting session.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Highlight the whole hovered row on the checkbox prompt
Pressing backspace on an empty input prompt now clears the default value.
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.feat: Add support for description of choices. That information is displayed under the list when the choice is highlighted.
description of choices. That information is displayed under the list when the choice is highlighted.toggleMask option to temporarily reveal the typed value with ctrl+t, with a themed, i18n-able help tip for discoverability. Defaults to true; set to false to disable both the shortcut and its help line.@inquirer/core bumped to ^12.0.1@inquirer/type bumped to ^4.1.0Feat: 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.
Improve Windows rendering to properly match terminal size
Improve Windows rendering to properly match terminal size
Update dependency to fix a LGPL license issue.
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).Feat: Unit test API now exposes an await nextRender() utility to wait until a render event occurs. Useful to replace manual await Promise.resolve() or
await nextRender() utility to wait until a render event occurs. Useful to replace manual await Promise.resolve() or timeouts when waiting for an async action (like validation, etc) to complete.prefix and suffix options to question object to allow you to edit the ? prefix or add a custom suffix.Fix bug where user input prompt containing ANSI code would offset the cursor.
Fix BottomBar with multi-line content.
BottomBar with multi-line content.Fix: gracefully exit process on SIGINT (stopped calling process.exit() directly)
SIGINT (stopped calling process.exit() directly)fix: e2e testing utility now gracefully fail if a dependency isn't in the dependency tree (useful for things like strict Yarn PnP)
{ default: fn() }theme.style.keysHelpTip.theme.keybindingsdefault handling:
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 argumentFix help message not always disappearing after interaction in list prompt
ctrl-c) signal on UbuntuProperly respect the pageSize option when deciding whether to paginate or not.
Properly respect the pageSize option when deciding whether to paginate or not.
Fix extra whitespace being printed #506
Fix extra whitespace being printed #506
fix: preserve Value type inference in render()
render()Properly reset the prompt state when a SIGINT signal is emitted. (this fix bug where texts under the input wouldn't be cleared off the terminal after
Your coding agent can read these notes before it upgrades. Set up the MCP server →