Named Pipes Over the Internet
POST to a path. GET from the same path. Data flows directly from sender to receiver — no buffering, no uploads, no storage. Just HTTP.
Terminal A — Sender
$ curl -T report.pdf \
…/pipe/my-report
[INFO] Waiting for receiver...
[INFO] Streaming to 1 receiver(s)...
[INFO] Transfer complete.
Terminal B — Receiver
$ curl \
…/pipe/my-report
-o report.pdf
% Total report.pdf
100 2.4M 100 2.4M 0 0 1.8M
Data Flows Through, Not Into
Every byte you send arrives at receivers in real-time. The server is a wire, not a warehouse.
SOURCE
sender
PIPE SERVER
zero storage · up to 256 receivers
SINK
receiver
Sender opens
Sender POSTs or PUTs to any path. The server waits — up to 5 minutes — for a receiver to connect.
Bytes flow through
Data streams byte-by-byte across the wire. Zero buffering. No temp files. No upload step.
Receivers connect
Receivers GET the same path and pull the live stream. Up to 256 receivers can fan out from one sender.
Common Pipe Compositions
Most recipes are two curl commands — one to send, one to receive.
What Can Flow Through a Pipe
Any Content-Type that isn't script-executable flows verbatim. Dangerous MIME types are rewritten to text/plain — data is not dropped, XSS is prevented.
application/octet-streamPUT → GETBinary files, archives, images
/api/v1/pipe/[path]text/plainPOST → GETLogs, stdin, config, stdout streams
/api/v1/pipe/[path]multipart/form-dataPOST → GETBrowser file upload (first part only)
/api/v1/pipe/[path]video/webm, video/mp4PUT → browserScreen share, recorded video
/api/v1/pipe/[path]?videotext/event-stream (SSE)GET spectatorProgress monitoring, speed/ETA/state
/api/v1/pipe/[path]?progresstext/html (rewritten)PUT → GETRewritten to text/plain before forwarding — XSS prevented, data not dropped
/api/v1/pipe/[path]Custom headersPUT → GETX-Hoody-Pipe, X-Piping metadata forwarded
/api/v1/pipe/[path]All endpoints live on /api/v1/pipe/[path]. Direction describes who writes, who reads.
Built for Volume
Hard limits enforced per-server. HTTP 429 when capacity is full, HTTP 414 when paths are too long.
256
Max receivers on a single path
1,000
Pending unestablished connections
1,000
Simultaneous in-flight streams
5 min
TTL before HTTP 408 eviction
1,024
Max path length in characters
50
Progress spectators per path
9 Endpoints, Two Commands That Matter
POST or PUT to send. GET to receive. Everything else is observability.
Observability & UI
{count, plural, =1 {# endpoint} other {# endpoints}'}GET /health → { status, activePipes }
Data Transfer
{count, plural, =1 {# endpoint} other {# endpoints}'}POST or PUT to send · GET to receive
Two Curl Commands Away
No SDKs. No auth setup. No file size limits. Spin up a Pipe container and start transferring.