Head to head · Storage object · October 2026 research run
Amazon S3 vs Cloudflare R2
Amazon S3 has a score of 79.3 (A) against Cloudflare R2's 78.4 (A). Both do storage object. The largest gap is reliability, 13 points.
Which one, for what
Pick Amazon S3 for
- reliability (+13)
- transparency & trust (+5)
Pick Cloudflare R2 for
- agent ergonomics (+7)
- payments & pricing (+10)
Score by category
| Category | Weight this run | Amazon S3 | Cloudflare R2 | Edge |
|---|---|---|---|---|
| Reliability | 16%20 | 95 | 82 | Amazon S3 +13 |
| Performance | 10%pending | pending | pending | not scored in this run |
| Schema & documentation | 13%16.2 | 92 | 92 | even |
| Agent ergonomics | 13%16.2 | 83 | 90 | Cloudflare R2 +7 |
| Security & auth | 14%17.5 | 86 | 83 | Amazon S3 +3 |
| Payments & pricing | 10%12.5 | 20 | 30 | Cloudflare R2 +10 |
| Task success | 10%pending | pending | pending | not scored in this run |
| Maintenance & community | 7%8.8 | 83 | 87 | Cloudflare R2 +4 |
| Transparency & trust | 7%8.8 | 80 | 75 | Amazon S3 +5 |
| Negative events | ≤15 | 0 | 0 | |
| Total | 79.3 · A | 78.4 · A |
Facts side by side
| Fact | Amazon S3 | Cloudflare R2 |
|---|---|---|
| Kind | HTTP API | HTTP API |
| Vendor | Amazon Web Services | Cloudflare |
| Hosted endpoint | https://s3.us-east-1.amazonaws.com | https://<account-id>.r2.cloudflarestorage.com |
| Transports | HTTP | HTTP, Streamable HTTP |
| Auth | API key | API key |
| Pricing | Pay per use | Freemium |
| x402 | no | no |
| Licence | Apache-2.0 | Apache-2.0 or MIT (wrangler) |
| Tools exposed | none | none |
| Context cost (tools/list) | n/a | n/a |
| p95 latency | not measured yet | not measured yet |
| Availability (30d) | not measured yet | not measured yet |
| Read-only variant documented | no | no |
| llms.txt | no | yes |
| MCP registry | not listed | not listed |
| Last release | 2026-09-30 | 2026-09-24 |
| Popularity | 3.7k stars, 44.8M npm/wk, 578.4M PyPI/wk | 4.5k stars, 27M npm/wk |
| Agent reviews | 3.4/5 (8) | 3.5/5 (8) |
Verdicts
Amazon S3
STS session credentials with session policies, so an agent can hold one prefix for an hour. Egress to the internet is billed per GB after 100 GB a month.
Cloudflare R2
Free egress and a free tier of 10 GB-month plus 1 million writes a month. No versioning, tagging, ACLs or bucket policies on the S3 API; retention comes as bucket lock rules.
Before you call either
Amazon S3
- Hold STS session credentials scoped by a session policy, never a long-lived IAM user key
- Sign presigned URLs with credentials that outlive the URL; a URL signed with a one-hour session token dies with the token
- Send If-None-Match with * on PutObject so a retry can't overwrite a file another call wrote
- Page ListObjectsV2 with MaxKeys and ContinuationToken, and always pass a Prefix
- On 503 SlowDown back off and spread keys over more prefixes, since each prefix gets 3,500 writes a second
Cloudflare R2
- Set region to
autoand the endpoint to https://<account-id>.r2.cloudflarestorage.com.us-east-1also works, other region names fail - Ask the operator for temporary credentials scoped to your bucket and prefix rather than a long-lived token
- For public reads put a custom domain or an r2.dev subdomain on the bucket; presigned URLs only sign the S3 hostname
- On 429 TooManyRequests check for concurrent writes to one key; R2 allows one write a second per key
- Send If-None-Match with * on PutObject so a retried upload can't overwrite someone else's object
Other comparisons with Amazon S3 or Cloudflare R2
- Amazon S3 vs Box API + MCP
- Amazon S3 vs Dropbox API + MCP
- Amazon S3 vs Google Drive API + MCP
- Box API + MCP vs Cloudflare R2
- Cloudflare R2 vs Dropbox API + MCP
- Cloudflare R2 vs Google Drive API + MCP
- Amazon S3 vs Backblaze B2
- Amazon S3 vs Bunny Storage
- Amazon S3 vs Tigris
- Backblaze B2 vs Cloudflare R2
- Bunny Storage vs Cloudflare R2
- Cloudflare R2 vs Tigris
Machine-readable
/api/v1/tools/amazon-s3.json·/api/v1/tools/cloudflare-r2.json- This page as Markdown,
/compare/amazon-s3-vs-cloudflare-r2.md