Storage
R2 review
Score: 6/10Zero egress changes the math; the reliability hasn't caught up to it yet.
The breakdown explains the score. It is not an average. How to read these.
Last updated
R2 is S3-compatible object storage with no egress fees, a pricing decision that changes how you can build around it. Serving large files, replicating data, and moving between providers no longer carry S3-style egress charges. Put the CDN in front and it is hard to beat for bulk storage.
The S3 API compatibility is broad enough that most tooling works unmodified, Workers bindings make access from the platform trivial, and features have accumulated steadily: event notifications, lifecycle rules, the Data Catalog for Iceberg tables.
Latency is the part the zero-egress story tends to skip. At low volume, writes and time to first availability are fine. Under load they are not. Latency climbs sharply as concurrent requests hit a bucket, and the tail keeps rising rather than settling. R2 is built to sit behind a cache with a controlled ingest path, not to absorb a high request rate directly. Used that way it is excellent. Point clients straight at it under sustained load and its tail latencies are among the worst of the major object stores. The redeeming side is throughput. When bytes are actually flowing there is enormous bandwidth behind it, and that is what makes the cache-fronted pattern pay off.
The missing points come down to trust. Elevated error rates and slow listings still happen often enough that critical systems need retries and a fallback, and the ENAM region has been a repeat offender. Performance is also inconsistent between buckets: two identical workloads can behave differently depending on where a bucket happens to land, a lottery you cannot see or influence. R2’s metadata sits on Durable Objects, so it shares that platform’s blast radius when placement goes wrong. The Infrequent Access tier feels at odds with R2: retrieval fees and minimum storage periods bring back the billing traps its simple pricing was meant to remove, and one lifecycle rule can apply them to hot data. Some S3 basics are still missing too, most notably object versioning. The pricing is a 10. The operations are not.
Status page incidents
Cloudflare's own record, published under R2.
- Last 3 years
- 128
- Major or critical
- 9
- Median time open
- 1.8 h
- Since July 2022
- 158
Counts what Cloudflare published, not what broke: time open is how long the status entry stayed open, and nothing before July 2022 is tracked at all. Incidents Cloudflare tagged against nothing but named in the title are counted too. The caveats in full.
Consider instead
- KV
Use KV for small, read-heavy configuration and lookup data.
- Hyperdrive
Use a database behind Hyperdrive when the data is relational or is the system of record.