AWS S3 vs Cloudflare R2
The original object storage vs the zero-egress upstart. R2 is S3-compatible and doesn't charge you to read your own data.
Cloudflare R2
Zero egress fees. That's it. That's the reason. If you're serving files to users, R2 saves you a fortune. S3 compatibility means migration is trivial. Unless you need S3's advanced features, R2 is the obvious choice.
The Egress Tax
AWS charges you to download your own data. S3 egress is $0.09/GB. Serve 1TB of images to users? That's $90/month just in bandwidth. Every month. Forever.
Cloudflare R2 charges $0/GB for egress. Zero. The same 1TB costs nothing to serve. This changes the economics of serving files entirely.
S3 Compatibility
R2 speaks the S3 API. Your existing S3 SDKs, tools, and libraries work with R2 by changing the endpoint URL. Migration is literally changing a config value.
Not everything is supported yet — no lifecycle rules as advanced as S3, no S3 Select, no Glacier equivalent. But for standard put/get/list operations, it's drop-in compatible.
When S3 Still Wins
S3 has 18 years of battle-testing, every compliance certification imaginable, and deep integration with the entire AWS ecosystem. Lambda triggers, EventBridge, Athena queries, Glacier archival.
If you're deep in AWS and need those integrations, S3 is the obvious choice. R2 is a storage bucket, not an ecosystem.
Quick Comparison
| Factor | AWS S3 | Cloudflare R2 |
|---|---|---|
| Egress Cost | $0.09/GB | $0/GB |
| Storage Cost | $0.023/GB/mo | $0.015/GB/mo |
| S3 API Compatible | Native | Yes |
| Ecosystem | Massive (AWS) | Workers integration |
| Compliance | Every cert exists | SOC 2, GDPR |
| Durability | 11 nines | 11 nines |
| Free Tier | 5GB/12mo | 10GB forever |
The Verdict
Use AWS S3 if: You're in AWS, need advanced features like S3 Select or Glacier, or have compliance requirements that mandate AWS.
Use Cloudflare R2 if: You serve files to users and don't want to pay egress fees. Most startups and indie projects should default to R2.
Consider: Backblaze B2 is another cheap option with Cloudflare bandwidth alliance (free egress through CF).
Zero egress fees. That's it. That's the reason. If you're serving files to users, R2 saves you a fortune. S3 compatibility means migration is trivial. Unless you need S3's advanced features, R2 is the obvious choice.
Related Comparisons
Disagree? nice@nicepick.dev