Skip to content
use-cases / send-a-teammate-a-database-state / hero
PIPE · SHARE STREAMS · POSTGRES

Send a teammate a database state in one line

A teammate hits a bug you can't reproduce. Skip the file. pg_dump on your laptop streams directly into their psql on staging — no upload, no link, no download. The pipe routes the bytes through.

use-cases / send-a-teammate-a-database-state / flow

One pipe path. Two curls. No middle file.

The Hoody Pipe API holds an unestablished pipe for up to five minutes while it waits for the other side to connect. When you both connect, the bytes stream through. Nothing is ever written to disk on the server.

pipe.containers.hoody.com/dev-snapshot
PUT · SENDERyou · dev

Stream the dump out of pg_dump

# from your dev laptoppg_dump --format=custom dev \  | curl -T - \      https://pipe.containers.hoody.com/api/v1/pipe/dev-snapshot[INFO] Waiting for 1 receiver to connect…[INFO] Streaming to 1 receiver…[INFO] Transfer complete.

PUT (or POST) with a streaming body. The server prints status messages back to your terminal as the pipe establishes — useful so you can see when the other side actually connected.

GET · RECEIVERteammate · staging

Pull the dump straight into psql

# on their staging shellcurl https://pipe.containers.hoody.com/api/v1/pipe/dev-snapshot \  | pg_restore -d staging# rows imported · staging now matches dev

GET on the same path blocks until the sender connects. The bytes the sender writes appear as the response body. Pipe to pg_restore (or psql) and the dump lands in the database directly — never a file.

n=1 · default fan-outpipe waits up to 5 minutes0 bytes stored on server

If you want to watch progress without consuming a receiver slot, point a third curl at the same path with ?progress and you get a live HTML dashboard showing bytes transferred, speed, and ETA.

use-cases / send-a-teammate-a-database-state / steps

What it looks like in real time

The four moves it takes to get a dev DB into your teammate's staging without anything ever touching disk on a server.

Slack message → restored DBFOUR STEPS · ONE PIPE
10:14 · BUG REPORT01

Teammate can't reproduce

“can you send me your dev db?”

Yesterday this would have meant pg_dump, S3 bucket, presigned URL, and a Slack paste.

10:14 · PUT02

You stream the dump out

pg_dump dev | curl -T - …/pipe/dev-snapshot

Your terminal prints “Waiting for 1 receiver to connect…” and sits there. No file is created locally either.

10:15 · GET03

Teammate runs the receiver

curl …/pipe/dev-snapshot | pg_restore

The pipe establishes the moment they connect. Bytes start flowing from your pg_dump straight into their pg_restore.

10:18 · DONE04

Staging now matches dev

Transfer complete · 0 bytes on server

Server-side disk usage stays at zero. The pipe path forgets the transfer happened the moment both sides disconnect.

use-cases / send-a-teammate-a-database-state / reasons

Why a path beats a file

It's the same number of commands you'd type for an S3 round-trip — minus the bucket, the credential, the upload, the download, and the cleanup.

NO STORAGE

The server never holds the bytes

Hoody Pipe is a streaming intermediary, not a file service. The dump exists on your disk and on theirs; in between, it's just bytes in flight. Nothing to clean up, nothing to leak.

NO BIG FILES

Size is bounded by the pipe, not by RAM

There's no upload progress bar to babysit because there's no upload. A 40 GB dump moves at whatever speed your network and your teammate's pg_restore can sustain — the pipe just forwards.

WATCHABLE

Append ?progress for a live dashboard

Open the same path with ?progress on a third URL and watch bytes-transferred, speed, and ETA in real time. Up to 50 spectators per pipe, none of them consume a receiver slot.

use-cases / send-a-teammate-a-database-state / punchline

Database state used to be an attachment. Now it's a path.

Files are state at rest. Paths are state in motion. The Hoody Pipe lets a database snapshot be the second one — addressable, ephemeral, and never sitting on a server you have to clean up later.

  • no upload
  • no download
  • no link to share
use-cases / send-a-teammate-a-database-state / replaces

What this replaces

Most of the tools we used to share a dev database are leftovers from when we couldn't stream bytes between two terminals over HTTP. The pipe makes them all unnecessary.

  • AWS S3 + presigned URLA bucket, a credential, an upload, and a 24-hour link
  • Dropbox / Google DriveSign-in, manual share, wait for sync
  • Slack file uploads30 MB cap, then “please use a real link”
  • WeTransfer-style servicesEmail gates, ad pages, mystery retention windows
  • Postgres dblink workaroundsOpen a port to dev so staging can pull rows live
  • rsync over SSH bastionTwo SSH keys, a jump host, and a temp file on each end
use-cases / send-a-teammate-a-database-state / cta

Two curls. One path. Their staging now matches your dev.

use-cases / send-a-teammate-a-database-state / related

Read the others