Skip to main content
  1. Blog/

Cloudflare R2 Goes GA — The S3-Compatible Storage War Heats Up

·999 words·5 mins
Osmond van Hemert
Author
Osmond van Hemert
Cloud Operations - This article is part of a series.
Part : This Article

Cloudflare has made R2 object storage generally available, and this one deserves attention from anyone who’s ever grimaced at an AWS bill. R2 is S3-compatible object storage with a radical pricing twist: zero egress fees. In an industry where data transfer costs have become a significant line item — and a major source of vendor lock-in — Cloudflare is going straight for the jugular.

I’ve been testing R2 throughout the beta, and with the GA release landing during Cloudflare’s Birthday Week, it’s time to take a serious look at what this means for cloud architecture decisions.

The Egress Fee Problem
#

To understand why R2 matters, you need to understand the economics of cloud storage. AWS S3 charges $0.023 per GB per month for standard storage — that’s the part everyone focuses on during planning. But the egress fees — the cost to actually retrieve your data — are $0.09 per GB for the first 10TB, then slightly declining at scale.

For many workloads, egress costs dwarf storage costs. A CDN serving 100TB per month from S3 is paying around $2,300 in storage but $9,000 in egress. A data analytics pipeline that regularly pulls large datasets from S3 can accumulate surprising transfer bills. I’ve seen organizations where egress fees account for 40-60% of their total storage costs.

These fees also create a powerful lock-in mechanism. Moving your data to another provider means paying egress on every byte you transfer out. The larger your dataset, the more expensive it is to leave. It’s a clever business model, but it’s not one that serves customers well.

Cloudflare’s R2 eliminates egress fees entirely. Storage is priced at $0.015 per GB per month (cheaper than S3 Standard), and you pay only for operations (Class A at $4.50 per million, Class B at $0.36 per million). No egress. No transfer fees. No lock-in tax.

S3 Compatibility and Migration Path
#

R2 implements the S3 API, which means existing tools and libraries work with minimal changes. If your application uses the AWS SDK, you can point it at R2 by changing the endpoint URL and credentials. I’ve tested this with boto3, the AWS CLI (with --endpoint-url), and several backup tools — the compatibility is solid for the core operations.

import boto3

r2 = boto3.client(
    "s3",
    endpoint_url="https://<account_id>.r2.cloudflarestorage.com",
    aws_access_key_id="<r2_access_key>",
    aws_secret_access_key="<r2_secret_key>",
)

# Standard S3 operations work as expected
r2.put_object(Bucket="my-bucket", Key="data.json", Body=json.dumps(data))
r2.get_object(Bucket="my-bucket", Key="data.json")

That said, R2 doesn’t implement every S3 feature. Notable gaps at GA include:

  • No object versioning (in development)
  • No lifecycle policies (in development)
  • No server-side encryption with customer-managed keys
  • No S3 Select or Glacier-style tiered storage
  • Limited event notification support

For many use cases — static asset storage, backup destinations, data distribution, CDN origins — these gaps don’t matter. For complex data lake architectures that depend on versioning and lifecycle policies, S3 remains the more complete product.

Where R2 Makes Immediate Sense
#

Based on my testing and the pricing model, several use cases stand out:

CDN origin storage: If you’re already using Cloudflare’s CDN (and many of us are), R2 as your origin storage is a natural fit. Assets flow from R2 through Cloudflare’s network with zero egress cost. The integration with Workers for dynamic content generation is also compelling.

Backup and archive: The zero egress model is particularly attractive for backups, where you store data regularly but retrieve it rarely — and when you do retrieve it, you want to do so quickly and without surprise costs. I’ve already migrated several backup workflows from S3 to R2.

Multi-cloud data distribution: If you serve data to consumers across different cloud providers or on-premises environments, R2 eliminates the egress penalty that makes multi-cloud architectures expensive.

Developer and open-source projects: The free tier (10GB storage, 10 million Class B operations per month) is generous enough for small projects, and the absence of egress fees removes the fear of unexpected bills from traffic spikes.

The Competitive Landscape
#

R2 isn’t the only S3 alternative. Backblaze B2, Wasabi, and MinIO (for self-hosted) have been viable options for years. But Cloudflare brings something the others can’t easily match: a global edge network.

R2 storage is distributed across Cloudflare’s network, and when combined with Workers (their serverless compute platform), you get a compelling stack for building globally distributed applications. The vision is clearly to offer a complete cloud platform that competes not just on storage pricing but on the overall developer experience.

AWS isn’t standing still either. They’ve been gradually reducing data transfer costs and introducing initiatives like the AWS Free Tier for data transfer. But the fundamental pricing model — where egress is a profit centre — is deeply embedded in AWS’s business. It’s hard to see them matching R2’s zero-egress model without significant revenue impact.

Google Cloud’s move to waive egress fees for customers migrating away was a notable competitive response, but it’s a one-time migration benefit rather than an ongoing pricing model change.

My Take
#

Cloudflare R2 at GA is a solid product for specific use cases, not a universal S3 replacement. The feature gaps are real, and for complex storage requirements, S3’s maturity and ecosystem depth remain unmatched. But for the use cases where R2 fits — and there are many — the cost savings are substantial and the migration path is straightforward.

What I find most significant is the competitive pressure R2 puts on the broader cloud storage market. Even if you never use R2, its existence may lead to lower egress fees across all providers. Competition in cloud infrastructure pricing has been tepid for years, and Cloudflare is the most credible challenger to emerge in some time.

My recommendation: identify your highest-egress workloads, evaluate whether R2’s feature set is sufficient, and run the numbers. For many teams, this could be one of the easiest cost optimisations of the year. Start with a non-critical workload, validate the S3 compatibility against your specific usage patterns, and expand from there.

The cloud storage market just got more interesting, and that’s good for all of us.

Cloud Operations - This article is part of a series.
Part : This Article