Object storage was the boring infrastructure decision for years. You stuck files on AWS S3, paid the egress bill, and went back to building features. That stopped being true around 2023, and in 2026 the gap between providers is wide enough that picking the wrong one can quietly drain $400 a month off a small SaaS for no real benefit. After running storage workloads across all four of these providers for client projects shipped through wardigi.com β a Photography Studio Manager that stores ~80GB of session photos per active client, an E-Commerce Marketplace that serves product images through a CDN, and the daily import pipelines for our seven aggregator sites β I have strong opinions about which one belongs where.
This is the comparison I wish existed when I migrated our Photography Studio Manager off S3 in late 2025 and saved a client roughly $312 a month on a workload that was 90% downloads.
The Four Contenders at a Glance
Pricing as of May 2026 (per GB/month for storage, per GB for egress where applicable):
| Provider | Storage | Egress | Free Tier | Min Retention |
|---|---|---|---|---|
| Cloudflare R2 | $0.015 | $0.00 | 10 GB + 10M reads/mo | None |
| Backblaze B2 | $0.006 | $0.01 (3x storage free) | 10 GB | None |
| Wasabi | $0.0049 | $0.00 (1:1 ratio cap) | None | 90 days |
| AWS S3 Standard | $0.023 | $0.09 | 5 GB (12 months) | None |
That table looks tidy until you do the math on a real workload, which is where things get interesting.
Real Workload: Photography Studio Manager Migration
Here is the actual usage pattern from one of our wedding photography clients running on Photography Studio Manager β a Laravel + Vue platform we built where photographers upload session galleries and clients download high-resolution images.
- Stored: 1.2 TB of JPEGs and RAW files (3-month rolling window before archive)
- Monthly egress: ~3.5 TB (clients download originals, photographers re-pull for edits)
- Monthly Class A operations: ~80,000 (uploads)
- Monthly Class B operations: ~2.4 million (downloads, listings)
I priced this exact workload across all four providers in February 2026:
| Provider | Storage | Egress | Operations | Total / month |
|---|---|---|---|---|
| Cloudflare R2 | $18.00 | $0.00 | ~$0.86 | $18.86 |
| Backblaze B2 | $7.20 | $0.00* | ~$0.40 | $7.60 |
| Wasabi | $5.88 | $0.00 | $0 | $5.88 |
| AWS S3 | $27.60 | $322.56 | ~$2.20 | $352.36 |
* B2 egress is free up to 3x your storage volume; this workload (3.5 TB egress vs 1.2 TB stored, ratio 2.9x) sits just under the free cap.
S3 lost on egress alone. The catch with Wasabi is the 90-day minimum retention β every file you upload, you pay for 90 days even if you delete it on day 2. Photography sessions stay live for 90 days then archive, so this fits perfectly. For a workload with high churn (CI artifacts, ephemeral uploads), Wasabi math gets ugly fast.
Cloudflare R2: The Egress-Killer
R2 is what I reach for first now, and not because of the price. The free tier is generous (10 GB + 10 million Class B reads + 1 million Class A writes monthly), but the actual draw is the zero-egress promise applied to every byte, regardless of destination. No "bandwidth alliance" partner requirement, no tier-based caps, no calls to support to negotiate a discount. You ship bytes; you do not pay.
Where R2 wins:
- Public CDN-backed assets. When I plugged the E-Commerce Marketplace product images into R2 with a custom Cloudflare domain, the read path became R2 β Cloudflare CDN β user, and the per-image cost was effectively storage only. We previously routed the same images through S3 + CloudFront and the egress bill was 22x higher.
- Variable-traffic workloads. ContentForge AI Studio (one of our internal tools) has spiky generation outputs β sometimes 30 GB egress in a day, sometimes 200 MB. With R2, I do not have to forecast traffic.
- Backups paired with Workers. R2 + a Cloudflare Worker for signed URLs is the cleanest backup target I have set up.
Where R2 loses:
- No native object lock or WORM. If you need immutable backups for compliance (HIPAA, FINRA-style retention), R2 is out. Cloudflare added basic versioning in 2024 but the immutability story is still weak.
- Class A operations are pricey at scale. $4.50 per million writes adds up quickly on workloads with lots of small files.
- Region selection is opaque. R2 chooses the storage region for you. For most use cases this is fine β but if you need to legally pin data to a specific country, you cannot.
Backblaze B2: The Pragmatic Default
B2 has been my "boring choice" recommendation for client projects that need straightforward, durable storage with no surprises. The pricing is genuinely cheap, the API is properly S3-compatible (so you can swap an existing AWS SDK call by changing the endpoint), and the free 3x egress allowance via the Bandwidth Alliance covers most non-CDN use cases.
I host the daily database backups for the Hotel Management Suite (a Laravel application running on Hostinger VPS for a 4-property hotel chain) on B2. Stored: ~28 GB of compressed dumps. Egress: ~5 GB/month (only when restoring or auditing). Total cost: $0.18/month. The same setup on S3 would be roughly $0.84/month β small in absolute terms, but B2 is 4.7x cheaper for archival workloads where data flows in and stays put.
B2's weak spots:
- Single-region storage. You pick US-West, US-East, or EU-Central and that is it. No multi-region replication unless you build it yourself.
- Cold start latency. First-byte latency from B2 has felt 30-50ms higher than R2 in my measurements, which matters for user-facing reads but is irrelevant for backups.
- The 3x egress allowance is real but easy to bust. If your egress-to-storage ratio creeps above 3:1, you start paying $0.01/GB which is still cheaper than S3 but not free.
Wasabi: Cheapest Per-GB, with a Catch
Wasabi is the lowest sticker price on this list at $0.0049/GB/month, and they advertise zero egress fees. Both claims are true; both come with conditions that bite if you do not read the contract.
The 90-day minimum retention is the headline issue. If you upload a 10 GB file and delete it after 1 day, you still pay for 90 days of storage on that file. In a backup or archival workload (long retention by design), this is invisible β you would be storing it that long anyway. In a workload with high churn β CI artifact storage, temporary uploads, image processing pipelines β your effective rate can balloon to 2-3x the advertised price.
The egress cap is the second condition. "Free egress" on Wasabi means free up to 1x your stored volume per month. Store 1 TB, egress up to 1 TB free. Push beyond and Wasabi reserves the right to throttle you or move you to a metered plan. For backup workloads this never trips. For anything CDN-shaped, it absolutely will.
Where Wasabi shines: long-retention backups that rarely move. We use it for the Asset Tracking system's monthly archive snapshots β files written once, read maybe twice a year for audit. At that pattern, Wasabi is the cheapest option that still has S3 API compatibility.
AWS S3: Still the Default for Enterprise
I keep S3 in this comparison because pretending it does not exist is silly β it remains the default in every enterprise contract, every compliance audit, and every "we standardize on AWS" slide deck. The technical capabilities are also genuinely deeper than the alternatives: Object Lock with WORM for true immutability, S3 Glacier for sub-cent archival pricing, cross-region replication, Intelligent-Tiering, and a feature catalog that the competitors do not match.
The cost problem is egress. At $0.09/GB outbound, any workload that is not 95% write-and-forget gets expensive fast. The 1.2 TB / 3.5 TB egress example above is a real photography workload, and S3 charged ten times more than R2 for the privilege of housing the exact same files.
Where S3 still makes sense:
- You are already paying AWS. If your compute lives on EC2/ECS/Lambda, S3 egress to those services is free. Pulling files into Lambda for processing then writing results back? S3 wins.
- Compliance-heavy workloads. Object Lock + Glacier Deep Archive for 7-year retention is the path of least resistance for SOC 2, HIPAA, and FedRAMP-flavored audits.
- Truly massive scale. Past a few petabytes, S3's enterprise discount tiers can match or beat the alternatives, and the operational maturity of S3 is unmatched.
Decision Matrix: Pick Your Provider
| Workload | Best Fit | Why |
|---|---|---|
| Public CDN assets (images, videos, static files) | Cloudflare R2 | Zero egress + native CDN integration |
| Database / app backups (rarely accessed) | Backblaze B2 or Wasabi | Cheapest storage, low egress need |
| Long-retention archives (1+ year) | Wasabi or S3 Glacier | 90-day min is irrelevant for archives |
| Compliance / WORM / Object Lock | AWS S3 | Only one with mature immutability |
| Mixed read/write SaaS storage on AWS stack | AWS S3 | Free intra-AWS egress beats alternatives |
| Bootstrapped SaaS, indie projects | Cloudflare R2 | 10 GB free + zero surprise egress bill |
| High-churn ephemeral uploads | Cloudflare R2 | No 90-day retention penalty |
What I Actually Run in Production
For full transparency, here is the current storage layout across the platforms I actively maintain:
- Photography Studio Manager (Laravel/Vue): Cloudflare R2 for active session galleries, Wasabi for 90+ day archive.
- E-Commerce Marketplace (Next.js): Cloudflare R2 with custom domain, served through Cloudflare CDN.
- Hotel Management Suite (Laravel): Backblaze B2 for nightly database dumps; assets stay on the Hostinger VPS local disk because the volume is tiny.
- SmartExam AI Generator (Node.js): Cloudflare R2 for generated PDFs and question banks; egress is high and unpredictable so R2 is the only sensible choice.
- Internal aggregator sites (7 sites, daily imports): Mix β featured images on Hostinger shared disk, structured data in MySQL. Storage cost is below $5/month total so we have not bothered moving.
Migration Realities
If you are sitting on AWS S3 and reading this hoping the migration will pay for itself, here is the honest assessment from doing this twice for clients in the past 8 months:
- API compatibility is real but imperfect. All three alternatives advertise S3-compatible APIs. R2 and B2 are genuinely close β most AWS SDK code works by changing the endpoint URL. Wasabi has occasional edge-case incompatibilities (multipart upload quirks, specifically) that I have hit on files over 5 GB.
- Egress to migrate is the killer. Pulling 2 TB out of S3 to push it into R2 costs $180 in S3 egress alone. For workloads under ~500 GB the migration pays for itself in 1-3 months. Above that, do the math carefully.
- CDN reconfiguration takes time. If you front S3 with CloudFront, switching to R2 + Cloudflare CDN means rebuilding cache rules, signed URL logic, and CORS policies. Budget half a day for a non-trivial setup.
- Test cold-start latency before committing. I learned this the hard way β first-byte latency on B2 felt slow enough that I moved one user-facing workload back to R2 within a week.
The Verdict
If you are starting a new SaaS in 2026 and want one default answer, it is Cloudflare R2. Free tier covers most indie projects entirely, the zero-egress model removes the single most painful pricing surprise in cloud infrastructure, and the integration with the rest of the Cloudflare stack (Workers, KV, D1) makes it the path of least resistance for a Cloudflare-native SaaS.
If you need cheap durable storage for backups and archival, Backblaze B2 is the boring correct answer. Wasabi is cheaper still per GB, but the 90-day retention math punishes anyone who is not certain their workload is long-retention.
If you are already on AWS and paying enterprise rates, S3 is fine β just stop using S3 + CloudFront for public assets. Even an enterprise team can save five figures a year by routing public-facing files through R2 with a custom domain while keeping the rest of the stack on AWS.
The era of "object storage is just S3" is over. Picking deliberately based on your actual read/write pattern saves real money β and after migrating multiple production systems, the difference between a thoughtful pick and a default pick has been roughly 5-15x on the monthly bill. That is a feature engineer for half a year.
FAQ
Q: Is Cloudflare R2 actually production-ready for a serious SaaS?
Yes. I have run it in production for 14 months across multiple client projects with no durability or availability issues. The two real concerns remain: no Object Lock for compliance, and the operational tooling is less mature than S3.
Q: Will Wasabi's 90-day retention ruin my budget?
Only if your workload is high-churn. For backups, archives, or data that lives more than 90 days anyway, the retention rule is invisible. For CI artifacts, ephemeral uploads, or anything you delete weekly, model the worst case before signing up.
Q: Can I use S3 SDKs with R2, B2, and Wasabi?
Mostly yes. Change the endpoint URL and credentials. Test multipart uploads carefully on Wasabi for files larger than 5 GB.
Q: Which has the best free tier for indie projects?
Cloudflare R2 by a wide margin: 10 GB storage, 10 million Class B reads, 1 million Class A writes monthly, all free, no credit card required, no expiration.
Q: What about Tigris, MinIO, or other newer entrants?
Tigris is interesting but I have not run it long enough in production to recommend. MinIO is self-hosted, which puts it in a different category β if you want to run your own object storage on a VPS or bare metal, MinIO is excellent. For managed providers, the four above remain the realistic shortlist.