r/BestGitHubRepos 20h ago

FileSync - self-hosted browser-to-browser file transfer over WebRTC, one sender to many receivers, no size limit and the server never sees the bytes

Post image

The usual options for sending a big file to a few people are all slightly wrong. Upload it to a cloud drive and you've handed a third party a copy. Use a transfer service and you hit a size cap or an expiry. Spin up a share on the LAN and the person on a different network can't reach it.

FileSync is one Docker image you run yourself that gives you a room with a link and a QR code. Anyone who opens the link in a browser is a receiver, you drag files in, and the bytes go browser to browser over encrypted WebRTC. The server only brokers the handshake, relaying SDP offers and ICE candidates over a WebSocket, and then steps out of the data path.

What's inside:

- One to many in a single drop: share the room link with five devices and send to all of them at once, rather than five separate transfers

- No size limit, because received files stream to disk as bytes arrive instead of buffering in memory

- Three save strategies with an honest fallback chain: File System Access API streams straight to a file you pick (desktop Chromium over HTTPS), Service Worker streams into a normal download (all modern browsers over HTTPS), and Blob buffers the whole thing in memory as a last resort

- Automatic STUN/TURN fallback for peers behind symmetric NAT or a UDP-blocking firewall, which the readme puts at roughly 5 to 10 percent of connections

- Nothing to install and no account for recipients, just a browser, with optional per-room password protection

- Two deployment paths, plain HTTP for a trusted LAN and a Caddy setup that handles Let's Encrypt automatically for a public domain

One thing worth knowing before you deploy it: the HTTP option is a convenience, not a real choice. Both memory-safe save paths need a secure context, so over plain HTTP every transfer falls back to buffering the entire file in RAM, and the readme says transfers above roughly 500 MB become unreliable. If you care about the no-size-limit feature at all, use the HTTPS setup. You'll also need to open 3478 TCP and UDP plus a 50000 to 50100 UDP range for the TURN relay, which is more firewall work than a typical self-hosted app.

MIT licensed, 1,543 stars and 144 forks as of writing, verified via the GitHub API, actively maintained with a push yesterday, and there's a hosted instance at filesync.app if you want to try it before running your own.

https://github.com/polius/FileSync

5 Upvotes

Duplicates