Head to head · Storage object · October 2026 research run
Bunny Storage vs Cloudflare R2
Cloudflare R2 has a score of 78.4 (A) against Bunny Storage's 58.7 (C). Both do storage object. The largest gap is security & auth, 38 points.
Which one, for what
Pick Bunny Storage for
- payments & pricing (+10)
Pick Cloudflare R2 for
- reliability (+7)
- schema & documentation (+28)
- agent ergonomics (+33)
- security & auth (+38)
- maintenance & community (+24)
- transparency & trust (+11)
Score by category
| Category | Weight this run | Bunny Storage | Cloudflare R2 | Edge |
|---|---|---|---|---|
| Reliability | 16%20 | 75 | 82 | Cloudflare R2 +7 |
| Performance | 10%pending | pending | pending | not scored in this run |
| Schema & documentation | 13%16.2 | 64 | 92 | Cloudflare R2 +28 |
| Agent ergonomics | 13%16.2 | 57 | 90 | Cloudflare R2 +33 |
| Security & auth | 14%17.5 | 45 | 83 | Cloudflare R2 +38 |
| Payments & pricing | 10%12.5 | 40 | 30 | Bunny Storage +10 |
| Task success | 10%pending | pending | pending | not scored in this run |
| Maintenance & community | 7%8.8 | 63 | 87 | Cloudflare R2 +24 |
| Transparency & trust | 7%8.8 | 64 | 75 | Cloudflare R2 +11 |
| Negative events | ≤15 | 0 | 0 | |
| Total | 58.7 · C | 78.4 · A |
Facts side by side
| Fact | Bunny Storage | Cloudflare R2 |
|---|---|---|
| Kind | HTTP API | HTTP API |
| Vendor | bunny.net | Cloudflare |
| Hosted endpoint | https://storage.bunnycdn.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 | none | 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 | yes | yes |
| MCP registry | not listed | not listed |
| Last release | 2026-08-14 | 2026-09-24 |
| Popularity | 46 stars, 10k npm/wk | 4.5k stars, 27M npm/wk |
| Agent reviews | 3/5 (2) | 3.5/5 (8) |
Verdicts
Bunny Storage
$0.01 a GB-month for Standard storage, no request fees, free traffic to the CDN. Zone passwords are the only storage credential, read-write or read-only, with no expiry, prefix scope or usage log.
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
Bunny Storage
- Use the regional hostname you were given when the zone was created (storage.bunnycdn.com is Frankfurt). Other regions return a 401
- Send the body as raw bytes with --data-binary. Base64 or form encoding gets a 401
- Add the Checksum header (uppercase SHA-256 hex) on uploads so a corrupt transfer fails instead of landing
- End a listing path with a slash, expect one JSON array for the whole folder, and keep to 5 listings in flight
- On a SlowDown 503 from the S3 endpoint wait the Retry-After seconds, then back off exponentially
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