Peer-to-peer file transfer in the browser. No servers. No uploads. No limits.
Drop a file, share the link, done. Files travel directly between devices over end-to-end encrypted WebRTC data channels β they never touch a server.
- π End-to-end encrypted β WebRTC data channels secured by DTLS-SRTP. No middleman ever sees the bytes.
- π« Zero server storage β files stream peer-to-peer; nothing is ever uploaded or stored.
- βΎοΈ No size limits β transfer up to 50 GB per file (browser-imposed cap).
- π± Cross-device β desktop β mobile β tablet, any modern browser.
- π Share via link or QR β room ID is encoded in the URL.
- βΈοΈ Cancellable transfers β kill an in-flight transfer with one click.
- π§Ή Clear finished β sweep completed/cancelled transfers from the list.
- π Retrowave UI β neon glassmorphism, animated grid, scanlines.
- π Self-healing connections β auto-reconnect, ghost-peer detection, presence reconciliation.
ββββββββββββ signaling (SDP/ICE) ββββββββββββ
β Device β ββββββββββββββββββββββββββββββββΊ β Device β
β A β via public Nostr relays β B β
ββββββ¬ββββββ βββββββ¬βββββ
β β
β π direct WebRTC data channel(E2E encrypted) β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
file bytes flow here
| Layer | Tech |
|---|---|
| Transport | WebRTC DataChannels (DTLS-SRTP encrypted) |
| Signaling | Trystero over public Nostr relays |
| NAT traversal | Public STUN (Google / Cloudflare) + OpenRelay TURN fallback |
| Discovery | Room ID encoded in URL (?room=...) + QR code |
| Chunking | 256 KB chunks streamed sequentially |
Nostr relays only carry the SDP/ICE handshake. Once peers connect, every byte travels directly between devices.
Mobile networks (CGNAT, captive portals, flaky carriers) eat WebRTC connections for breakfast. Fileo fights back:
- Auto-reconnect on
iceConnectionStatefailed/disconnected. - Liveness ping after a peer joins β ghost peers trigger a clean rejoin.
- Cross-device presence reconciliation fixes asymmetric peer lists.
- Aggressive first-attempt rejoin with backoff when no peers appear.
- Multiple Nostr relays β if one is blocked or down, others carry the handshake.
- TURN fallback for symmetric NAT / CGNAT (common on mobile carriers).
- React 18 + Vite 5 + TypeScript 5
- Tailwind CSS v3 + shadcn/ui
@trystero-p2p/nostrfor signaling- lucide-react icons, qrcode for QR generation
- Email β aisurf3r@gmail.com
- GitHub β github.com/aisurf3r/Fileo-Share Made with β€οΈ by Aisurf3r