Skip to content

Repository files navigation


Warp

WARP

Send it straight through.

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

CI License: MIT Discord Built with WebRTC Cloudflare Cost


peer-to-peer · end-to-end encrypted · no size cap · no account · multi-device · $0


Warp — direct, encrypted transfer queue

⭐ Star Warp · 🛠 Contribute

GitHub stars GitHub forks GitHub issues PRs welcome License: MIT Made with TypeScript + React

Warp is open source and we welcome PRs, from a one-line typo fix to engine work.


Governance & privacy

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.

Why it's different

  • 🔒 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.

How it works

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  ──────────────┘
  1. You open a room, and the server mints a short code.
  2. A friend joins with the code (or scans the QR), and the server introduces you.
  3. 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.

Deliberate non-goals

  • 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.

Quickstart

pnpm install

pnpm dev:server     # signaling (wrangler dev) on :8787
pnpm dev            # web app on :5173
pnpm --filter @warp/web build     # lint + typecheck + production build
pnpm --filter @warp/server test   # signaling e2e

Self-hosting

  • 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.

Architecture & protocol

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.

Brand

Logo marks live in web/public/brand/ as SVG and PNG: a universal accent tile plus transparent light/dark glyphs.

Contributing

PRs welcome. See CONTRIBUTING.md. Found a security issue? See SECURITY.md.

License

MIT © Ishannaik

Releases

Packages

Contributors

Languages