Nefariously Programmed Mecha
    Wondering what’s next for npm?Check out our public roadmap! »

    TypeScript icon, indicating that this package has built-in type declarations

    1.0.0 • Public • Published


    CircleCI semantic-release Commitizen friendly npm version

    A CLI prompt that allows the user to select from a list of choices, where the choices are fetched asynchronously (e.g. from a request to a remote server). The user can type filter text and new choices matching that filter text will be fetched.

    Based upon prompts; this basically a stripped-down fork of that repo.

    Usage Example

    npm i --save async-autocomplete-cli
    const { asyncAutocomplete } = require('async-autocomplete-cli')
    async function go() {
      const instance = await asyncAutocomplete({
        message: 'Select an AWS EC2 Instance',
        suggest: async (input, cancelationToken, yield) => {
          const results = []
          if (!input) {
            // getRecentSelectedInstances not implemented in this example.
            results.push(...(await getRecentSelectedInstances()))
          const Filters = []
          if (input)
              Name: 'tag:Name',
              Values: [`*${input}*`],
          const args = { MaxResults: 100 }
          if (Filters.length) args.Filters = Filters
          const request = ec2.describeInstances(args)
          cancelationToken.on('canceled', () => request.abort())
          if (cancelationToken.canceled) return []
          const { Reservations } = await request.promise()
          for (const { Instances } of Reservations || []) {
            for (const Instance of Instances || []) {
              const { InstanceId, Tags = [] } = Instance
              const name = (Tags.find(t => t.Key === 'Name') || {}).Value
                title: `${InstanceId} ${name || ''}`,
                value: Instance,
                initial: !results.length,
          if (!results.length) {
              title: `No matching EC2 Instances found${
                input ? ` with name starting with ${input}` : ''
          return results



    The suggest function will be called with:

    • The user input (a string, may be empty)
    • A cancelationToken. This is an EventEmitter that will event 'canceled' when the user input has changed. It also has a canceled property that is initially false and becomes true when the user input has changed. You must handle the 'canceled' event if you want choices for the latest user input to load ASAP.
    • A yield function you can call with an array of choices objects [{ title, value }, ...]. You can also return the final choices, but calling this function allows you to change the choices even if the user input remains the same. For example, you might want to save what the user has recently selected to a local file, and show the recent selections immediately while waiting to load other choices from the server.


    Param Type Description
    message string Prompt message to display
    suggest function Function to fetch choices
    limit number Max number of results to show. Defaults to 10
    style string Render style (default, password, invisible, emoji). Defaults to 'default'
    clearFirst boolean The first ESCAPE keypress will clear the input


    npm i async-autocomplete-cli

    DownloadsWeekly Downloads






    Unpacked Size

    27.5 kB

    Total Files


    Last publish


    • avatar