ZeroRelay: 직접 브라우저 간 공유 – 데이터를 볼 수 없는 서버

작성자

카테고리:

← 피드로
DEV Community · Kushal Baral · 2026-07-08 개발(SW)
Cover image for ZeroRelay: Direct Browser-to-Browser Sharing - No Server Ever Sees Your Data

Kushal Baral

A fully open-source P2P mesh app for sharing text, code, notes, and files directly between browsers. No signup, no accounts, no database.

The Pain Point

You’re sitting next to a colleague. You need to send them a 200MB video file.

  • Email? 25MB limit + compression
  • Drive/Dropbox? Need an account + files sit on their servers forever
  • WhatsApp/Telegram? Compresses media + stores everything on their servers
  • AirDrop? Apple-only, doesn’t work half the time
  • USB? Who carries one anymore?
  • SCP/iPerf? Overkill for a quick share

ZeroRelay: Open a tab,drag the file. Done. Direct browser-to-browser. Nothing touches a server.

Demo

Zero Relay Demo

What’s ZeroRelay?

A peer-to-peer mesh app where every browser connects directly to every other browser over WebRTC. The signaling server (Cloudflare Durable Object) only exchanges join/leave messages and ICE candidates – it never stores or even sees your messages, files, or avatars.

Each peer is its own database – everything lives in IndexedDB (Dexie) on your browser. When you share something, it’s broadcast over WebRTC data channels directly to connected peers. There is no central storage. There is no cloud. Your data never touches a server.

Architecture

                    ┌─────────────────┐
                    │  Cloudflare DO   │  ← signaling only
                    │  (per room)      │    (join/leave/ICE relay)
                    └────────┬────────┘
                             │
              ┌──────────────┼──────────────┐
              ▼              ▼              ▼
         ┌────────┐    ┌────────┐    ┌────────┐
         │ Peer A │◄──►│ Peer B │◄──►│ Peer C │  ← WebRTC mesh
         │(Dexie) │    │(Dexie) │    │(Dexie) │     (data channels)
         └────────┘    └────────┘    └────────┘

Enter fullscreen mode Exit fullscreen mode

Each browser stores its own copy of everything in IndexedDB. When you share something, it’s broadcast to all connected peers over WebRTC data channels. The signaling server never sees your messages, files, or avatars.

For full architecture deep-dive, see ARCHITECTURE.md on GitHub.

Features

Full P2P Mesh Every peer connects directly to every other – no central relay Zero Server Storage No database, no logs, no message history on any server No Signup or Accounts Open the app, join a room – done Share Anything Text, code, notes, or files of any size Password-Protected Rooms Room-level passwords enforced by Cloudflare DO Retention Per Item Session, 5 min, 1 hour, 1 day, or forever Open Source MIT – fully auditable and self-hostable

Important Note

Peer Discovery Works globally – anyone on the internet can see you in the room Data Transfer Works on same LAN – messages and files flow when peers are on the same network Cross-Network Not yet – needs a TURN server for symmetric NAT traversal

Peer discovery goes through the Cloudflare DO (WebSocket over TCP) so it works anywhere. Data transfer uses WebRTC which needs STUN/TURN to cross the public internet. Currently STUN-only. TURN support and contributions are welcome:)

Tech Stack

Layer Choice Frontend Next.js 15 + React 19 State Zustand (in-memory + localStorage persist) Persistence Dexie v4 (IndexedDB) P2P Transport WebRTC (full mesh topology) Signaling Cloudflare Workers + Durable Objects Styling Tailwind CSS v4 Tooling Biome, TypeScript, Husky

Why Open Source?

  • Transparency – anyone can audit exactly what the server does (and doesn’t) store
  • Self-host – deploy your own signaling worker if you want

Links

MIT License

원문에서 계속 ↗

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다