AirDrop is Apple-only. Quick Share is Android/Windows-only. If you're on iPhone and your friend's on Android, the standard move is still "email it to yourself." That gap annoyed me enough to build something for it.
QRDrop: two browsers connect over an encrypted WebRTC data channel and stream the file directly, peer to peer. My server only ever sees signaling messages for setting up the connection — never the file bytes.
A few implementation details I think this sub might find interesting:
Resume is receiver-authoritative. Instead of the sender tracking progress, the receiver tells the sender where it left off on every (re)connect. That means a fresh connection and a resumed connection run through the exact same code path — there's no separate "resume logic" to maintain and let drift out of sync with the main path. If the connection drops during file 8 of 10, only file 8 rewinds.
PIN protection gates the manifest, not just the transfer. If you set a PIN, a locked session leaks nothing pre-auth — not filenames, not sizes, not even the sender's device type. I also capped it at 5 digits with a hard attempt limit instead of 6 digits with unlimited attempts, since the attempt limit is what actually matters for a PIN this short — 6 digits unlimited is trivially brute-forceable, 5 digits with a limit isn't.
The "peer-to-peer" label is read off the actual ICE candidate pair, not just assumed. If the connection actually gets relayed through TURN, the UI says so instead of claiming direct P2P.
Some numbers if useful:
~11 MB/s peak throughput (loopback test)
64 MB transfer, sha256-verified after deliberately killing the connection at 5% to test resume
134 kB initial bundle size
152 automated tests, including real-Chrome WebRTC transfers running in CI
Runs on $0/month (Vercel Hobby + Render free tier, including the TURN relay fallback)
Works best when both devices are on the same LAN or one's tethered to the other's hotspot — there's a TURN relay fallback for when direct connection isn't possible, but it's running on a free tier so don't expect great throughput from it.
Live: https://qrdrop-seven.vercel.app
Code: https://github.com/neerav34/qrdrop
Full Write-up: https://medium.com/@neeravjha444/qrdrop
Open to feedback, especially from anyone who's built WebRTC data channels at scale — curious if there are connection-reliability edge cases I haven't hit yet.




Top comments (0)