[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-3707":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":16,"starSnapshotCount":16,"syncStatus":37,"lastSyncTime":38,"discoverSource":39},3707,"Inquirer.js","SBoudrias\u002FInquirer.js","SBoudrias","A collection of common interactive command line user interfaces.","",null,"TypeScript",21571,1357,145,9,0,1,4,46,3,44.4,"MIT License",false,"main",[26,27,28,29,30,31,32,33],"cli","command-line","javascript","javascript-library","node-js","nodejs","prompt","typescript","2026-06-12 02:00:53","\u003Cimg width=\"75px\" height=\"75px\" align=\"right\" alt=\"Inquirer Logo\" src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FSBoudrias\u002FInquirer.js\u002Fmain\u002Fassets\u002Finquirer_readme.svg?sanitize=true\" title=\"Inquirer.js\"\u002F>\n\n# Inquirer\n\n[![npm](https:\u002F\u002Fbadge.fury.io\u002Fjs\u002F@inquirer%2Fprompts.svg)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@inquirer\u002Fprompts)\n[![FOSSA Status](https:\u002F\u002Fapp.fossa.com\u002Fapi\u002Fprojects\u002Fgit%2Bgithub.com%2FSBoudrias%2FInquirer.js.svg?type=shield)](https:\u002F\u002Fapp.fossa.com\u002Fprojects\u002Fgit%2Bgithub.com%2FSBoudrias%2FInquirer.js?ref=badge_shield)\n\nA collection of common interactive command line user interfaces.\n\n![List prompt](https:\u002F\u002Fcdn.rawgit.com\u002FSBoudrias\u002FInquirer.js\u002F28ae8337ba51d93e359ef4f7ee24e79b69898962\u002Fassets\u002Fscreenshots\u002Flist.svg)\n\nGive it a try in your own terminal!\n\n```sh\nnpx @inquirer\u002Fdemo@latest\n```\n\n# Installation\n\n\u003Ctable>\n\u003Ctr>\n  \u003Cth>npm\u003C\u002Fth>\n  \u003Cth>yarn\u003C\u002Fth>\n  \u003Cth>pnpm\u003C\u002Fth>\n  \u003Cth>bun\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\n\n```sh\nnpm install @inquirer\u002Fprompts\n```\n\n\u003C\u002Ftd>\n\u003Ctd>\n\n```sh\nyarn add @inquirer\u002Fprompts\n```\n\n\u003C\u002Ftd>\n\u003Ctd>\n\n```sh\npnpm add @inquirer\u002Fprompts\n```\n\n\u003C\u002Ftd>\n\u003Ctd>\n\n```sh\nbun add @inquirer\u002Fprompts\n```\n\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n> [!NOTE]\n> Inquirer recently underwent a rewrite from the ground up to reduce the package size and improve performance. The previous version of the package is still maintained (though not actively developed), and offered hundreds of community contributed prompts that might not have been migrated to the latest API. If this is what you're looking for, the [previous package is over here](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Finquirer).\n\n# Usage\n\n```js\nimport { input } from '@inquirer\u002Fprompts';\n\nconst answer = await input({ message: 'Enter your name' });\n```\n\n# Prompts\n\n## [Input](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Finput)\n\n![Input prompt](https:\u002F\u002Fcdn.rawgit.com\u002FSBoudrias\u002FInquirer.js\u002F28ae8337ba51d93e359ef4f7ee24e79b69898962\u002Fassets\u002Fscreenshots\u002Finput.svg)\n\n```js\nimport { input } from '@inquirer\u002Fprompts';\n```\n\n[See documentation](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Finput) for usage example and options documentation.\n\n## [Select](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fselect)\n\n![Select prompt](https:\u002F\u002Fcdn.rawgit.com\u002FSBoudrias\u002FInquirer.js\u002F28ae8337ba51d93e359ef4f7ee24e79b69898962\u002Fassets\u002Fscreenshots\u002Flist.svg)\n\n```js\nimport { select } from '@inquirer\u002Fprompts';\n```\n\n[See documentation](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fselect) for usage example and options documentation.\n\n## [Checkbox](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fcheckbox)\n\n![Checkbox prompt](https:\u002F\u002Fcdn.rawgit.com\u002FSBoudrias\u002FInquirer.js\u002F28ae8337ba51d93e359ef4f7ee24e79b69898962\u002Fassets\u002Fscreenshots\u002Fcheckbox.svg)\n\n```js\nimport { checkbox } from '@inquirer\u002Fprompts';\n```\n\n[See documentation](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fcheckbox) for usage example and options documentation.\n\n## [Confirm](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fconfirm)\n\n![Confirm prompt](https:\u002F\u002Fcdn.rawgit.com\u002FSBoudrias\u002FInquirer.js\u002F28ae8337ba51d93e359ef4f7ee24e79b69898962\u002Fassets\u002Fscreenshots\u002Fconfirm.svg)\n\n```js\nimport { confirm } from '@inquirer\u002Fprompts';\n```\n\n[See documentation](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fconfirm) for usage example and options documentation.\n\n## [Search](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fsearch)\n\n![search prompt](https:\u002F\u002Fraw.githubusercontent.com\u002FSBoudrias\u002FInquirer.js\u002Ff459199e679aec7676cecc0fc12ef8a4cd3dda0b\u002Fassets\u002Fscreenshots\u002Fsearch.png)\n\n```js\nimport { search } from '@inquirer\u002Fprompts';\n```\n\n[See documentation](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fsearch) for usage example and options documentation.\n\n## [Password](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fpassword)\n\n![Password prompt](https:\u002F\u002Fcdn.rawgit.com\u002FSBoudrias\u002FInquirer.js\u002F28ae8337ba51d93e359ef4f7ee24e79b69898962\u002Fassets\u002Fscreenshots\u002Fpassword.svg)\n\n```js\nimport { password } from '@inquirer\u002Fprompts';\n```\n\n[See documentation](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fpassword) for usage example and options documentation.\n\n## [Expand](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fexpand)\n\n![Expand prompt closed](https:\u002F\u002Fcdn.rawgit.com\u002FSBoudrias\u002FInquirer.js\u002F28ae8337ba51d93e359ef4f7ee24e79b69898962\u002Fassets\u002Fscreenshots\u002Fexpand-y.svg)\n![Expand prompt expanded](https:\u002F\u002Fcdn.rawgit.com\u002FSBoudrias\u002FInquirer.js\u002F28ae8337ba51d93e359ef4f7ee24e79b69898962\u002Fassets\u002Fscreenshots\u002Fexpand-d.svg)\n\n```js\nimport { expand } from '@inquirer\u002Fprompts';\n```\n\n[See documentation](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fexpand) for usage example and options documentation.\n\n## [Editor](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Feditor)\n\nLaunches an instance of the users preferred editor on a temporary file. Once the user exits their editor, the content of the temporary file is read as the answer. The editor used is determined by reading the $VISUAL or $EDITOR environment variables. If neither of those are present, the OS default is used (notepad on Windows, vim on Mac or Linux.)\n\n```js\nimport { editor } from '@inquirer\u002Fprompts';\n```\n\n[See documentation](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Feditor) for usage example and options documentation.\n\n## [Number](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fnumber)\n\nVery similar to the `input` prompt, but with built-in number validation configuration option.\n\n```js\nimport { number } from '@inquirer\u002Fprompts';\n```\n\n[See documentation](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fnumber) for usage example and options documentation.\n\n## [Raw List](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Frawlist)\n\n![Raw list prompt](https:\u002F\u002Fcdn.rawgit.com\u002FSBoudrias\u002FInquirer.js\u002F28ae8337ba51d93e359ef4f7ee24e79b69898962\u002Fassets\u002Fscreenshots\u002Frawlist.svg)\n\n```js\nimport { rawlist } from '@inquirer\u002Fprompts';\n```\n\n[See documentation](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Frawlist) for usage example and options documentation.\n\n# Internationalization (i18n)\n\nNeed prompts in a language other than English? The [`@inquirer\u002Fi18n`](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fi18n) package is a drop-in replacement for `@inquirer\u002Fprompts` with built-in localization.\n\nThe root import automatically detects your locale from the `LANGUAGE`, `LC_ALL`, `LC_MESSAGES`, and `LANG` environment variables (falling back to the `Intl` API). If no supported locale is found, English is used.\n\n```js\n\u002F\u002F Drop-in replacement — locale is auto-detected from environment variables\nimport { input, select, confirm } from '@inquirer\u002Fi18n';\n```\n\nBuilt-in locales include English, French, Spanish, Chinese (Simplified), and Portuguese. You can also pin to a specific language via sub-path imports (e.g. `@inquirer\u002Fi18n\u002Ffr`), or use the `createLocalizedPrompts` and `registerLocale` APIs to add your own.\n\n[See the full documentation](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fi18n) for available languages and how to create a custom locale.\n\n# Create your own prompts\n\nThe [API documentation is over here](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Fcore), and our [testing utilities here](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Ftree\u002Fmain\u002Fpackages\u002Ftesting).\n\n# Advanced usage\n\nAll inquirer prompts are a function taking 2 arguments. The first argument is the prompt configuration (unique to each prompt). The second is providing contextual or runtime configuration.\n\nThe context options are:\n\n| Property          | Type                    | Required | Description                                                  |\n| ----------------- | ----------------------- | -------- | ------------------------------------------------------------ |\n| input             | `NodeJS.ReadableStream` | no       | The stdin stream (defaults to `process.stdin`)               |\n| output            | `NodeJS.WritableStream` | no       | The stdout stream (defaults to `process.stdout`)             |\n| clearPromptOnDone | `boolean`               | no       | If true, we'll clear the screen after the prompt is answered |\n| signal            | `AbortSignal`           | no       | An AbortSignal to cancel prompts asynchronously              |\n\n> [!WARNING]\n> When providing an input stream or piping `process.stdin`, it's very likely you need to call `process.stdin.setRawMode(true)`\n> before calling inquirer functions. Node.js usually does it automatically, but when we shadow the stdin, Node can loss track\n> and not know it has to. If the prompt isn't interactive (arrows don't work, etc), it's likely due to this.\n\nExample:\n\n```js\nimport { confirm } from '@inquirer\u002Fprompts';\n\nconst allowEmail = await confirm(\n  { message: 'Do you allow us to send you email?' },\n  {\n    output: new Stream.Writable({\n      write(chunk, _encoding, next) {\n        \u002F\u002F Do something\n        next();\n      },\n    }),\n    clearPromptOnDone: true,\n  },\n);\n```\n\n## Canceling prompt\n\nThis can be done with either an `AbortController` or `AbortSignal`.\n\n```js\n\u002F\u002F Example 1: using built-in AbortSignal utilities\nimport { confirm } from '@inquirer\u002Fprompts';\n\nconst answer = await confirm({ ... }, { signal: AbortSignal.timeout(5000) });\n```\n\n```js\n\u002F\u002F Example 2: implementing custom cancellation with an AbortController\nimport { confirm } from '@inquirer\u002Fprompts';\n\nconst controller = new AbortController();\nsetTimeout(() => {\n  controller.abort(); \u002F\u002F This will reject the promise\n}, 5000);\n\nconst answer = await confirm({ ... }, { signal: controller.signal });\n```\n\n# Recipes\n\n## Handling `ctrl+c` gracefully\n\nWhen a user press `ctrl+c` to exit a prompt, Inquirer rejects the prompt promise. This is the expected behavior in order to allow your program to teardown\u002Fcleanup its environment. When using `async\u002Fawait`, rejected promises throw their error. When unhandled, those errors print their stack trace in your user's terminal.\n\n```\nExitPromptError: User force closed the prompt with 0 null\n  at file:\u002F\u002Fexample\u002Fpackages\u002Fcore\u002Fdist\u002Fesm\u002Flib\u002Fcreate-prompt.js:55:20\n  at Emitter.emit (file:\u002F\u002Fexample\u002Fnode_modules\u002Fsignal-exit\u002Fdist\u002Fmjs\u002Findex.js:67:19)\n  at #processEmit (file:\u002F\u002Fexample\u002Fnode_modules\u002Fsignal-exit\u002Fdist\u002Fmjs\u002Findex.js:236:27)\n  at #process.emit (file:\u002F\u002Fexample\u002Fnode_modules\u002Fsignal-exit\u002Fdist\u002Fmjs\u002Findex.js:187:37)\n  at process.callbackTrampoline (node:internal\u002Fasync_hooks:130:17)\n```\n\nThis isn't a great UX, which is why we highly recommend you to handle those errors gracefully.\n\nFirst option is to wrap your scripts in `try\u002Fcatch`; like [we do in our demo program](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Fblob\u002F649e78147cbb6390a162ff842d4b21d53a233472\u002Fpackages\u002Fdemo\u002Fsrc\u002Findex.ts#L89-L95). Or handle the error in your CLI framework mechanism; for example [`Clipanion catch` method](https:\u002F\u002Fmael.dev\u002Fclipanion\u002Fdocs\u002Ferrors#custom-error-handling).\n\nLastly, you could handle the error globally with an event listener and silence it.\n\n```ts\nprocess.on('uncaughtException', (error) => {\n  if (error instanceof Error && error.name === 'ExitPromptError') {\n    console.log('👋 until next time!');\n  } else {\n    \u002F\u002F Rethrow unknown errors\n    throw error;\n  }\n});\n```\n\n## Get answers in an object\n\nWhen asking many questions, you might not want to keep one variable per answer everywhere. In which case, you can put the answer inside an object.\n\n```js\nimport { input, confirm } from '@inquirer\u002Fprompts';\n\nconst answers = {\n  firstName: await input({ message: \"What's your first name?\" }),\n  allowEmail: await confirm({ message: 'Do you allow us to send you email?' }),\n};\n\nconsole.log(answers.firstName);\n```\n\n## Ask a question conditionally\n\nMaybe some questions depend on some other question's answer.\n\n```js\nimport { input, confirm } from '@inquirer\u002Fprompts';\n\nconst allowEmail = await confirm({ message: 'Do you allow us to send you email?' });\n\nlet email;\nif (allowEmail) {\n  email = await input({ message: 'What is your email address' });\n}\n```\n\n## Get default value after timeout\n\n```js\nimport { input } from '@inquirer\u002Fprompts';\n\nconst answer = await input(\n  { message: 'Enter a value (timing out in 5 seconds)' },\n  { signal: AbortSignal.timeout(5000) },\n).catch((error) => {\n  if (error.name === 'AbortPromptError') {\n    return 'Default value';\n  }\n\n  throw error;\n});\n```\n\n## Using as pre-commit\u002Fgit hooks, or scripts\n\nBy default scripts ran from tools like `husky`\u002F`lint-staged` might not run inside an interactive shell. In non-interactive shell, Inquirer cannot run, and users cannot send keypress events to the process.\n\nFor it to work, you must make sure you start a `tty` (or \"interactive\" input stream.)\n\nIf those scripts are set within your `package.json`, you can define the stream like so:\n\n```json\n  \"precommit\": \"my-script \u003C \u002Fdev\u002Ftty\"\n```\n\nOr if in a shell script file, you'll do it like so: (on Windows that's likely your only option)\n\n```sh\n#!\u002Fbin\u002Fsh\nexec \u003C \u002Fdev\u002Ftty\n\nnode my-script.js\n```\n\n## Using with nodemon\n\nWhen using inquirer prompts with nodemon, you need to pass the `--no-stdin` flag for everything to work as expected.\n\n```sh\nnpx nodemon .\u002Fpackages\u002Fdemo\u002Fdemos\u002Fpassword.mjs --no-stdin\n```\n\nNote that for most of you, you'll be able to use the new watch-mode built-in Node. This mode works out of the box with inquirer.\n\n```sh\n# One of depending on your need\nnode --watch script.js\nnode --watch-path=packages\u002F packages\u002Fdemo\u002F\n```\n\n## Wait for config\n\nMaybe some question configuration require to await a value.\n\n```js\nimport { confirm } from '@inquirer\u002Fprompts';\n\nconst answer = await confirm({ message: await getMessage() });\n```\n\n## Usage with `npx` within bash scripts\n\nYou can use Inquirer prompts directly in the shell via [`npx`](https:\u002F\u002Fdocs.npmjs.com\u002Fcli\u002Fv8\u002Fcommands\u002Fnpx), which is useful for quick scripts or `package.json` commands.\n\nA community library, [@inquirer-cli](https:\u002F\u002Fgithub.com\u002Ffishballapp\u002Finquirer-cli), exposes each prompt as a standalone CLI.\n\nFor example, to prompt for input:\n\n```bash\nname=$(npx -y @inquirer-cli\u002Finput -r \"What is your name?\")\necho \"Hello, $name!\"\n```\n\nOr to create an interactive version bump:\n\n```bash\n$ npm version $(npx -y @inquirer-cli\u002Fselect -c patch -c minor -c major 'Select Version')\n```\n\nFind out more: [@inquirer-cli](https:\u002F\u002Fgithub.com\u002Ffishballapp\u002Finquirer-cli).\n\n# Community prompts\n\nIf you created a cool prompt, [send us a PR adding it](https:\u002F\u002Fgithub.com\u002FSBoudrias\u002FInquirer.js\u002Fedit\u002Fmain\u002Fpackages\u002Fprompts\u002FREADME.md) to the list below!\n\n[**Interactive List Prompt**](https:\u002F\u002Fgithub.com\u002Fpgibler\u002Finquirer-interactive-list-prompt)\u003Cbr\u002F>\nSelect a choice either with arrow keys + Enter or by pressing a key associated with a choice.\n\n```\n? Choose an option:\n>   Run command (D)\n    Quit (Q)\n```\n\n[**Action Select Prompt**](https:\u002F\u002Fgithub.com\u002Fzenithlight\u002Finquirer-action-select)\u003Cbr\u002F>\nChoose an item from a list and choose an action to take by pressing a key.\n\n```\n? Choose a file Open \u003CO> Edit \u003CE> Delete \u003CX>\n❯ image.png\n  audio.mp3\n  code.py\n```\n\n[**Table Multiple Prompt**](https:\u002F\u002Fgithub.com\u002FBartheleway\u002Finquirer-table-multiple)\u003Cbr\u002F>\nSelect multiple answer from a table display.\n\n```sh\nChoose between choices? (Press \u003Cspace> to select, \u003CUp and Down> to move rows,\n\u003CLeft and Right> to move columns)\n\n┌──────────┬───────┬───────┐\n│ 1-2 of 2 │ Yes?  │ No?   |\n├──────────┼───────┼───────┤\n│ Choice 1 │ [ ◯ ] │   ◯   |\n├──────────┼───────┼───────┤\n│ Choice 2 │   ◯   │   ◯   |\n└──────────┴───────┴───────┘\n\n```\n\n[**Toggle Prompt**](https:\u002F\u002Fgithub.com\u002Fskarahoda\u002Finquirer-toggle)\u003Cbr\u002F>\nConfirm with a toggle. Select a choice with arrow keys + Enter.\n\n```\n? Do you want to continue? no \u002F yes\n```\n\n[**Sortable Checkbox Prompt**](https:\u002F\u002Fgithub.com\u002Fth0r\u002Finquirer-sortable-checkbox)\u003Cbr\u002F>\nThe same as built-in checkbox prompt, but also allowing to reorder choices using ctrl+up\u002Fdown.\n\n```\n? Which PRs and in what order would you like to merge? (Press \u003Cspace> to select, \u003Ca> to toggle all, \u003Ci> to invert selection, \u003Cctrl+up> to move item up, \u003Cctrl+down> to move item down, and \u003Center> to proceed)\n❯ ◯ PR 1\n  ◯ PR 2\n  ◯ PR 3\n```\n\n[**Multi Select Prompt**](https:\u002F\u002Fgithub.com\u002Fjeffwcx\u002Finquirer-select-pro)\n\nAn inquirer select that supports multiple selections and filtering\u002Fsearching.\n\n```\n? Choose your OS, IDE, PL, etc. (Press \u003Ctab> to select\u002Fdeselect, \u003Cbackspace> to remove selected\noption, \u003Center> to select option)\n>>  vue\n>[ ] vue\n [ ] vuejs\n [ ] fuelphp\n [ ] venv\n [ ] vercel\n (Use arrow keys to reveal more options)\n```\n\n[**File Selector Prompt**](https:\u002F\u002Fgithub.com\u002Fbr14n-sol\u002Finquirer-file-selector)\u003Cbr\u002F>\nA file selector, you can navigate freely between directories, choose what type of files you want to allow and it is fully customizable.\n\n```sh\n? Select a file:\n\u002Fmain\u002Fpath\u002F\n├── folder1\u002F\n├── folder2\u002F\n├── folder3\u002F\n├── file1.txt\n├── file2.pdf\n└── file3.jpg (not allowed)\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nUse ↑↓ to navigate through the list\nPress \u003Cesc> to navigate to the parent directory\nPress \u003Center> to select a file or navigate to a directory\n```\n\n[**Select Prompt with Stateful Banner**](https:\u002F\u002Fgithub.com\u002Fpatik\u002Finquirer-select-with-state)\u003Cbr\u002F>\nThe same as built-in select prompt, but it also displays a banner above the prompt which can be updated with a `setState` function. For example, it can display the results of a long-running command without making the user wait to see the prompt.\n\nInitial display:\n\n```\nDirectory size: loading...\n? Choose an option\n❯ Rename\n  Copy\n  Delete\n```\n\nA moment later:\n\n```\nDirectory size: 123M\n? Choose an option\n❯ Rename\n  Copy\n  Delete\n```\n\n[**Ordered Checkbox Prompt**](https:\u002F\u002Fgithub.com\u002Fkyou-izumi\u002Finquirer-ordered-checkbox)\u003Cbr\u002F>\nA sortable checkbox prompt that maintains the order of selection. Perfect for prioritizing tasks or ranking options.\n\n```\n? Configure your development workflow:\n  [1] Set up CI\u002FCD pipeline\n❯ [3] Code quality tools\n  [ ] Documentation\n  [2] Performance monitoring\n ──────────────\n- Legacy system (disabled)\n(Linting, formatting, and analysis)\n```\n\n[**Checkbox Plus Plus Prompt**](https:\u002F\u002Fgithub.com\u002Fbehnamazimi\u002Finquirer-checkbox-plus-plus)\u003Cbr\u002F>\nA modern multiselect checkbox prompt with search and filter capabilities, highlighting, autocomplete, and improved UX. Supports both ESM and CommonJS and is compatible with @inquirer\u002Fcore v10+.\n\n```\n? Select colors [searching: \"re\"]\n❯ ◉ The red color\n  ◯ The green color\n  ◉ The purple color\n  ◯ The orange color\n\n↑↓ navigate • space de\u002Fselect • type search • 2 selected  • ⏎ submit\n```\n\n# License\n\nCopyright (c) 2023 Simon Boudrias (twitter: [@vaxilart](https:\u002F\u002Ftwitter.com\u002FVaxilart))\u003Cbr\u002F>\nLicensed under the MIT license.\n","Inquirer.js 是一个用于创建交互式命令行用户界面的库。它支持多种类型的提示，如输入、选择、复选框和确认等，能够帮助开发者轻松构建友好的CLI应用。项目采用TypeScript编写，保证了代码的质量与类型安全，并且经过重写以减小包体积并提升性能。适用于需要通过命令行与用户进行交互的各种场景，例如配置工具、脚本自动化或是任何希望提高用户体验的Node.js应用程序中。",2,"2026-06-11 02:55:42","top_language"]