How shivamyadav25/fast-transfer works
Kimo pairs users with a short code, negotiates WebRTC through a signaling-only service, then transfers files directly between devices. Its main workflow covers pairing, peer connection setup, chunked transfer, progress and integrity verification, and saving the received file; reconnect/resume and configurable relay support extend that path. A separate stored-transfer path encrypts files locally and stores ciphertext for later retrieval. The README documents desktop and mobile shells around the web app. Some subsystems are represented by their exact enclosing paths because their source was not sampled.
Main entry points: page.tsx Transfer interface · index.ts Signaling worker · peer.ts Peer connection · transfer.ts Chunk transfer engine
Components 25
Web experience
- Transfer interface
apps/web/app/page.tsx - Transfer status UI
apps/web/components - Native file saving
apps/web/lib/native/save.ts
Live transfer
- Signaling client
apps/web/lib/signaling/client.ts - Peer connection
apps/web/lib/webrtc/peer.ts - Parallel connections
apps/web/lib/webrtc/multi-peer.ts - ICE configuration
apps/web/lib/webrtc/ice-config.ts - Chunk transfer engine
apps/web/lib/webrtc/transfer.ts - Adaptive send window
apps/web/lib/webrtc/adaptive.ts - Integrity hashing
apps/web/lib/webrtc/hash-worker.ts - Connection benchmarks
apps/web/lib/webrtc/stats.ts - Shared wire protocol
packages/protocol/src/index.ts
Stored transfer
- Stored transfer client
apps/web/lib/store/storeclient.ts - Local encryption
apps/web/lib/store/storecrypto.ts
Signaling backend
- Signaling worker
apps/signaling/src/index.ts - Live room relay
apps/signaling/src/room.ts - Room state
apps/signaling/src/store.ts - Stored transfer state
apps/signaling/src - Ciphertext bucket
Native shells
- Desktop shell
apps/desktop/src-tauri/src/lib.rs - Mobile shell
apps/mobile/App.tsx
Other components
- Sender or receiver
- Cloudflare service
- Other browser or device
- Optional TURN relay
Connections 29
- Sender or receiver → Transfer interface: selects or receives
- Transfer interface → Signaling client: creates or joins room
- Signaling client → Signaling worker: HTTP and WebSocket
- Signaling worker → Live room relay: dispatches room requests
- Live room relay → Room state: reads and writes
- Live room relay → Other browser or device: relays offer and ICE
- Signaling worker → Shared wire protocol: uses message shapes
- Other browser or device → Signaling client: exchanges signaling
- Transfer interface → Peer connection: negotiates connection
- Transfer interface → Parallel connections: opens parallel peers
- Peer connection → Signaling client: sends and receives signaling
- Peer connection → ICE configuration: configures ICE
- Peer connection → Other browser or device: establishes WebRTC
- Peer connection → Optional TURN relay: may relay media
- Transfer interface → Chunk transfer engine: starts and resumes transfer
- Chunk transfer engine → Adaptive send window: adjusts send window
- Chunk transfer engine → Integrity hashing: hashes file data
- Chunk transfer engine → Other browser or device: sends chunks and control
- Transfer interface → Connection benchmarks: monitors connection
- Connection benchmarks → Transfer status UI: reports metrics
- Transfer interface → Transfer status UI: renders transfer state
- Transfer interface → Native file saving: saves received files
- Transfer interface → Stored transfer client: uploads or retrieves
- Stored transfer client → Local encryption: encrypts and decrypts
- Stored transfer client → Signaling worker: requests stored transfer
- Signaling worker → Stored transfer state: checks lifecycle and access
- Signaling worker → Ciphertext bucket: reads and writes ciphertext
- Desktop shell → Transfer interface: hosts web app
- Mobile shell → Transfer interface: hosts web app