What changed in Inquirer.js from 7 to 8
18 releases numbered after 7.10.1 up to and including 8.7.1, stable releases only. 7.10.1 and 8.7.1 are the newest stable releases of 7 and 8 we track; this page follows them as new ones ship.
- 2 mention breaking changes
- 1 removes or deprecates something
37 changes across 18 releases
- password prompt gains the toggleMask option to reveal typed value with ctrl+t
- Add initialValue option to @inquirer/search to pre-fill the search input
- Read env variable INQUIRER_KEYBINDINGS to enable vim or emacs keybindings as a user preference
- Add a loading message while validating editor prompt input
- Cursor will now hover disabled options of the list while still preventing interaction with them
- Various new theme options to make all prompts content localizable
- Add support for `default` in search prompts
- Add support for `description` of choices in rawlist prompts, displayed under the list when the choice is highlighted
- rawlist now supports default option
- confirm prompt now matches localized yes/no answers per-locale
- Prettified prompt and theme types for better IDE display
- Update @inquirer/core to 12.0.0, which makes the useState setter accept a reducer/updater function
- Rolled back mute-stream dependency from v4 to v3 to restore compatibility with supported Node.js versions
- Updated explicit engines field to match the minimum Node.js version already enforced by the tooling
- Search feature in the select prompt is disabled when using vim or emacs keybindings
- Improve type inference with checkbox, search and expand prompts
- Minimum Node.js version is now 20.x (specifically >=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0)
- Replaced yoctocolors with Node.js built-in util.styleText() for terminal colors
- Pin @inquirer/type to exact version in published manifests to prevent downstream TypeScript build failures from semver range changes
- Fix floating-point step errors in @inquirer/number
- Allow @inquirer/number to accept explicit undefined as default
- Allow @inquirer/confirm to accept explicit undefined as default
- Allow @inquirer/editor to accept explicit undefined as default
- Line wraps no longer cause the cursor to be mispositioned relative to the input
- Windows rendering bug
- Preserve exact literal types in choices array (Typescript only)
- Allow input default value to be of type undefined (Typescript only)
- Fix editor prompt not always properly handling editor path on windows
- Keypresses happening before a prompt is rendered are now ignored
- Checkbox elements that are both checked and disabled are now always included in the returned array
- select now infers return type properly when passing a choices array of string literals
- Fix TypeScript not discovering types when moduleResolution is set to commonjs
- CommonJS support; all packages are now ESM-only
- list prompt alias from inquirer package; use select instead
- helpMode theme property; use theme.style.keysHelpTip instead
- instructions config property; use theme.style.keysHelpTip instead
- cancel() method on prompt return promise; use AbortSignal instead
6 releases in the range carry no categorized changes yet: 8.5.28.4.28.4.18.3.28.3.18.2.1. Their original notes, where the vendor published any, are below.
Original release notes, newest first
The list above is our reading of these notes; the originals from Inquirer are here, one fold per release.
8.7.1
@inquirer/prompts@8.7.1
What's new
- All bundled prompts now pin
@inquirer/typeto an exact version in their published manifests. Since these type definitions leak into consumers'tscruns, a semver range on the types-only dependency could break downstream TypeScript builds without any change to Inquirer.js itself (#2247, fixes #2244).
Included
@inquirer/checkbox@^5.2.4@inquirer/confirm@^6.3.1@inquirer/editor@^5.3.2@inquirer/expand@^5.1.4@inquirer/input@^5.1.5@inquirer/number@^4.2.2@inquirer/password@^5.2.1@inquirer/rawlist@^5.3.4@inquirer/search@^4.3.2@inquirer/select@^5.2.4
8.7.0
@inquirer/prompts@8.7.0
What's new
passwordgains thetoggleMaskoption (ctrl+t to reveal the typed value).confirmnow matches localized yes/no answers per-locale.- Prettified prompt and theme types for better IDE display.
- Added
inquirer-grouped-checkboxto the community prompts list (#2236).
Included
@inquirer/checkbox@^5.2.3@inquirer/confirm@^6.3.0@inquirer/editor@^5.3.1@inquirer/expand@^5.1.3@inquirer/input@^5.1.4@inquirer/number@^4.2.1@inquirer/password@^5.2.0@inquirer/rawlist@^5.3.3@inquirer/search@^4.3.1@inquirer/select@^5.2.3
8.6.0
@inquirer/prompts@8.6.0
The all-in-one prompts package, re-exporting every individual prompt at its latest version.
Highlights
This release rides on @inquirer/core@12.0.0, which makes the useState setter accept a reducer/updater function. It also brings a new initialValue option to search, plus fixes for number, confirm, and editor.
What's new
@inquirer/search— newinitialValue?: stringoption to pre-fill the search input (#2205)
What's fixed
@inquirer/number— avoid floating-point step errors; accept explicitundefinedas default (#2166, #2182)@inquirer/confirm— accept explicitundefinedas default (#2182)@inquirer/editor— accept explicitundefinedas default (#2182)
Included prompts
@inquirer/checkbox@5.2.2@inquirer/confirm@6.2.0@inquirer/editor@5.3.0@inquirer/expand@5.1.2@inquirer/input@5.1.3@inquirer/number@4.2.0@inquirer/password@5.1.2@inquirer/rawlist@5.3.2@inquirer/search@4.3.0@inquirer/select@5.2.2
Note: This release depends on
@inquirer/core@^12.0.0, which contains a breaking change to theuseStatesetter type (it now accepts a reducer function). See the@inquirer/core@12.0.0release notes for details.
8.5.2
- Fix security warnings in external-editor
8.5.1
- Rolled back
mute-streamdependency from v4 to v3 to undo breaking compatibleengines. - Added tooling to prevent regression of the above in the future. This surfaced our min engines already enforced a higher limit, so adjusted the explicit limits to match the current state.
8.5.0
- Feat: Read env variable
INQUIRER_KEYBINDINGSto enablevimoremacskeybindings; making this a user preference instead of a library author preference. One caveat is doing so disable the search feature in the select prompt. Syntax:INQUIRER_KEYBINDINGS=vim,emacs. - Fix: Line wraps would sometime cause the cursor to be mispositioned relative to the input.
- Chore: Bump dependencies.
8.4.3
- Fix: Windows rendering bug
- Fix: Preserve exact literal types in
choicesarray (Typescript only) - Fix: Allow input
defaultvalue to be of typeundefined(Typescript only) - Bump dependencies
8.4.2
- Fix: some Windows terminals would freeze and not react to keypresses.
8.4.1
- Improve
expandprompt type inferrence.
8.4.0
- Feat: Added a loading message while validating editor prompt input.
- Type improvement: Better type inference with checkbox, search and expand prompts.
- Fix:
editorprompt not always properly handling editor path on windows.
8.3.2
- Fix broken 8.3.1 release process.
8.3.1
- Bump dependencies
8.3.0
- Fix: Keypresses happening before a prompt is rendered are now ignored.
- Fix (checkbox): Element who're both checked and disabled are now always included in the returned array.
- Feat (select/checkbox): Cursor will now hover disabled options of the list; but they still cannot be interacted with. This prevents the cursor jumping ahead in ways that can be confusing.
- Feat: various new theme options to make all prompts content localizable.
Finally, see our new @inquirer/i18n package!
8.2.1
- chore: Switch
wrap-ansiwithfast-wrap-ansi
8.2.0
- feat(
search): Add support fordefault. - feat(
rawlist): Add support fordescriptionof choices. That information is displayed under the list when the choice is highlighted. - Bump dependencies
8.1.0
- Feat:
rawlistnow supportsdefaultoption. - Fix:
selectnow infer return type properly when passing achoicesarray of string literals.
8.0.2
- Fix Typescript not discovering types when
moduleResolutionis set tocommonjs(you probably want to fix that in your project if it's still in your tsconfig)
8.0.0
Release Notes
🚨 Breaking Changes
This is a major release that modernizes the codebase for Node.js ≥ 20.
ESM Only - No More CommonJS Support
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.
Node.js Version Requirement
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
Deprecated APIs Removed
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/select
instructions 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/select
cancel() method removed
The 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();
Color Library Change: yoctocolors → Node.js styleText
Internal 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.