Home

Awesome

bpipe

Browser <==> Unix Pipes

v0.0.1

bpipe is a command line tool which allows you to create readable and writable streams between standard Unix Pipes and the browser to run commands like this:

bpipe -s "#myInput" -e "keyup" | less
echo "hello there" | bpipe -s "#myDiv"

Update

Since this project has been receiving a good amount attention I have cleaned up the codebase and started development of version v0.2.0 at https://github.com/marak/bpipe/tree/v0.2.0

Installation

npm install bpipe -g

Usage

  Usage: bpipe [server] [options]

  server: the location of the `bpipe-server` to connect to
          Defaults to localhost:8001

  Options:

    -h, --help               output usage information
    -V, --version            output the version number
    -s, --selector [string]  the CSS selector to attach to
    -e, --event [string]     the DOM event to attach to
    -u, --url [string]       the url to connect to

Examples

A hosted bpipe-server service is available at http://bpipe.io. This allows the use of bpipe without needing to setup a server.

You can also run a local server using the following command:

bpipe-server
open index.html

STDIN

Pipe data from a text <input> to less

bpipe -s "#myInput" -e "keyup" | less

Whenever the select box is changed in the browser, the new value will be piped to less

<img src="https://github.com/Marak/bpipe/raw/master/screenshots/pipe-text-input-to-less.gif"/>

Pipe data from a <select> box to less

bpipe -s "#mySelect" -e "change" | less

Whenever the select box is changed in the browser, the new value will be piped to less

<img src="https://github.com/Marak/bpipe/raw/master/screenshots/pipe-select-box-to-less.gif"/>

STDOUT

Pipe data from echo to a div's innerHTML

echo "hello there" | bpipe -s "#myDiv"

When this command is run the browser will update with "hello there"

<img src="https://github.com/Marak/bpipe/raw/master/screenshots/pipe-echo-to-div.gif"/>

Caveats

bpipe will only work if the custom .js file is loaded on the page you wish to interact with. You will also need to run a websocket server to facilitate communication between the browser and bpipe. A server and browser bundle are both included in this project. A free bpipe service is also available at http://bpipe.io

In the not so distant future perhaps browsers will natively support this type of interaction. Until then, we polyfill.

Can I actually use tail?

Of course! You can use any standard Unix tool. If you want to use tail it should work by creating a temporary file or named piped. less also works pretty well.

bpipe -s "#mySelect" -e "change" > /tmp/select.log
tail -f /tmp/select.log

Open Ownership / Open Contribution

If anyone is interested in contributing to the project I would be glad to add additional contributors / owners.

Status

The current build is functional, but should be considered experimental. With a little more polish, bpipe could be a useful tool. If anyone wants to help further develop this tool feel free to reach out or start opening up pull requests.

TODO

Dependencies / Acknowledgements

License

MIT

a