P2P file sharing via WebRTC DataChannels. No cloud, no accounts.
┌─────────────┐ ┌─────────────┐
│ Device A │ │ Device B │
│ (Sender) │ │ (Receiver) │
└──────┬──────┘ └──────┬──────┘
│ │
│ 1. WS: session-create │
├──────────────────────────────────┤
│ │
│ 2. WS: session-join │
│◄─────────────────────────────────┤
│ │
│ 3. WS: SDP offer/answer │
│◄─────────────────────────────────┤
│ 4. WS: ICE candidates │
│◄─────────────────────────────────┤
│ │
│ 5. WebRTC P2P established │
│◄═════════════════════════════════►│
│ │
│ 6. DataChannel: file chunks │
│◄═════════════════════════════════►│
│ (DTLS encrypted, SCTP) │
│ │
┌──────┴──────┐ ┌──────┴──────┐
│ Signaling │ │ Signaling │
│ Server │ │ Server │
│ (WebSocket)│ │ (WebSocket)│
└─────────────┘ └─────────────┘
│ │
└────────── SDP/ICE only ───────────┘
(no file data, ephemeral sessions)
Flow:
- Sender creates session → Signaling server generates session ID
- Receiver joins via session ID → Signaling server links peers
- SDP offer/answer exchange → WebRTC negotiation
- ICE candidates exchange → NAT traversal
- P2P connection established → Direct WebRTC DataChannel
- File chunks stream → DTLS encrypted, ordered delivery
- React 19 + TypeScript + Vite
- Node.js + WebSocket (ws)
- WebRTC DataChannels
- Tailwind + shadcn/ui
- Chunk Size: 16-64 KB (adaptive)
- Session: 12-char URL-safe ID, 30min timeout
- Data Channel: Ordered, no retransmission
- STUN: Google's public servers
- Speed: ~50-100 MB/s (LAN, <10MB), ~20-60 MB/s (LAN, >100MB)
- Bundle: 826 KB (254 KB gzipped)
- Multi-Peer Support: Send files to multiple peers simultaneously in the same session
- Select multiple devices at once
- Parallel file transfers with individual progress tracking
- Aggregate transfer statistics
- See MULTI_PEER_PLAN.md for detailed architecture
- Multiple Data Channel Support: Use multiple data channels per peer for improved throughput and parallel transfers
- Resumable Transfers: Resume interrupted file transfers
- File Preview: Preview images, videos, and documents before downloading
- Folder Structure Preservation: Better folder transfer with nested directory support
- Transfer Speed Optimization: Adaptive chunk sizing based on network conditions
- Transfer Queue: Queue multiple file transfers
- Bandwidth Throttling: Control upload/download speed limits
MIT