node package manager



Write CLI utilities that take a stream of data either stdin from one of more files. To be able to handle this:

$ yourutil file.txt
$ yourutil file1.txt file2.txt
$ yourutil < file.txt
$ cat file.txt | yourutil

Just do this:

#!/usr/bin/env node
var read = require('read-input');
var fnames = process.argv.slice(2);
read(fnames, function (err, res) {
  // `err` will be given if at least one of the files fail. 
  if (err) {
  } /* => "..." */


read(files, function(err, res) { ... })

Reads from files. If no files are given, read from stdin. The result res is a result object. If any of the files can't be read, err will be an error object.

var read = require('read-input');
var fnames = process.argv.slice(2); //=> ['readme.txt'] 
read(fnames).then(function (res) {       // '...' 
  res.error      // undefined or Error() 
  res.stdin      // true or false 
  res.files      // [...] 
  res.successes  // [...] 
  res.failures   // [...] 
}).catch(function (err) {
  // stdin error 

To support older versions of Node.js without Promises, you can use callbacks:

read(fname, function (err, res) {

You can also iterate through res.files.

read(fnames).then(function(res) {
  res.files.forEach(function (f) {    // ... 
    f.error   // undefined or Error(...) 
    f.stdin   // true or false    // 'readme.txt' 

If files is a blank array (or null), data will be read from stdin. The resulting data will have a similar schema.

read([]).then(fucntion (res) {



Read data from standard input. This will not throw errors.

read.stdin().then(function (data) {
  console.log(data); // string 
read.stdin(function (err, data) {


The results value is an object passed to the callback of read().

  • data (String) a concatenation of all data in all the files.
  • error (Error) The first error in all files. undefined if successful.
  • stdin (Boolean) is true if the file is read from stdin
  • files (Array) A list of files.
  • failures (Array) A list of files that failed.
  • successes (Array) A list of files that succeeded.

The files, failures and successes are lists of files. Each of the items in these lists has a similar list of values:

  • data (String) File data
  • error (Error) the first error encountered, if applicable
  • stdin (Boolean) is true if the file is read from stdin
  • name (String) File name

There's also error.result which refers to the result object.

See read() for an example.


read-input © 2014+, Rico Sta. Cruz. Released under the MIT License.
Authored and maintained by Rico Sta. Cruz with help from contributors.  ·  GitHub @rstacruz  ·  Twitter @rstacruz