Convey is a command-line tool with a simple goal, to make it easy to pipe between machines.

$ echo "Hello from Convey" | convey
21f50fba373e11e9990a72000872a940
$ convey 21f50fba373e11e9990a72000872a940
Hello from Convey

Pipes enable a sequence of processes to be chained together by their standard streams (stdin, stdout, stderr) so that the output of each process feeds into the input of the next one. A pipe is a unidirectional data channel; data flows from left to right. All processes of a pipeline are started at the same time and their streams are appropriately connected.

Convey is a command-line tool written in Go that can interact with stdin, stdout and stderr. It has two modes. The first is reading from stdin to write data to a channel. The second is reading from a given channel and writing that data to stdout.

Here is an example. We first pipe to grep and then pipe to convey. When can then read the contents of this channel from another machine. If we wanted, we could further pipe that output to other commands, thereby continuing the pipeline.

$ ls -la | grep myfile.txt | convey
e123c03deae24e74ab632ff3f51164fb
$ convey e123c03deae24e74ab632ff3f51164fb
-rw-r--r--debekoe 31 Feb  3 01:00 myfile.txt

Use-cases

Below is a sample of use-cases to get you started. We expect many more uses for this in the future.

Developers working across multiple hosts

Developers working across multiple hosts can use Convey to share pipelines between these hosts. For example, you can pipe from a VM or container running in the cloud to your local machine with no SSH or tunneling required.

In the video below, we pipe a package.json file from a VM to a local machine. We then start a pipe that prints a line every second and stream that output from the VM to the local machine while preserving the stream from before the client connected. Finally in the video, we up the stakes by streaming the time every millisecond from VM to local machine. Convey handles it just fine.

Cloud Shell users

Both Azure and Google Cloud provide web-based shells available in the browser. These are great to administer and manage resources in the respective clouds. However, actual application development typically happens on a developers’ machine, not in the Cloud Shell. With Convey, we can reduce some friction here by making it easy to pipe between Cloud Shells and a dev machine. Check out the video below for a couple of examples. When watching the video, notice that we also pipe the colorization to the Cloud Shells.

When you want to share command output with others

Finally, Convey is great for when you quickly want to send terminal output to a team member for example for diagnostics or debugging purposes. Check out the video below of using the standard top command with convey.

Try it out yourself

Convey is straightforward to get started with. All you need is to download the client for your platform then run it.

Download for Linux

wget -qO convey https://get.convey.sh/linux
chmod +x convey

Download for macOS

wget -qO convey https://get.convey.sh/macos
chmod +x convey

Download for Windows

Download the .exe from https://get.convey.sh/windows

Then, run it...

$ echo "Hello from Convey" | convey --demo
21f50fba373e11e9990a72000872a940
$ convey --demo 21f50fba373e11e9990a72000872a940
Hello from Convey

Use the --demo flag for experimental purposes only.

When you are convinced in the value of Convey to your developer productivity, create your own instance of the server and connect securely to that. See our README for information on this.


To learn more about Convey, submit feedback or suggest new features, visit our GitHub repository.