BeamDrop started with a simple problem: sharing files between my own devices without handing them to a cloud provider. One afternoon project later, it had become a full-stack system: a Go HTTP server, an embedded React frontend, SQLite storage, JWT auth, WebSockets and an S3-compatible API, all shipping as a single binary. I wrote up how that happened in I Think I Accidentally Built a Full-Stack Framework.
What it does
- Upload, download, move, copy, rename and search files from a fast web UI
- Password protection plus shareable links with expiry
- S3-compatible API (buckets, objects, presigned URLs) so CI/CD and scripts can talk to it
- Real-time stats over WebSockets and Prometheus metrics for observability
- QR code in the terminal so your phone connects in seconds
Why it is built this way
No web framework: just Go’s net/http and ServeMux. No CGO: a pure-Go SQLite driver keeps cross-compilation (GOOS/GOARCH) trivial. No sidecars: the React build is baked into the binary with embed.FS, so deployment is one file. These are the same boring-reliability choices behind ekilie.cloud.
Run it
beamdrop -dir ~/Documents -p secretpassword
BeamDrop is open source at github.com/ekilie/beamdrop and there is a mobile client (BeamDrop Mobile) plus a SaaS control plane in the same repo.
