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
**Direct, device-to-device file transfer — in the browser, no size limit, nothing stored on a server.**
7
+
**⚡ Direct, device-to-device file transfer — in the browser, no size limit, nothing stored on a server.**
8
8
9
9
Two devices pair with a 6-digit code. Once they're linked, the file streams straight from one browser to the other over WebRTC. No upload-then-download wait, no storage quota, no accounts.
10
10
@@ -18,7 +18,12 @@ Two devices pair with a 6-digit code. Once they're linked, the file streams stra
18
18
(file bytes, not the server)
19
19
```
20
20
21
-
## Why it's fast and reliable
21
+
<pfloat="left">
22
+
<imgsrc="assets/screenshot-pairing-code.png"alt="Pairing code shown on sending device"width="350">
@@ -27,7 +32,7 @@ Two devices pair with a 6-digit code. Once they're linked, the file streams stra
27
32
|**Backpressure-aware**| Files send in 64KB chunks and pause automatically when the connection's buffer fills, so nothing overwhelms either device. |
28
33
|**Works across networks**| Same WiFi uses a direct connection. Different networks (e.g. phone on mobile data, laptop on WiFi) fall back to a TURN relay when configured — see below. |
29
34
30
-
## Quick start
35
+
## 🚀 Quick start
31
36
32
37
```bash
33
38
npm install
@@ -36,7 +41,9 @@ npm start
36
41
37
42
Open `http://localhost:3000` — on two devices on the same network, or two tabs to try it solo.
38
43
39
-
## Deploying it for real use
44
+
<imgsrc="assets/screenshot-home.png"alt="FileBeam home screen with Send/Receive options"width="700">
45
+
46
+
## 🌍 Deploying it for real use
40
47
41
48
Any Node host works. **[Render](https://render.com)** has a genuine free tier and is the easiest starting point:
42
49
@@ -47,7 +54,7 @@ Any Node host works. **[Render](https://render.com)** has a genuine free tier an
47
54
48
55
> Free tier note: the service sleeps after 15 minutes idle and takes ~30–60s to wake on the next visit. Fine for occasional transfers; upgrade to a paid instance if you want it always warm.
49
56
50
-
## Making cross-network transfers reliable (TURN)
57
+
## 🔧 Making cross-network transfers reliable (TURN)
51
58
52
59
STUN (used by default) only helps two devices *discover* each other — it doesn't relay traffic. If both devices are on the **same network**, that's usually enough. If they're on **different networks**, a certain share of connections will be blocked by NAT/firewalls unless a **TURN server** is configured to relay the (still end-to-end encrypted) traffic.
53
60
@@ -66,7 +73,7 @@ TURN_CREDENTIAL=your-credential
66
73
67
74
Without TURN, FileBeam still works well on the same network and many cross-network pairs — it just can't guarantee a connection in every NAT scenario.
68
75
69
-
## Troubleshooting
76
+
## 🩺 Troubleshooting
70
77
71
78
**Stuck on "Connecting"** — signaling worked, but the direct WebRTC link never formed. Check, roughly in order of likelihood:
72
79
@@ -78,12 +85,12 @@ Without TURN, FileBeam still works well on the same network and many cross-netwo
78
85
79
86
For deeper digging: `chrome://webrtc-internals` shows the live ICE negotiation and exactly where it's failing.
80
87
81
-
## Notes
88
+
## 📝 Notes
82
89
83
90
- Pairing codes are single-use and tied to one session — closing the tab invalidates it.
84
91
- Browsers without the File System Access API (Firefox, Safari) buffer incoming files in memory instead of streaming to disk — fine for most files, but very large ones are limited by available RAM.
85
92
- No database, no file storage, no accounts — restarting the server just clears any pending pairing codes.
0 commit comments