- Why "Free" Usually Means "Limited"
- How Chunked Uploads Actually Work
- LAN Streaming: The Fast Path Nobody Talks About
- The Cloudflare 5MB Wall and How to Get Around It
- Putting It Together: A Real Transfer from Phone to PC
- What Pro Relay Adds (and When You Don't Need It)
Why "Free" Usually Means "Limited"
Most free file transfer tools have a catch. Google Drive caps free storage at 15GB. WeTransfer's free tier maxes out at 2GB per transfer. iCloud gives you 5GB before it starts nagging. These services upload your file to someone else's server, store it there, then let the other device download it. That round trip through the cloud is the bottleneck, and it's also where the restrictions live.
I built OpenDrop because I got tired of emailing photos to myself just to get them from my iPhone 15 to my Windows PC. The core idea: if both devices are on the same network, why send files through a server in Virginia?
Direct device-to-device transfer skips the cloud entirely. Your file goes from phone to PC in one hop. No storage limits apply because there's no intermediate storage. The file lands directly in the receive folder on the destination machine. On macOS that's ~/Downloads/OpenDrop/Files, on Windows it's %LOCALAPPDATA%\OpenDrop\Files, and on Linux it respects $XDG_CONFIG_HOME (defaulting to ~/.config/opendrop/Files).
But "direct" still has to deal with the physical reality of moving bytes across a network. The method matters enormously.
How Chunked Uploads Actually Work
When you transfer a file over HTTP, you're sending a request body from client to server. For small files (a few megabytes), you can stuff the whole thing into a single POST request. The server reads it, writes it to disk, sends back a 200. Done.
Large files break this model. A 2GB video can't reliably go in one HTTP request. Network hiccups, timeouts, and memory constraints on both sides conspire against you. The solution is chunking: split the file into fixed-size pieces, send each piece as its own request, and reassemble them on the server side.
OpenDrop's free remote tier uses 5MB chunks. Each chunk is a separate HTTP POST through a Cloudflare tunnel. The server receives chunk 1, writes it to a temp file, receives chunk 2, appends it, and so on until the final chunk signals completion. If chunk 47 fails mid-transfer, only that 5MB piece needs to be retried, not the entire file.
Chunked transfers have no hard file size cap. You can send a 10GB file in 5MB chunks. It just takes longer because each chunk is a separate HTTP round-trip through the tunnel.
The tradeoff is speed. Each chunk involves a full HTTP request/response cycle: TCP handshake, TLS negotiation (handled by Cloudflare), request headers, payload, response. That per-chunk overhead adds up. In practice, free remote transfers hit roughly 8 Mbps (about 1 MB/s). For a 500MB file, that's around 8 minutes. Workable, but not fast.
Why 5MB specifically? Cloudflare's tunnel infrastructure enforces a request body size limit. Anything larger gets rejected without a particularly helpful error message. I spent more time than I'd like to admit figuring that one out. We settled on 5MB chunks because they're well under the ceiling and large enough to keep the chunk count reasonable.
LAN Streaming: The Fast Path Nobody Talks About
Chunking is a compromise for remote transfers. On a local network, you don't need it at all.
When your phone and PC are on the same WiFi, OpenDrop uses a completely different transfer path. The desktop app runs an HTTP server on port 8000. The mobile app discovers it via mDNS (the service type is _opendrop._tcp.local.) and connects directly. No tunnel, no relay, no cloud. Just your phone talking to your PC over your own router.
LAN transfers use streaming, the way file transfer should work. The phone opens a connection, starts writing the file data, and the server starts writing to disk as bytes arrive. No chunking, no reassembly, no per-piece overhead. The transfer speed is limited only by your WiFi hardware.
On my home network, I regularly move multi-gigabyte files between my iPhone 15 and my Windows desktop. WiFi 5 (802.11ac) gets roughly 100-300 MB/s depending on signal strength and interference, though real-world numbers depend heavily on your specific router and environment. The point is: LAN streaming is an order of magnitude faster than chunked remote transfers.
Every user gets LAN streaming for free. No account required, no Pro upgrade needed. If both devices are on the same network, you get the fast path automatically. OpenDrop detects the connection type and picks the right transfer mode without you doing anything.
The Cloudflare 5MB Wall and How to Get Around It
Remote transfers (different networks) are where things get interesting. Your phone on cellular in Greenville, SC, your PC on home WiFi. They can't discover each other via mDNS because they're not on the same broadcast domain.
OpenDrop solves this with Cloudflare's quick tunnel service (trycloudflare.com). The desktop app creates a temporary tunnel that gives it a public URL. The mobile app connects through that URL, and Cloudflare routes traffic between them. TLS encryption is handled by Cloudflare, so the data is protected in transit even though the local server uses plain HTTP.
The limitation is Cloudflare's 5MB request body cap. Every transfer through the tunnel gets chunked, with the per-chunk overhead described earlier. For someone sending a few photos or a document, it works fine. For someone moving 4GB of raw video footage, 8 Mbps feels slow.
Three options exist for people who need faster remote transfers:
- Wait it out. Chunked transfers are slow but reliable. A 4GB file at 8 Mbps takes roughly 70 minutes. Start it before lunch.
- Get on the same network. If you can connect both devices to the same WiFi (even a phone hotspot works), you bypass the tunnel entirely and get streaming speed.
- Use OpenDrop Pro's relay. Pro users get access to a Fly.io-based relay that uses WebSocket with binary frames. True streaming, no chunking, 30-50+ Mbps. That same 4GB file finishes in about 10-15 minutes.
Option 2 is worth knowing about. If I'm at my desk and need to pull files from my Redbeat D5 (my budget Android test phone), I just make sure both are on my home WiFi. The transfer mode switches automatically from tunnel to LAN.
Putting It Together: A Real Transfer from Phone to PC
Here's what actually happens when you send a 1.5GB video from an iPhone to a Windows PC using OpenDrop on the same network.
The desktop app starts its HTTP server on 0.0.0.0:8000. It registers the mDNS service (_opendrop._tcp.local.) so other devices can find it. The iPhone app scans for that service type using Bonjour (Apple's mDNS implementation) and finds the PC. You select the video file, tap send.
The app opens an HTTP connection to the PC's local IP on port 8000. Each request is signed with HMAC-SHA256 using a shared secret, with a 30-second timestamp window to prevent replay attacks. The file streams as a single HTTP request body. The server writes incoming bytes to %LOCALAPPDATA%\OpenDrop\Files as they arrive.
No chunk boundaries, no reassembly step, no cloud round-trip. The file appears on the PC as it's being received. Total time for 1.5GB over WiFi 5 varies by hardware but typically finishes in well under a minute.
Now consider the same transfer with both devices on different networks. The tunnel kicks in. That 1.5GB file gets split into roughly 307 chunks of 5MB each (plus a smaller final chunk). Each chunk goes phone → Cloudflare → PC. At 8 Mbps, it takes around 25 minutes. Still free, still no file size cap, just slower.
What Pro Relay Adds (and When You Don't Need It)
OpenDrop Pro replaces the Cloudflare tunnel with a Fly.io relay server. Instead of chunked HTTP, it opens a WebSocket connection and streams binary frames directly. The relay acts as a pass-through: bytes flow from phone to relay to PC with minimal buffering.
The speed difference is significant. Pro relay typically runs at 30-50+ Mbps (though this varies by your internet connection and the relay server's location). That 4-6x improvement over free remote comes from eliminating per-chunk overhead and using binary frames instead of base64-encoded JSON payloads. We discovered that base64 encoding added 33% overhead on top of the already-chunked data. Binary WebSocket frames solved both problems at once.
You don't need Pro if your devices are usually on the same network. LAN streaming is already the fastest option, and every user gets it. Pro makes sense if you frequently transfer large files between locations, like pulling footage off your phone while traveling to your home workstation.
For most people, the free tier handles daily file transfers without issues. Share a photo album, move a presentation, send a batch of documents. Chunked remote transfers aren't fast, but they're free, reliable, and have no hard file size ceiling. LAN transfers are fast and free. That combination covers the majority of file transfer needs without paying for anything.
OpenDrop is available on Windows, macOS, Linux, iOS, and Android. Download it, open it on two devices, and send something. On the same network, the transfer starts immediately.
Send Files Between Any Devices, Any Size, No Cloud Required
OpenDrop transfers files directly between your phone and PC over WiFi. No storage limits, no cloud uploads, no account needed for LAN transfers.
Download OpenDrop Free