- Notifications
You must be signed in to change notification settings - Fork159
Infinitely transfer between every device over pure HTTP with pipes or browsers
License
nwtgck/piping-server
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Infinitely transfer between every device over HTTP/HTTPS
Piping Server is simple. You can transfer as follows.
# Sendecho'hello, world'| curl -T - https://ppng.io/hello
# Getcurl https://ppng.io/hello> hello.txt
Piping Server transfers data toPOST /hello
orPUT /hello
intoGET /hello
. The path/hello
can be anything such as/mypath
or/mypath/123/
. A sender and receivers who specify the same path can transfer. Both the sender and the recipient can start the transfer first. The first one waits for the other.
You can also use Web UI likehttps://ppng.io on your browser. A more modern UI is found inhttps://piping-ui.org, which supports E2E encryption.
The most important thing is that the data are streamed. This means that you cantransfer any data infinitely. The demo below transfers an infinite text stream withseq inf
.
Piping Server is designed based on the ideas as follows.
- Infinite transfer: You can transfer any kind of data infinitely on a stream. Streams are very efficient in terms of both time and space.
- Zero installation: All you need is to have either a Web browser or
curl
, which are widely pre-installed. You do not need to install any extra software. - Simpleness: Making simple makes it more secure.
- Storageless: The server makes transfer more secure since the server never stores your data.
- Purity: The server streams over pure HTTP, which makes integration easier with other softwares.
- Engineer friendly: Also designed for Unix/Linux users, who use pipes, not only for Web browser users.
Any data such as text streams, video streams and protocols can be streamed over Piping Server. Here are applications that fully use the power of pure HTTP.
See: "The Power of Pure HTTP – screen share, real-time messaging, SSH and VNC"
![]() | ![]() | ![]() |
Text stream chat | Screen share | Drawing share |
![]() | ![]() | ![]() |
E2E encryption file transfer | SSH on Web browser | VNC on Web browser |
The most important thing is that Piping Server stays simple. The applications usePiping Server as a core of data communication. It transfers data toPOST /thepath
intoGET /thepath
streamingly. The stream makes real-time communications over every device possible.
See "Ecosystem around Piping Server · nwtgck/piping-server Wiki" to find more about softwares using Piping Server.
In my experiment, Piping Server transferred 1,110TB (≈ 1PB) in a single HTTP request for 64 days and 2 hours at least. This means that it can transfer huge data and keep a request for about 2 months.
Get help and version only withcurl
.
curl https://ppng.io/help
curl https://ppng.io/version
You can transfer to multiple receivers. In the demo below, query parameter?n=3
is specified to allow three receivers.
Here are public Piping Servers.
- https://ppng.io
- https://piping.nwtgck.repl.co
- https://piping.glitch.me
- https://piping-47q675ro2guv.runkit.sh
Run a Piping Server onhttp://localhost:8080 as follows.
docker run -p 8080:8080 nwtgck/piping-server
Run a server in background and it automatically always restarts.
docker run -p 8080:8080 -d --restart=always nwtgck/piping-server
Run a Piping Server onhttp://localhost:8080 as follows on Linux.
curl -L https://github.com/nwtgck/piping-server-pkg/releases/download/v1.12.0/piping-server-pkg-linuxstatic-x64.tar.gz| tar xzvf -./piping-server-pkg-linuxstatic-x64/piping-server --http-port=8080
The binaries are for multi-platform including Linux on x64, Linux on ARM64, Linux on ARMv7, Intel macOS, Apple Silicon macOS and Windows on x64. Seehttps://github.com/nwtgck/piping-server-pkg to run on the other platform.
Here are easier ways to own your Piping Server.
- Remix on Glitchhttps://glitch.com/~piping
- Clone on RunKit:https://runkit.com/nwtgck/piping
- Fork on Repl.it:https://repl.it/@nwtgck/piping
See "Ecosystem around Piping Server · nwtgck/piping-server Wiki" to find more about self-hosting.
Here are headers passed to receivers.
Content-Type
Content-Length
Content-Disposition
X-Piping
: custom header whose value is freely specified by the sender
Here is available CLI options bypiping-server --help
.
Options: --help Show help [boolean] --version Show version number [boolean] --host Bind address (e.g. 127.0.0.1, ::1) [string] --http-port Port of HTTP server [default: 8080] --enable-https Enable HTTPS [boolean] [default: false] --https-port Port of HTTPS server [number] --key-path Private key path [string] --crt-path Certification path [string]
Piping Server is also developed in Rust.
https://github.com/nwtgck/piping-server-rust
About
Infinitely transfer between every device over pure HTTP with pipes or browsers