Cloudflare R2
Cloudflare R2 is an S3-compatible object storage service that eliminates egress fees, making it cost-effective for high-volume data transfer. Developers use it as a drop-in replacement for AWS S3 with better pricing and seamless integration with Cloudflare's edge network and Workers ecosystem.
Overview
| Category | Storage |
| Ecosystem | cloudflare |
| Compliance | SOC2, GDPR |
| Self-Hostable | No |
| On-Prem | No |
| Best For | startup, growth, enterprise |
| Last Verified | 2026-02-13 |
Strengths & Weaknesses
Strengths:- cost
- performance
- dx
- Local development emulation limited โ Wrangler lacks full R2 bucket emulation for local workflows
- Wrangler Pages Dev integration gaps โ difficulty testing R2 operations in local development environments
- No native local bucket emulation without workarounds (feature request ongoing)
- Vitest compatibility issues with Wrangler workflows
When to Use
Best when:- High-volume data egress scenarios
- S3-compatible workloads requiring cost optimization
- Applications deployed on Cloudflare Workers or Pages
- Building with Cloudflare's ecosystem (Workers, Pages, KV)
- Need to eliminate data egress costs
- Need comprehensive local development simulation without workarounds
- Require advanced query capabilities on object metadata
- Building testing pipelines heavily dependent on Vitest and Wrangler
- Need robust on-premises deployment options
Known Issues (10)
- [critical] ๐ Feature Request: `wrangler pages dev --remote`
- [critical] ๐ Feature Request: Ability to emulate a public R2 bucket when developing locally with Wrangler 3
- [high] ๐ BUG: Vitest does not work with workflows
- [high] Do not deprecate wrangler's proxy feature, e.g. `wrangler pages dev -- vite` or keep at least the injection part with a new api such as `wrangler inject -- vite`
- [high] ๐ BUG: when trying to left join 2 tables that have same name columns - second column is not returned
- [high] ๐ BUG: d1 execution with comment including semicolon causes SQL code did not contain a statement
- [high] ๐ Feature Request: Allow to include secrets in wrangler's automatically generated type definitions
- [high] Multiple config files with getPlatformProxy to support Durable Objects RPC
- [medium] `override_existing_dns_record` flag ignored in `wrangler deploy`
- [medium] ๐ BUG: vitest-pool-workers: You need to consume the R2 body or tests fail