R2 resets everything.
It started simple: build a chat app, handle media uploads, logs, backups. Object storage — that S3-compatible backbone — should just work. But six providers later, I’m unpacking the architectural traps that snag indie devs like me.
S3 API: The Great Equalizer
Everyone apes it now. Buckets, keys, RESTful HTTP. Swap Wasabi for MinIO? Tweak endpoint, credentials — done. Portability’s the hook, but here’s the why: AWS locked in a standard two decades back, forcing rivals to play along. My journey? A stress test of that promise.
AWS S3. Obvious first stop. Rock-solid, everywhere. Worked fine — until invoices loomed. You’re paying premium for scale you don’t need yet.
Dropped it fast.
Why Backblaze B2 Promised Egress Freedom — And Failed
Egress-free sounds dreamy. No bandwidth gouge on downloads. But U.S.-only data centers? My users scatter globally; latency spiked for real-time chat. Backups might tolerate it later — active media? No chance.
Tigris on Fly.io tempted next. Global edge, low-latency S3. Smart fix. Except per-request fees explode on chat’s API barrage. Scaled wrong for my churn.
Self-hosting MinIO? Open-source purity. Deployed it in my cluster — felt empowering. Until HA nightmares, compute bills, ops drain. Product starved; storage hogged my week.
Wasabi. Egress-free again, punchy perf. Stuck there awhile. Public buckets? Nope — no native perms. Hack: backend proxies with pre-signed URLs. Fine for private, clunky for profile pics.
Worse: 1TB minimum. My 10GB payload? Still $8/month. Brutal for solos.
But that Cloudflare cache hack — gold if you’re trapped.
CF-Cache-Status: HIT — served from Cloudflare’s edge, not my backend Age: 774 — seconds it’s been cached at the edge Cache-Control: max-age=31536000 — browser caches it for 1 year too
Route /api/v1/media/* through backend to Wasabi, slap Cloudflare rules: edge TTL 1 year, ignore backend headers. Boom — zero backend hits post-cache, global low-latency, no Wasabi bandwidth burn. Works anywhere sans public buckets.
Still bailed on Wasabi’s floor.
Is Cloudflare R2 the Indie Dev’s Secret Weapon?
10GB free tier. My whole stack fits. Zero egress, baked-in CDN — nukes the proxy dance. Migrated; now pay zilch.
Here’s my twist — unmentioned in the raw tale: this echoes the ’90s browser wars. Netscape commoditized web clients; R2 commoditizes storage. CDNs aren’t add-ons anymore — they’re swallowing object stores whole. Edge compute shifts architecture from cold blobs to hot, distributed delivery. AWS? Still king for enterprises. But for us? R2 flips the script, betting free hooks viral growth.
Backups eyed for B2 later — cheap bulk, egress-free, latency irrelevant there.
Current stack: R2 owns active data. Lean, mean, free.
Why Does S3 Portability Still Matter for Chat Apps?
Chat’s ruthless: uploads spike, logs balloon, media streams. Latency kills UX; costs kill margins. S3 standard lets you pivot — but pick wrong, and you’re rebuilding workarounds.
Look, providers spin ‘egress-free’ like it’s salvation. At <1TB? Irrelevant — minimums rule. R2’s free envelope exposes the hype. Devs, test your actual load first.
And that MinIO urge? Noble, but infrastructure’s a vampire. Unless you’re all-in on k8s ops, outsource.
One prediction: as R2 scales, expect copycats. Free tiers erode moats; storage wars go infinite.
Bigger picture — object storage’s evolving. Not just dumb buckets. Edge integration (R2’s ace) marries storage to delivery, slashing global apps’ latency tax. Chat apps thrive here; think video calls, AR filters next.
Wasabi’s trap? Public access void forces app-layer hacks, bloating your backend. R2’s native CDN? Architectural elegance — files hot at edge, no proxy cruft.
Tigris nailed geo, botched requests. Lesson: profile your workload. Chat? Heavy GETs, fewer PUTs — favor flat storage over per-op nickel-and-dime.
Self-managing? Only if storage’s your product. Else, it’s distraction tax.
🧬 Related Insights
- Read more: Tailwind CSS v4’s 10x Speed Boost vs Panda CSS’s Type Safety: 2026’s Frontend Styling War
- Read more: 62% of Enterprises Ditch ChatGPT for Agents That Actually Do Work
Frequently Asked Questions
What’s the best free object storage for small apps?
R2’s 10GB tier crushes it — zero egress, global CDN included. Fits chat media, logs under radar.
Does Cloudflare R2 have hidden limits?
Free: 10GB storage, 10M Class A ops, 100M Class B monthly. Egress? Zilch to anywhere. Scales paid smoothly.
Why avoid AWS S3 for indie projects?
Premium pricing bites early. Fine for big iron; overkill when R2 does it free.