Peer-to-peer file transfer that never touches a server. Pick a file, share a code, and your bytes stream device-to-device over an encrypted WebRTC channel. No uploads, no accounts, no size limits, no cloud.
⚡ warp.ishannaik.com · How it works · Issues · Discord
peer-to-peer · end-to-end encrypted · no size cap · no account · multi-device · $0
Warp is open source and we welcome PRs, from a one-line typo fix to engine work.
- ⭐ Star the repo. It helps more people find serverless, $0 file transfer.
- 🛠 Read CONTRIBUTING.md. Dev setup in two commands, an architecture tour (docs/ARCHITECTURE.md), and a first-PR walkthrough.
- 🌱 Grab a good first issue. Each one is scoped, self-contained, and picked for newcomers.
Warp is MIT-licensed, and its privacy guarantee comes from its architecture rather than a policy promise. The project's $0, no-TURN, and no-storage constraints keep file bytes out of Warp's infrastructure; introducing a hosted file relay or storage tier would require a visible architecture change, not a quiet policy edit. See SECURITY.md and docs/ARCHITECTURE.md for the trust boundary and technical design.
- 🔒 End-to-end encrypted by default. Every transfer rides DTLS on the WebRTC data channel, and the keys live only in the two browsers. Your ISP, the café Wi-Fi, and Warp itself all see nothing but ciphertext.
- 🛰️ No server in the path. The signaling server only introduces two peers, then steps aside. It never sees, stores, or relays a single file byte.
- ⚡ Fast. 256 KB SCTP chunks with backpressure push the channel toward your real link rate. Multi-GB games and zips stream straight to disk instead of buffering in RAM.
- 🌐 True multi-device. A room is a full mesh. Fan one file out to every device at once, or send back the other way. The channel stays open for more.
- ✋ You stay in control. The receiver gets a review → accept → tray flow. Nothing auto-downloads, so you choose what to save, per file or as a zip. Cancel mid-transfer and it stops instantly (the cancel rides the signaling socket, jumping the byte queue).
- 💸 $0 and no credit card. Warp runs on Cloudflare's free tier plus public STUN. No paid relay sits anywhere in the stack, so nothing can bill you.
📖 The theory page walks the whole stack (NAT, STUN, DTLS, chunking, backpressure), then works down layer by layer through why a relay can never be free, all the way to thermodynamics.
Warp is two small pieces:
web/is the app plus landing page (Vite + React 19 + TypeScript + Tailwind v4). It runs entirely in the browser.server/is a Cloudflare Worker + Durable Object doing WebSocket signaling. It brokers the connection handshake and hibernates when idle, so it costs nothing between transfers.
Browser A ──handshake──▶ signaling (introduce only) ◀──handshake── Browser B
└────────────── encrypted WebRTC data channel · your files ──────────────┘
- You open a room, and the server mints a short code.
- A friend joins with the code (or scans the QR), and the server introduces you.
- The browsers connect directly (STUN for NAT discovery) and files stream peer-to-peer, end-to-end encrypted.
Devices on the same network also discover each other, grouped by public IP à la Snapdrop. Multiple peers can share one room as a mesh, up to MAX_PEERS.
- No TURN relay. If both peers sit behind strict or symmetric NATs and can't punch through, Warp shows an honest error instead of paying to relay your bytes. Same Wi-Fi always works, and most networks connect fine via STUN.
- No cloud storage. Warp uploads nothing, so there's nothing to leak, expire, or get billed for.
- No paid infrastructure. Signaling is a free hibernating Worker, STUN is public, and file bytes go straight peer-to-peer.
pnpm install
pnpm dev:server # signaling (wrangler dev) on :8787
pnpm dev # web app on :5173pnpm --filter @warp/web build # lint + typecheck + production build
pnpm --filter @warp/server test # signaling e2e- Frontend → any static host. We ship
web/to Cloudflare Pages:cd web && wrangler pages deploy dist --project-name=<your-project>
- Signaling → a Cloudflare Worker + Durable Object, free on the Workers Free plan, no credit card, hibernates when idle:
pnpm --filter @warp/server run deploy
Point VITE_SIGNALING_URL in the frontend at your signaling server's wss:// URL (see web/.env.example). Vite inlines it at build time, so rebuild after changing it.
Receive behavior varies by browser capability and file size; see the browser support and receive-strategy matrix for the current disk, OPFS, IndexedDB, and memory paths.
See server/README.md for the signaling protocol: message contract, room lifecycle, and mesh rules.
Logo marks live in web/public/brand/ as SVG and PNG: a universal accent tile plus transparent light/dark glyphs.
PRs welcome. See CONTRIBUTING.md. Found a security issue? See SECURITY.md.