Project: Pagepipe

Pagepipe is a command line tool I created that pipes the output of a process to the homepage of a built-in webserver. Both one-time (e.g. 'cat foo.txt | pagepipe') and streaming (e.g. 'tail -f log.txt | pagepipe') process output is supported.

Pagepipe runs under node.js and works on Windows, Mac and Linux with any browser that supports server-sent events (currently all major browsers except IE and Opera Mini).

By default Pagepipe waits until the first client consumes the output and then it exits. However Pagepipe can be 'zombified' with the -z command line option to tell it to stay alive instead of exiting so that multiple clients can consume the output. A full list of command line options, including customizing the output, adding password protection and setting the webserver port and interface can be found at the bottom of this page.


$ npm install -g pagepipe

Sample Usage

No options specified

$ someprocess | pagepipe

This sends the output of someprocess to http://localhost:10371/ (10371 is the default port). Pagepipe will terminate when the output is complete and the first web client consumes the page.

Zombified on port 80

$ someprocess | pagepipe -p 80 -z

This sends the output of someprocess to http://localhost/ (the -p option sets the port). Pagepipe will not terminate (the -z option sets it to zombie mode) so multiple web clients can load the page to see the same output.

Zombified on port 80 with a 10 line buffer

$ someprocess | pagepipe -p 80 -z -n 10

This sends the last 10 lines of output of someprocess to http://localhost/ (the -n option sets the number of lines). The 10 lines are held in a buffer and if someprocess emits more lines after a web client connects those lines will also be appended on the page. The -n option is very useful to limit memory usage if you have a source process that generates a lot of output over a long span of time such as tailing a log.

Zombified on port 80 with password protection

$ secretprocess | pagepipe -p 80 -z -a foo/bar

This sends the output of secretprocess to http://localhost/ and requires the viewer to enter the username of "foo" and password of "bar" to view the contents.


-h, --help                        output usage information
-V, --version                     output the version number
-p, --port <n>                    server port [10371]
-c, --color <#rgb>                text color for page [#000]
-b, --bgcolor <#rgb>              background color for page [#fff]
-f, --font <name>                 font face for page [monospace]
-m, --margin <n>                  margin around output in page [1em]
-t, --title <text>                title tag and text for page [pagepipe]
-i, --interface <ip>              server interface [localhost]
-a, --auth <username>/<password>  require basic auth to view page
-r, --realm <name>                realm name for basic auth [pagepipe]
-z, --zombie                      stays alive after stdin is exhausted
-o, --output                      pipes to stdout
-n, --numlines <n>                size of line buffer, 0 is unlimited [0]
-d, --datestamp                   prefixes datestamps to all lines
-l, --lines                       prefixes 1-based line numbers
-j, --json                        sends event-source data as json