Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md

AirPipe

Self-hosted file transfer with a passphrase that works anywhere. Files go peer-to-peer between any two devices. The relay never sees your bytes.

demo

Try it: airpipe.sanyamgarg.com

How it works in 30 seconds

  1. Sender picks a file. Gets a passphrase like RIVER FALCON MARBLE 42.
  2. Receiver types it at the homepage, runs airpipe download <PHRASE>, or scans the QR.
  3. Both pair through the relay, then the file streams directly between them over WebRTC.
  4. If the receiver isn't online yet, the sender can pick "mailbox" mode instead. The relay holds the encrypted file for 10 minutes.

Same passphrase works for both modes. Receiver doesn't need to know which one the sender chose.

Self-host

docker run -p 8080:8080 ghcr.io/sanyam-g/airpipe-relay

That's it. One Go binary, ~15 MB image. Bundles the landing page, browser sender/receiver, and the install script.

Or with the bundled docker-compose.yml (includes an opt-in Watchtower sidecar that auto-pulls new images):

git clone https://github.com/Sanyam-G/Airpipe cd Airpipe docker compose up -d

Point the CLI at your relay (per-call):

airpipe --relay https://your-server.example send file.txt

Or set it permanently:

export AIRPIPE_RELAY=https://your-server.example airpipe send file.txt

Env vars if you want to tune things: PORT (default 8080), AIRPIPE_ALLOWED_ORIGINS (CORS, default *), AIRPIPE_RATE_LIMIT_PER_MIN (default 60), AIRPIPE_LOG_FORMAT (json or text).

CLI

Install:

curl -sSL https://airpipe.sanyamgarg.com/install.sh | sh

Or via Go:

go install github.com/Sanyam-G/Airpipe/cmd/airpipe@latest

Self-update later: airpipe update. Linux + macOS, amd64 + arm64.

Send

airpipe send report.pdf

You get a prompt: direct (P2P) or mailbox (relay holds it 10 min). Pick one. The CLI shows a passphrase, a QR, and a link.

Download

airpipe download RIVER FALCON MARBLE 42

Multiple files or a folder get auto-zipped:

airpipe send file1.txt photos/

Wait for someone to send to you

airpipe receive ./downloads

Prints a QR. Phone scans it, drops a file, the file lands in ./downloads. Direct WebRTC, fallback to relay if NAT punching fails.

Browser to browser, no install

Open airpipe.sanyamgarg.com/live. Get a passphrase + QR. Receiver types the passphrase at the homepage in their browser. Both pair, sender drops a file. No CLI, no app, no account.

Encryption

NaCl secretbox (Poly1305 + XSalsa20, 256-bit key) on top of DTLS for the live path. The key never leaves the side that generated it. The relay only sees a 16-char room token and ciphertext.

The passphrase derives both the relay token and the encryption key via SHA-256 with domain separation. Same algorithm on CLI and browser.

Stack

Go relay (gorilla/websocket, pion/webrtc), embedded HTML/CSS/JS frontend (tweetnacl.js for browser crypto), Docker, Cloudflare Tunnel optional. Single static binary.

License

MIT

关于 About

Send files to/from the cli easily! no scp

语言 Languages

Go53.2%
HTML32.8%
CSS12.9%
Shell1.0%
Dockerfile0.1%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
55
Total Commits
峰值: 21次/周
Less
More

核心贡献者 Contributors