Why I Built WARP: Stop Routing Local Files Through the Cloud
We've all been there. You're sitting next to a friend or colleague, hacking away on a project, and you need to send them a file. Maybe it's a screenshot, a 50MB log file, or a binary.
What do we do? We open WhatsApp, we send it on Discord, or we email it.
Think about the absurdity of that for a second. I am taking data from my machine, encrypting it, sending it to a data center thousands of miles away (maybe in Virginia or Dublin), just so it can be routed back to a device that is two feet away from me.
It’s inefficient. It’s dependent on external internet bandwidth. And frankly, for a developer, it feels wrong.
The Problem with "Just WhatsApp It"
- Compression: Try sending a high-res design asset or a raw video on a messaging app. It gets crushed.
- Internet Dependency: If the internet goes down, or if the Wi-Fi is spotty, you can't talk to the computer next to you.
- Privacy: Why should a third-party server see a file that is strictly between me and my roommate?
- The "Message to Self" Hack: We all have that lonely group chat with just ourselves in it for file transfer. It's a workaround, not a solution.
The Solution: Reclaiming the LAN
Local Area Networks (LANs) were designed exactly for this. High speed, low latency, direct connection. I wanted a tool that felt as simple as handing someone a piece of paper, but digital.
I didn't want to set up an FTP server. I didn't want to configure Windows implementation of SMB. I wanted a simple binary I could run that just works.
Enter WARP
I decided to build WARP, a lightweight P2P file transfer tool written in Go.
The goal was simple:
- Zero Configuration: No typing IP addresses.
- Raw Speed: Maximize the local network bandwidth.
- Cross-Platform: Run it on anything.
How It Works
Under the hood, WARP does the heavy lifting so you don't have to:
- Auto-Discovery: Instead of asking "What's your IP?", WARP scans the local subnet (calculating CIDR blocks and firing concurrent ICMP pings) to find other active devices running the tool.
- Custom Protocol: I replaced overhead-heavy HTTP with a custom protocol over raw TCP sockets. It sends a fixed header (metadata) followed immediately by the buffered byte stream of the file.
- Concurrency: Using Go's Goroutines, it handles discovery and multiple transfers in parallel without breaking a sweat.
The Result
Now, when I'm working with friends, we don't depend on the cloud for local tasks. We just fire up the terminal.
# Server
./warp -file ./project-build.zip
# Client (Friend's laptop)
./warpThe file flies across the room instantly. No servers, no compression, no middleman. Just pure, peer-to-peer data transfer.