Send files from one device to many in real-time.
See the codeSend files from one device to many, in real time — private, peer-to-peer, with no size limit.

For quickly testing the app locally — not meant for production. Use Option B instead.
deploy/docker-compose.yml.docker compose up -d
Open http://localhost on the machine running Docker.
deploy/docker-compose-ssl.yml and deploy/Caddyfile.Caddyfile and replace yourdomain.com (the first line) with your domain. Leave the rest of the file as it is.docker compose -f docker-compose-ssl.yml up -d
Open https://yourdomain.com.
Open these on your server's firewall:
| Port | Protocol | Purpose |
|---|---|---|
80 (HTTP) / 443 (HTTPS) | TCP | Web interface |
3478 | TCP + UDP | STUN/TURN, peer-to-peer connection setup |
50000–50100 | UDP | TURN relay range, used when a direct connection isn't possible |
The 50000–50100 UDP range carries relayed traffic for the minority of connections that can't go direct, typically a peer behind symmetric NAT or a firewall that blocks UDP.
HTTP port. In docker-compose.yml, change the first number of the filesync port mapping. The second is the container's internal port; leave it as 80:
ports:
- "8080:80" # serve on http://localhost:8080
HTTPS port. Keep Caddy on 443. For a non-standard external port, put your own reverse proxy in front, terminate TLS there, and forward to FileSync's internal HTTP port.
FileSync uses native WebRTC to transfer files directly between browsers, with no intermediate server in the data path. A WebSocket signaling server (served at /ws by the FileSync app itself) assists with connection setup only — relaying SDP offers/answers and ICE candidates between peers; once the peer-to-peer connection is established, file bytes flow directly between browsers and the server is no longer involved.
On the receiving side, the first save method the browser supports is used, in this order:
The first two require a secure context (HTTPS or localhost), so serving FileSync over HTTPS is recommended: it enables memory-safe transfers of any size.

Comic: xkcd #949 — "File Transfer" by Randall Munroe, licensed under CC BY-NC 2.5.
If you prefer the terminal, check out fsend — fast, private file sharing from your command line.
Released under the MIT License.
213 followers · starred Aug 2026
3,595 followers · starred Jul 2026
38 followers · starred Sep 2025
57 followers · starred Sep 2025
Send files from one device to many in real-time.
See the codeSend files from one device to many, in real time — private, peer-to-peer, with no size limit.

For quickly testing the app locally — not meant for production. Use Option B instead.
deploy/docker-compose.yml.docker compose up -d
Open http://localhost on the machine running Docker.
deploy/docker-compose-ssl.yml and deploy/Caddyfile.Caddyfile and replace yourdomain.com (the first line) with your domain. Leave the rest of the file as it is.docker compose -f docker-compose-ssl.yml up -d
Open https://yourdomain.com.
Open these on your server's firewall:
| Port | Protocol | Purpose |
|---|---|---|
80 (HTTP) / 443 (HTTPS) | TCP | Web interface |
3478 | TCP + UDP | STUN/TURN, peer-to-peer connection setup |
50000–50100 | UDP | TURN relay range, used when a direct connection isn't possible |
The 50000–50100 UDP range carries relayed traffic for the minority of connections that can't go direct, typically a peer behind symmetric NAT or a firewall that blocks UDP.
HTTP port. In docker-compose.yml, change the first number of the filesync port mapping. The second is the container's internal port; leave it as 80:
ports:
- "8080:80" # serve on http://localhost:8080
HTTPS port. Keep Caddy on 443. For a non-standard external port, put your own reverse proxy in front, terminate TLS there, and forward to FileSync's internal HTTP port.
FileSync uses native WebRTC to transfer files directly between browsers, with no intermediate server in the data path. A WebSocket signaling server (served at /ws by the FileSync app itself) assists with connection setup only — relaying SDP offers/answers and ICE candidates between peers; once the peer-to-peer connection is established, file bytes flow directly between browsers and the server is no longer involved.
On the receiving side, the first save method the browser supports is used, in this order:
The first two require a secure context (HTTPS or localhost), so serving FileSync over HTTPS is recommended: it enables memory-safe transfers of any size.

Comic: xkcd #949 — "File Transfer" by Randall Munroe, licensed under CC BY-NC 2.5.
If you prefer the terminal, check out fsend — fast, private file sharing from your command line.
Released under the MIT License.
213 followers · starred Aug 2026
3,595 followers · starred Jul 2026
38 followers · starred Sep 2025
57 followers · starred Sep 2025