You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ZeroRelay is a P2P opensource mesh app for sharing files and text directly between browsers. No central database. Each peer owns its own copy of data in IndexedDB (Dexie). The signaling server (Cloudflare Durable Object) only helps peers find each other and exchange WebRTC SDP. Data flows directly browser-to-browser over WebRTC data channels.
> **ZeroRelay** is a peer-to-peer mesh app for sharing text, code, notes, and files directly between browsers. **No servers store your data** — the signaling server only helps peers discover each other. Everything flows directly between browsers over WebRTC.
6
+
<h1align="center">ZeroRelay</h1>
7
+
8
+
> **ZeroRelay** is a peer-to-peer opensource mesh app for sharing text, code, notes, and files directly between browsers. **No servers store your data** - the signaling server only helps peers discover each other. Everything flows directly between browsers over WebRTC.
11
9
12
-
<br>
10
+
<br/>
13
11
14
-
## Features
12
+
## Features
15
13
16
14
|||
17
15
|---|---|
18
-
|**P2P Mesh**| Every peer connects directly to every other peer — no central database |
19
-
|**Password Rooms**| Room-level passwords enforced by Cloudflare Durable Objects |
20
-
|**Share Any Type**| Chat, code (monospace), notes (italic), or files of any size |
21
-
|**Retention Model**| Per-item: session, 5min, 1h, 1d, or forever |
22
-
|**Profile Avatars**| Upload an avatar — it's exchanged once when a new peer connects |
23
-
|**LAN Detection**| Global room is restricted to LAN peers automatically |
24
-
|**Dark + Light**| Full Tailwind theme support |
25
-
|**Zero Backend DB**| IndexedDB on each peer for persistence — nothing stored on the server |
16
+
|**P2P Mesh**| Every peer connects directly to every other peer - no central database |
17
+
|**Password Rooms**| Room-level passwords enforced by Cloudflare Durable Objects |
18
+
|**Share Any Type**| Chat, code (monospace), notes (italic), or files of any size |
19
+
|**Retention Model**| Per-item: session, 5min, 1h, 1d, or forever |
20
+
|**Zero Backend DB**| IndexedDB on each peer for persistence - nothing stored on the server |
26
21
27
22
---
28
23
29
-
## Quick Start
24
+
## Quick Start
30
25
31
26
```bash
32
27
# 1. Install dependencies
@@ -40,69 +35,30 @@ npm run dev:worker
40
35
41
36
# 4. Open http://localhost:3000 in two browser windows
42
37
```
38
+
43
39
---
44
40
45
-
## Architecture in 30 Seconds
41
+
## Architecture
46
42
47
-
```
48
-
┌─────────────────┐
49
-
│ Cloudflare DO │ ← only relays ICE/SDP
50
-
│ (per room) │
51
-
└────────┬────────┘
52
-
│ signaling
53
-
┌──────────────┼──────────────┐
54
-
▼ ▼ ▼
55
-
┌────────┐ ┌────────┐ ┌────────┐
56
-
│ Peer A │◄──►│ Peer B │◄──►│ Peer C │ ← WebRTC mesh
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.
0 commit comments