Cloudflare R2
S3-compatible object storage from Cloudflare that charges nothing for data going out.
- What it is
- Object storage
- Type
- Commercial product
- Made by
- Cloudflare, Inc.
- License
- Proprietary
- Facts checked
- 5 October 2026
What it is
R2 is object storage that answers the S3 API at an account endpoint, https://<ACCOUNT_ID>.r2.cloudflarestorage.com, with the region set to auto. Existing S3 SDKs and tools work after changing the endpoint and keys. Cloudflare Workers can also read and write buckets directly through a binding, without signing requests.
What sets it apart is billing. Reading data out of R2 costs nothing in egress. You pay for storage ($0.015 per GB-month in the Standard class) and for operations ($4.50 per million writes, $0.36 per million reads). That makes it popular for public downloads, media and datasets read from other clouds. An Infrequent Access class costs $0.01 per GB-month but adds a retrieval fee and a 30-day minimum. Cloudflare’s Basin Catalog, formerly R2 Data Catalog, turns a bucket into a managed Apache Iceberg REST catalog; it became generally available on 1 October 2026.
Why teams pick it
- No egress fees, so serving or copying data out is not billed per GB
- S3 API compatibility: point existing SDKs and tools at a new endpoint
- Built-in bindings for Cloudflare Workers, plus public buckets on custom domains
- Free tier of 10 GB-month storage, 1 million writes and 10 million reads each month
Watch out for
- Only part of the S3 API: no object versioning, bucket policies, object tagging or ACLs
- Each key can be written about once per second; faster writes get HTTP 429
- Far fewer storage classes and lifecycle options than S3, and no archive tier
- Infrequent Access charges a retrieval fee and bills at least 30 days
Alternatives
What all object storage have in common →
Amazon S3AWSAWS’s object storage, and the de facto API most object stores copy.Apache OpenDALOpen sourceA Rust library, with bindings for Python, Java, Node.js, Go and more, that gives one API (read, write, stat, list, delete) over 50-plus storage backends: S3 and other object stores, local and HDFS file systems, Google Drive and Dropbox, and key-value stores.
Apache OzoneOpen sourceA Hadoop-born object store that serves the same buckets over S3 and as a Hadoop file system.
SeaweedFSOpen sourceA distributed blob store with an S3 gateway and a file system layer, built to store and serve billions of small files.
TigrisCommercialGlobally distributed S3-compatible object storage that moves data to where it’s read, with no egress fees.
Versity S3 GatewayOpen sourceA stateless S3 server that exposes an existing file system, or another object store, through the S3 API.How it fits with other technologies
What Cloudflare R2 uses
What uses Cloudflare R2
- Cloudflare Workersreads and writes objects inCloudflare R2
- Wranglercreates buckets and uploads objects toCloudflare R2
- Cloudflare Containerscan mount buckets with FUSE fromCloudflare R2
- Cloudflare Sandbox SDKcan mount buckets and back up files toCloudflare R2
- celldcan keep all fleet state in a bucket onCloudflare R2
- Cloudflareserves and caches files fromCloudflare R2
- Cloudflare Queuesreceives bucket event notifications fromCloudflare R2
- Cloudflare K2stores its log as segment files inCloudflare R2
- Arroyowrites Parquet files and checkpoints toCloudflare R2
- Cloudflare Basin Pipelineswrites JSON and Parquet files toCloudflare R2
- Apache OpenDALuses its S3 service to reachCloudflare R2
- Vectorizekeeps its index files inCloudflare R2
- Cloudflare Basin Catalogis built into buckets onCloudflare R2
- Lakekeepervends temporary credentials forCloudflare R2
- Cloudflare Basin SQLreads Parquet row groups by byte range fromCloudflare R2
- Spiralkeeps data in your own buckets onCloudflare R2
Create a bucket with Wrangler, then use the aws CLI against R2 · bash
npx wrangler r2 bucket create acme-media
# any S3 tool works against the account endpoint; the region is "auto"
export R2="https://${ACCOUNT_ID}.r2.cloudflarestorage.com"
aws s3 cp video.mp4 s3://acme-media/videos/video.mp4 --endpoint-url "$R2" --region auto
aws s3 ls s3://acme-media/videos/ --endpoint-url "$R2" --region auto
aws s3 presign s3://acme-media/videos/video.mp4 \
--endpoint-url "$R2" --region auto --expires-in 3600See it in a real stack
No architecture uses Cloudflare R2 yet. Drop it into the playground and wire it up yourself.Open playground →Where it came from2021–2026
By 2021 egress, the per-GB fee for data leaving a cloud, was often the largest line on an object storage bill. In July 2021 Cloudflare’s Matthew Prince and Nitin Rao published “AWS’s Egregious Egress”, arguing that wholesale bandwidth prices had fallen 93% over a decade while AWS’s egress fees had fallen only 25%, and that the fees helped lock customers in.
Two months later, on 28 September 2021, Cloudflare announced R2: object storage with full S3 API compatibility and no egress fees, building on its Bandwidth Alliance commitment, at $0.015 per GB-month. Greg McKeon’s announcement called egress fees “just a tax developers have grown accustomed to paying”. R2 entered open beta in May 2022 and became generally available on 21 September 2022, by which point more than 12,000 developers had joined the beta and Cloudflare Images was running on it in production.
The pitch is multi-cloud: keep one copy of the data in R2 and read it from any cloud, or serve it to the public, without paying per GB. Cloudflare has since built analytics on top, starting with a managed Apache Iceberg catalog inside buckets, now called Basin Catalog.
Why it’s built this way
- No egress fees
- Cloudflare argued egress was priced far above what bandwidth really costs. R2 bills for storage and operations instead ($4.50 per million writes, $0.36 per million reads), so reading data out costs nothing per GB.
- The S3 API instead of a new one
- Existing SDKs and tools work as built, and customers can start serving objects from R2 while they are still migrating them from another cloud.
- Part of the Workers platform
- Buckets bind directly to Cloudflare Workers, so code running on Cloudflare’s network can read and write objects without signing requests.
Timeline
- 2021
Cloudflare attacks AWS egress pricing in July and announces R2 on 28 September
- 2022
Open beta in May; generally available on 21 September
- 2025
R2 Data Catalog: a managed Iceberg catalog in a bucket, in public beta (April)
- 2026
The catalog, renamed Basin Catalog, becomes generally available on 1 October
- Cloudflare blog: AWS’s Egregious Egress (July 2021)
- Cloudflare blog: Announcing Cloudflare R2 Storage (September 2021)
- Cloudflare blog: A New Hope for Object Storage, R2 enters open beta (May 2022)
- Cloudflare blog: R2 is generally available (September 2022)
- Cloudflare blog: R2 Data Catalog public beta (April 2025)
- Cloudflare changelog: Cloudflare Basin is now generally available (1 October 2026)
Sources10 · facts checked 5 October 2026
- R2 docs: S3 API compatibility (endpoint, `auto` region, unsupported operations)
- R2 docs: Pricing
- R2 docs: Storage classes
- R2 docs: Limits
- R2 docs: Use R2 from Workers (bindings)
- R2 docs: Public buckets and custom domains
- R2 docs: aws CLI example
- Wrangler docs: R2 commands
- Cloudflare Basin docs (Basin Catalog, formerly R2 Data Catalog)
- Cloudflare changelog: Cloudflare Basin is now generally available (1 October 2026)