CLI email prompt with autocompletion and built-in validation

Usage no npm install needed!

<script type="module">
  import emailPrompt from '';



CLI email prompt featuring autocompletion and validation. Powers vercel --login.



import emailPrompt from 'email-prompt';

let email;

try {
  email = await emailPrompt({
    /* options */
} catch (err) {
  console.log('\n> Aborted!');

console.log('\n> Hello ' + email);

To run the demo, clone the project and run:

npm install
node demo


  • start (String): the beginning of the prompt. Defaults to > Enter your email:
  • domains (Set): domain names to autocomplete (as String). Defaults to:
  • forceLowerCase (Boolean): converts all input to lowercase. Defaults to true.
  • suggestionColor (String): a chalk color. Defaults to gray
  • autocompleteChars (Set): a set of chars that trigger autocompletion. Defaults to:
    • ↹ Tab
    • ↵ Return (enter)
    • → Right arrow
  • resolveChars (Set): a set of chars that resolve the promise. Defaults to ↵return
  • abortChars (Set): a set of chars that abort the process. Defaults to Ctrl+C
  • allowInvalidChars (Boolean): controls whether non-email chars are accepted. Defaults to false


Some important implementation details:

  • email-prompt automatically adapts the mode of process.stdin for you.
  • The stdin stream is resumed and paused upon the promise being settled.
  • When the promise resolves or rejects, the previous stdin mode is restored.
  • The tty mode is set to raw, which means all the caret interactions that you come to expect in a regular stdin prompt are simulated. This gives us fine-grained control over the output and powers the validation.