Skip to content
Stream data over http using curl.
Branch: master
Clone or download
Latest commit dd8fc1f Mar 14, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore add full project Mar 4, 2019
Dockerfile Adding Docker build instructions Mar 8, 2019
LICENSE add license Mar 5, 2019 add blocking mode Mar 14, 2019
demo.gif update demo Mar 5, 2019
docker-compose.yml update docker container image Mar 8, 2019
go.mod add full project Mar 4, 2019
pipe-to-me.service add working deployment via https Mar 4, 2019
pipe.go add blocking mode Mar 14, 2019
pipe_test.go update tests Mar 5, 2019
pipecollection.go add fail mode Mar 10, 2019
receiver.go split up files and add tests Mar 5, 2019
util_test.go split up files and add tests Mar 5, 2019


Stream data over http using curl. Hosted at

  • No javascript
  • Go standard library only

Your randomly generated pipe address:<key>

Input example:
	browse to (chrome, firefox):<key>
	curl -T- -s<key>
	hello world<enter>

Pipe example:
	separate terminal: curl -s<key>
	echo hello world | curl -T- -s<key>

File transfer example:
	curl -s<key> > output.txt
	cat input.txt | curl -T- -s<key>

Watch log example:
	browse to (chrome, firefox):<key>
	tail -f logfile | curl -T- -s<key>

Data is not buffered or stored in any way.
Data is not retrievable after it has been delivered.

By default: 
	If data is sent to the pipe when no receivers are listening, 
	it will be dropped and is not retrievable.

Fail Mode: 
	curl -T- -s<key>?mode=fail
	In this mode, a send request will fail if no receivers are listening.
	A receive request will fail if no senders are connected.
	Fail mode should only be used on one side of the connection.

Block Mode:
	curl -T- -s --expect100-timeout 86400<key>?mode=block
	In this mode, a send request will wait to send data until a receiver connects.
	Block mode has no effect on a receive request.

Maximum upload size: 64 MB
Not allowed: anything illegal, malicious, inappropriate, etc

This is a personal project and makes no guarantees on:
	reliability, performance, privacy, etc



With go installed:

go get -u


pipe-to-me -h
  -baseurl string
        the base url of the service
         (default "http://localhost:8080/")
  -httpaddr string
        the address/port to listen on for http
        use :<port> to listen on all addresses
         (default "localhost:8080")


In order to build the project, just use:

go build


You can build the project under linux (or Windows Subsystem for Linux) and just copy the executable to your server.

You can then run the program directly or use systemd to install it as a service and keep it running.

Customize the pipe-to-me.service file in the repo for your server and copy it to /lib/systemd/system/pipe-to-me.service (ubuntu)

Start the app with: systemctl start pipe-to-me
Enable it on boot with: systemctl enable pipe-to-me
Check it's status with: systemctl status pipe-to-me
See standard output/error with: journalctl -f -u pipe-to-me


You can host the application using go directly, or you can listen on a local port and use nginx to proxy connections to the app.

Make sure that nginx is installed with: apt-get install nginx

Customize pipe-to-me.nginx.conf and copy it to /etc/nginx/sites-available/pipe-to-me.nginx.conf

Remove the default website configuration: rm /etc/nginx/sites-enabled/default

Enable the go proxy: ln -s /etc/nginx/sites-available/pipe-to-me.nginx.conf /etc/nginx/sites-enabled/pipe-to-me.nginx.conf

Restart nginx to pick up the changes: systemctl restart nginx


If running as a stand-alone go application, you can use the built-in https support. When running behind a proxy, you should enable https in nginx and forward to the localhost http address.

Install the letsencrypt client with:

add-apt-repository ppa:certbot/certbot
apt-get install python-certbot-nginx

Generate and install a certificate with: certbot --nginx -d

The certificate should auto-renew when necessary.


A prepared Docker image is available here.

docker run --name pipe-to-me -p 80:8080 jpschroeder/pipe-to-me -baseurl http://localhost/

You can build the image yourself by running docker-compose up --build.

You can’t perform that action at this time.