Skip to content

From your terminal to anywhere your data needs to go.

Push and pull by name. When you're ready, wire the same pipe to a webhook with one more command.

Free during beta · No credit card

JSON Lines in. To another terminal, or to any HTTPS endpoint.

Quickstart

Get started in three steps.

Install, authenticate, and send your first stream.

Step 1

Install the CLI

curl -fL "https://pipedata.io/download/pd?os=darwin&arch=arm64" -o pd
chmod +x pd && mv pd "$HOME/.local/bin/pd"

Step 2

Authenticate

$ pd login

Browser-based device flow. CI runners can use a workspace-scoped writer key instead.

Step 3

Push and pull

# machine A
$ echo '{"hello":"world"}' | pd push my-pipe

# machine B
$ pd pull my-pipe
{"hello":"world"}

Same pipe name, any machine in your workspace. Re-run pd pull to resume from your last cursor.

Then try

Wire it to a real system

$ pd dest http crm \
    --source orders \
    --method POST \
    --url https://api.example.com/hooks
$ pd verify crm    # one-time DNS check
$ pd resume crm
 delivering orders → crm

Retries and rate limits are handled for you. pd verify is a one-time DNS check on the destination host.

Examples

Real-world cases for pipedata.io.

Start with two terminals. Wire the same pipe to a webhook when you're ready to ship.

01

Hand a dataset to a teammate

A 4 GB JSONL dump that won't fit in email. Share one pipe name instead of wrangling storage access.

$ pd push debug-2026-05 < session.jsonl
 created pipe "debug-2026-05"
 sent 312,408 records
02

Tail prod logs from your laptop

Stream records from a pod and inspect them locally with your normal filters.

# prod
$ kubectl logs -f api | pd push api-logs

# laptop
$ pd pull api-logs --follow | jq
03

Compose with the tools you already use

stdin in, stdout out. Status stays on stderr so redirects remain clean.

$ pd pull payments \
  | jq 'select(.amount > 1000)' > big.jsonl
04

Deliver to a webhook with retries

Point a pipe at any HTTPS endpoint. Retries and rate limits run on our side, in flight, with at-least-once delivery.

$ pd dest http crm \
    --source orders \
    --url https://api.example.com/hooks \
    --rate 50 \
    --retry
$ pd verify crm
$ pd resume crm
 delivering orders → crm

Why pipedata.io

Why teams pick pipedata.io.

No reinvention of your workflow. Keep your shell, keep your tools, remove the transport friction.

No infrastructure to set up
No bucket policy, no Kafka cluster, no expiring signed URL. We run the transport, retries, and storage so you don't have to.
Pipe-native
stdin in, stdout out, JSON Lines throughout. Compose with jq, awk, and your existing shell tooling.
Resumable
Per-machine cursors. Switch laptops, reconnect, re-run — pick up exactly where you left off.
Grows with you
Push and pull today. Wire the same pipe to an HTTP destination when you're ready. Same name, same CLI, at-least-once throughout.
Retention you control
Records stay in the pipe until you delete it. No 7-day expiry. No cron-job cleanup.

Security

What you'd want to ask before piping prod.

Built with strong defaults for transport, encryption, isolation, and lifecycle controls.

Transport
Modern TLS between clients and Pipedata, and between Pipedata and egress endpoints. Weaker protocol versions are rejected at the edge.
Authentication
Writer keys are scoped to one workspace; mismatches are rejected before the request body is read.
Encryption at rest
Records are encrypted per workspace before disk. Keys are stored separately from the data they protect.
Infrastructure
Servers with full-disk encryption and restricted admin access. Production isolated from development.
Tenant isolation
Pipes, writer keys, and encryption keys are scoped to a workspace. Cross-workspace access is impossible through the data API.
Data residency
Stored and processed in the EU (central region). Additional regions are planned.
Retention & deletion
Records live as long as the pipe. Delete the pipe, the data is gone. Delete the workspace, every pipe is gone.
Audit trail
Configuration changes are recorded so administrators can review who changed what and when.

Beta limits apply

Per-record size, per-pipe size, and throughput caps are in place during beta. Need higher limits? Email beta@pipedata.io.

Pricing

Pay only for what you hold and what leaves.

One rate card. No tiers. No seats. Free during private beta.

Storage

€0.10 / GiB-month

What you hold across all your pipes, measured daily. Delete a pipe, the meter drops the next day.

Egress

€0.10 / GiB

Bytes leaving via pd pull or webhook delivery.

Free on every account, forever

30 GiB-day of storage (≈ 1 GiB held all month) plus 5 GiB of egress every month. Subtracted from your bill before the rate is applied.

How it's metered

Storage is GiB-day
One sample per account per day at the end of the day, summed over the calendar month. What you hold for a long time costs more than what you hold briefly.
Egress is per-month
Bytes leaving via egress endpoints, accumulated across the month and reset at 00:00 UTC on the 1st.
Calendar months, EU billing
Invoiced on the 1st in EUR. VAT or local sales tax added at invoice time based on your country.

Ready to try pipedata.io?

Send your first stream in under 2 minutes.

Data lives in the EU (central region). More regions, controls, and self-serve onboarding are on the way.