# Inquirer.js: what changed from 7 to 8 - Product: Inquirer.js (https://whatsnew.fyi/product/inquirer) - Vendor: Inquirer - Range: changelog entries numbered after 7.10.1 up to and including 8.7.1, stable releases only - Entries below: 18 releases (newest first) - Resolved: 7 is 7.10.1 and 8 is 8.7.1, the newest stable release of each major we track - Carrying security changes: 0 · CVEs mentioned: 0 · Mentioning breaking changes: 2 · Removing or deprecating something: 1 - Page: https://whatsnew.fyi/product/inquirer/compare/7...8 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## What changed (37 changes, grouped by kind) ### Added #### 8.7.0 (2026-08-26) - password prompt gains the toggleMask option to reveal typed value with ctrl+t #### 8.6.0 (2026-08-19) - Add initialValue option to @inquirer/search to pre-fill the search input #### 8.5.0 (2026-05-25) - Read env variable INQUIRER_KEYBINDINGS to enable vim or emacs keybindings as a user preference #### 8.4.0 (2026-04-06) - Add a loading message while validating editor prompt input #### 8.3.0 (2026-02-22) - 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 #### 8.2.0 (2026-01-11) - 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 #### 8.1.0 (2025-12-13) - rawlist now supports default option ### Changed #### 8.7.0 (2026-08-26) - confirm prompt now matches localized yes/no answers per-locale - Prettified prompt and theme types for better IDE display #### 8.6.0 (2026-08-19) - Update @inquirer/core to 12.0.0, which makes the useState setter accept a reducer/updater function #### 8.5.1 (2026-05-29) - 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 #### 8.5.0 (2026-05-25) - Search feature in the select prompt is disabled when using vim or emacs keybindings #### 8.4.0 (2026-04-06) - Improve type inference with checkbox, search and expand prompts #### 8.0.0 (2025-11-16) - 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 ### Fixed #### 8.7.1 (2026-09-02) - Pin @inquirer/type to exact version in published manifests to prevent downstream TypeScript build failures from semver range changes #### 8.6.0 (2026-08-19) - 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 #### 8.5.0 (2026-05-25) - Line wraps no longer cause the cursor to be mispositioned relative to the input #### 8.4.3 (2026-05-10) - Windows rendering bug - Preserve exact literal types in choices array (Typescript only) - Allow input default value to be of type undefined (Typescript only) #### 8.4.0 (2026-04-06) - Fix editor prompt not always properly handling editor path on windows #### 8.3.0 (2026-02-22) - 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 #### 8.1.0 (2025-12-13) - select now infers return type properly when passing a choices array of string literals #### 8.0.2 (2025-12-02) - Fix TypeScript not discovering types when moduleResolution is set to commonjs ### Removed #### 8.0.0 (2025-11-16) - 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 carry no categorized changes yet: 8.5.2, 8.4.2, 8.4.1, 8.3.2, 8.3.1, 8.2.1._ ## Release notes ### 8.7.1 - Date: 2026-09-02 - Version: 8.7.1 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.7.1 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.7.1 - **fixed** — Pin @inquirer/type to exact version in published manifests to prevent downstream TypeScript build failures from semver range changes ##### @inquirer/prompts@8.7.1 ###### What's new - All bundled prompts now pin `@inquirer/type` to an exact version in their published manifests. Since these type definitions leak into consumers' `tsc` runs, a semver range on the types-only dependency could break downstream TypeScript builds without any change to Inquirer.js itself ([#2247](https://github.com/SBoudrias/Inquirer.js/pull/2247), fixes [#2244](https://github.com/SBoudrias/Inquirer.js/issues/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 - Date: 2026-08-26 - Version: 8.7.0 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.7.0 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.7.0 - **added** — password prompt gains the toggleMask option to reveal typed value with ctrl+t - **changed** — confirm prompt now matches localized yes/no answers per-locale - **changed** — Prettified prompt and theme types for better IDE display ##### @inquirer/prompts@8.7.0 ###### What's new - `password` gains the `toggleMask` option (ctrl+t to reveal the typed value). - `confirm` now matches localized yes/no answers per-locale. - Prettified prompt and theme types for better IDE display. - Added `inquirer-grouped-checkbox` to the community prompts list ([#2236](https://github.com/SBoudrias/Inquirer.js/pull/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 - Date: 2026-08-19 - Version: 8.6.0 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.6.0 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.6.0 - **added** — Add initialValue option to @inquirer/search to pre-fill the search input - **changed** — Update @inquirer/core to 12.0.0, which makes the useState setter accept a reducer/updater function - **fixed** — Fix floating-point step errors in @inquirer/number - **fixed** — Allow @inquirer/number to accept explicit undefined as default - **fixed** — Allow @inquirer/confirm to accept explicit undefined as default - **fixed** — Allow @inquirer/editor to accept explicit undefined as default ##### @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`** — new `initialValue?: string` option to pre-fill the search input ([#2205](https://github.com/SBoudrias/Inquirer.js/pull/2205)) ###### What's fixed - **`@inquirer/number`** — avoid floating-point step errors; accept explicit `undefined` as default ([#2166](https://github.com/SBoudrias/Inquirer.js/pull/2166), [#2182](https://github.com/SBoudrias/Inquirer.js/pull/2182)) - **`@inquirer/confirm`** — accept explicit `undefined` as default ([#2182](https://github.com/SBoudrias/Inquirer.js/pull/2182)) - **`@inquirer/editor`** — accept explicit `undefined` as default ([#2182](https://github.com/SBoudrias/Inquirer.js/pull/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 the `useState` setter type (it now accepts a reducer function). See the `@inquirer/core@12.0.0` release notes for details. ### 8.5.2 - Date: 2026-05-31 - Version: 8.5.2 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.5.2 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.5.2 - Fix security warnings in external-editor ### 8.5.1 - Date: 2026-05-29 - Version: 8.5.1 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.5.1 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.5.1 - **changed** — Rolled back mute-stream dependency from v4 to v3 to restore compatibility with supported Node.js versions - **changed** — Updated explicit engines field to match the minimum Node.js version already enforced by the tooling - Rolled back `mute-stream` dependency from v4 to v3 to undo breaking compatible `engines`. - 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 - Date: 2026-05-25 - Version: 8.5.0 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.5.0 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.5.0 - **added** — Read env variable INQUIRER_KEYBINDINGS to enable vim or emacs keybindings as a user preference - **changed** — Search feature in the select prompt is disabled when using vim or emacs keybindings - **fixed** — Line wraps no longer cause the cursor to be mispositioned relative to the input - Feat: Read env variable `INQUIRER_KEYBINDINGS` to enable `vim` or `emacs` keybindings; 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 - Date: 2026-05-10 - Version: 8.4.3 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.4.3 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.4.3 - **fixed** — Windows rendering bug - **fixed** — Preserve exact literal types in choices array (Typescript only) - **fixed** — Allow input default value to be of type undefined (Typescript only) * Fix: Windows rendering bug * Fix: Preserve exact literal types in `choices` array (Typescript only) * Fix: Allow input `default` value to be of type `undefined` (Typescript only) * Bump dependencies ### 8.4.2 - Date: 2026-04-19 - Version: 8.4.2 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.4.2 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.4.2 - Fix: some Windows terminals would freeze and not react to keypresses. ### 8.4.1 - Date: 2026-04-07 - Version: 8.4.1 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.4.1 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.4.1 * Improve `expand` prompt type inferrence. ### 8.4.0 - Date: 2026-04-06 - Version: 8.4.0 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.4.0 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.4.0 - **added** — Add a loading message while validating editor prompt input - **changed** — Improve type inference with checkbox, search and expand prompts - **fixed** — Fix editor prompt not always properly handling editor path on windows - Feat: Added a loading message while validating editor prompt input. - Type improvement: Better type inference with checkbox, search and expand prompts. - Fix: `editor` prompt not always properly handling editor path on windows. ### 8.3.2 - Date: 2026-03-15 - Version: 8.3.2 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.3.2 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.3.2 - Fix broken 8.3.1 release process. ### 8.3.1 - Date: 2026-03-15 - Version: 8.3.1 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.3.1 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.3.1 - Bump dependencies ### 8.3.0 - Date: 2026-02-22 - Version: 8.3.0 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.3.0 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.3.0 - **fixed** — Keypresses happening before a prompt is rendered are now ignored - **fixed** — Checkbox elements that are both checked and disabled are now always included in the returned array - **added** — Cursor will now hover disabled options of the list while still preventing interaction with them - **added** — Various new theme options to make all prompts content localizable - 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](https://github.com/SBoudrias/Inquirer.js/tree/main/packages/i18n)! ### 8.2.1 - Date: 2026-02-14 - Version: 8.2.1 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.2.1 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.2.1 - chore: Switch `wrap-ansi` with `fast-wrap-ansi` ### 8.2.0 - Date: 2026-01-11 - Version: 8.2.0 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.2.0 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.2.0 - **added** — Add support for `default` in search prompts - **added** — Add support for `description` of choices in rawlist prompts, displayed under the list when the choice is highlighted - feat(`search`): Add support for `default`. - feat(`rawlist`): Add support for `description` of choices. That information is displayed under the list when the choice is highlighted. - Bump dependencies ### 8.1.0 - Date: 2025-12-13 - Version: 8.1.0 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.1.0 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.1.0 - **added** — rawlist now supports default option - **fixed** — select now infers return type properly when passing a choices array of string literals * Feat: `rawlist` now supports `default` option. * Fix: `select` now infer return type properly when passing a `choices` array of string literals. ### 8.0.2 - Date: 2025-12-02 - Version: 8.0.2 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.0.2 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.0.2 - **fixed** — Fix TypeScript not discovering types when moduleResolution is set to commonjs * Fix Typescript not discovering types when `moduleResolution` is set to `commonjs` (you probably want to fix that in your project if it's still in your tsconfig) ### 8.0.0 - Date: 2025-11-16 - Version: 8.0.0 - Original notes: https://github.com/SBoudrias/Inquirer.js/releases/tag/%40inquirer/prompts%408.0.0 - Permalink: https://whatsnew.fyi/product/inquirer/releases/8.0.0 - **removed** — CommonJS support; all packages are now ESM-only - **changed** — Minimum Node.js version is now 20.x (specifically >=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0) - **removed** — list prompt alias from inquirer package; use select instead - **removed** — helpMode theme property; use theme.style.keysHelpTip instead - **removed** — instructions config property; use theme.style.keysHelpTip instead - **removed** — cancel() method on prompt return promise; use AbortSignal instead - **changed** — Replaced yoctocolors with Node.js built-in util.styleText() for terminal colors #### 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. ```js // ❌ 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 ```js // ❌ 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 ```js // ❌ 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. ```js // ❌ 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.