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.

37 changes across 18 releases

Added 9

8.7.0

  • password prompt gains the toggleMask option to reveal typed value with ctrl+t

8.6.0

  • Add initialValue option to @inquirer/search to pre-fill the search input

8.5.0

  • Read env variable INQUIRER_KEYBINDINGS to enable vim or emacs keybindings as a user preference

8.4.0

  • Add a loading message while validating editor prompt input

8.3.0

  • 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

  • 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

  • rawlist now supports default option
Changed 9

8.7.0

  • confirm prompt now matches localized yes/no answers per-locale
  • Prettified prompt and theme types for better IDE display

8.6.0

  • Update @inquirer/core to 12.0.0, which makes the useState setter accept a reducer/updater function

8.5.1

  • 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

  • Search feature in the select prompt is disabled when using vim or emacs keybindings

8.4.0

  • Improve type inference with checkbox, search and expand prompts

8.0.0

  • 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 14

8.7.1

  • Pin @inquirer/type to exact version in published manifests to prevent downstream TypeScript build failures from semver range changes

8.6.0

  • 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

  • Line wraps no longer cause the cursor to be mispositioned relative to the input

8.4.3

  • 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

  • Fix editor prompt not always properly handling editor path on windows

8.3.0

  • 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

  • select now infers return type properly when passing a choices array of string literals

8.0.2

  • Fix TypeScript not discovering types when moduleResolution is set to commonjs
Removed 5

8.0.0

  • 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/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, 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

View originalPermalink

8.7.0
@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).
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

View originalPermalink

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 — new initialValue?: string option to pre-fill the search input (#2205)
What's fixed
  • @inquirer/number — avoid floating-point step errors; accept explicit undefined as default (#2166, #2182)
  • @inquirer/confirm — accept explicit undefined as default (#2182)
  • @inquirer/editor — accept explicit undefined as 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 the useState setter type (it now accepts a reducer function). See the @inquirer/core@12.0.0 release notes for details.

View originalPermalink

8.5.2
  • Fix security warnings in external-editor

View originalPermalink

8.5.1
  • 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.

View originalPermalink

8.5.0
  • 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.

View originalPermalink

8.4.3
  • 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

View originalPermalink

8.4.2
  • Fix: some Windows terminals would freeze and not react to keypresses.

View originalPermalink

8.4.1
  • Improve expand prompt type inferrence.

View originalPermalink

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: editor prompt not always properly handling editor path on windows.

View originalPermalink

8.3.2
  • Fix broken 8.3.1 release process.

View originalPermalink

8.3.1
  • Bump dependencies

View originalPermalink

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!

View originalPermalink

8.2.1
  • chore: Switch wrap-ansi with fast-wrap-ansi

View originalPermalink

8.2.0
  • 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

View originalPermalink

8.1.0
  • Feat: rawlist now supports default option.
  • Fix: select now infer return type properly when passing a choices array of string literals.

View originalPermalink

8.0.2
  • 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)

View originalPermalink

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.

View originalPermalink