Skip to content
Published on

Object Storage Egress Wars 2026: S3 vs R2 vs B2 vs Bunny vs Wasabi vs Tigris

Authors

Prologue: September 2022, R2 Changed Everything

September 22, 2022. Cloudflare launched R2 Object Storage to general availability. The single line that defined the announcement was: "Zero egress fees."

To grasp why that mattered, you have to know the cloud economics of the time. AWS S3's storage itself is reasonable — about $0.023/GB per month on the Standard tier. The moment data leaves to the internet, however, you pay $0.09/GB. Storing 1TB costs $23/month, but pulling that 1TB out once costs an extra $90. Storage was the bait; the real revenue was egress.

Cloudflare CEO Matthew Prince called this model a "data hostage" arrangement, and R2 set egress to zero. The message — "we will not charge you for taking your data back" — was simple, but four years later in 2026 the shockwave is still rippling through the storage industry.

This article compares the object storage market as of May 2026 across nine services. Not just price sheets — we use a real workload of "1TB stored + 10TB egress per month" to compare them, and we discuss when R2 is right, when it is wrong, and the traps you fall into migrating off S3.


1. AWS S3 — Still the Default, Still Expensive on Egress

S3 has been the de facto standard object storage API since 2006. By 2026, almost every competitor advertises itself as "S3-compatible" for exactly this reason.

Standard S3 Pricing as of May 2026

Storage (Standard, us-east-1):
  First 50TB/month       : $0.023/GB
  Next 450TB/month       : $0.022/GB
  Over 500TB/month       : $0.021/GB

Request Costs:
  PUT, COPY, POST        : $0.005 per 1,000 requests
  GET, SELECT, etc.      : $0.0004 per 1,000 requests

Egress (Data Transfer Out to Internet):
  First 10TB/month       : $0.09/GB
  Next 40TB/month        : $0.085/GB
  Next 100TB/month       : $0.07/GB
  Above 150TB/month      : $0.05/GB

* 100GB/month of free egress added in 2021 (negligible in practice)

Why S3 Is Still the Default

  • Deep integration with the AWS ecosystem: IAM, KMS, CloudTrail, VPC Endpoint
  • Cold tiers like Glacier Deep Archive ($0.00099/GB)
  • Native compatibility with analytics tools: Athena, Redshift Spectrum, EMR
  • Extensions like S3 Object Lambda and S3 Express One Zone (low-latency variant)
  • An overwhelming breadth of compliance certifications

The "Egress Lock-in" Truth

The egress problem at AWS is not limited to S3. EC2 to internet, RDS to internet, and NAT Gateway traffic all share the same $0.09/GB structure. In other words, getting your data out of AWS at all means paying a toll.

After R2 launched, Cloudflare created a "Bandwidth Alliance" of free-egress partners (later absorbed into R2's posture) explicitly to break this lock-in. AWS finally responded in March 2024 with a narrow policy: "egress is free when permanently leaving AWS for another cloud." This does not apply to normal operational traffic.


2. Cloudflare R2 — The Disruptor's 2026 Status

R2's promise is simple. You pay to store, you do not pay to send.

R2 Pricing as of May 2026

Storage (Standard):
  $0.015 / GB-month

Egress:
  $0 — free to any internet destination

Request Costs:
  Class A (PUT, POST, LIST, DELETE):
    $4.50 per 1,000,000 requests
  Class B (GET, HEAD):
    $0.36 per 1,000,000 requests

Infrequent Access tier (launched 2024):
  Storage: $0.01 / GB-month
  Class A: $9.00 per 1,000,000
  Class B: $0.90 per 1,000,000
  30-day minimum retention
  Retrieval fee: $0.01 / GB

Free Tier:
  Storage: 10GB / month
  Class A: 1,000,000 / month
  Class B: 10,000,000 / month

The Real Appeal of R2 Is Not Just Price

R2 shook the market not only because egress is free, but because R2 sits directly on the Cloudflare network.

  • Workers can import an R2 bucket as a binding and call it without a network hop
  • Native integration with Cloudflare CDN (no separate origin setup)
  • Automatic routing to the nearest of 295+ PoPs
  • S3-compatible API — boto3, aws-sdk-js, MinIO clients work as-is

What R2 Added in 2024–2025

  • R2 Data Catalog (Iceberg) — announced late 2024, GA in 2025. A managed catalog of Apache Iceberg tables hosted natively on R2 buckets, queryable from Spark, DuckDB, ClickHouse, and more.
  • Event Notifications — route R2 PUT/DELETE events to Queues for serverless ETL.
  • Super Slurper / Sippy — bulk and incremental migration tools from S3 to R2.
  • Location Hints — hint which region should hold a primary copy (for compliance).

R2 Cost Example: 1TB Stored + 10TB/Month Egress

Storage: 1TB * $0.015/GB = $15.00
Egress:  10TB * $0 = $0.00
Requests: 100k Class A + 5M Class B = $0.45 + $1.80 = $2.25
-----------------------------------------------
Monthly total: ≈ $17.25

The same workload on S3 is $23 (storage) + $900 (10TB egress) + request fees = about $925. A roughly 54x difference.


3. Backblaze B2 — The Quiet Veteran, Eleven Years Strong

Backblaze launched B2 Cloud Storage in 2015 — seven years before R2 — with effectively the same pitch: cheap storage and (within limits) free egress. The marketing was so quiet that it stayed mostly inside the backup/archive niche until R2 made the model famous.

B2 Pricing as of May 2026

Storage (Standard):
  $0.006 / GB-month  (i.e. $6 / TB-month)

Egress:
  Free for up to 3x stored amount
    e.g. with 100GB stored, 300GB/month of free egress
  Beyond that: $0.01 / GB

Request Costs:
  Class A (Upload): Free
  Class B (Download): First 2,500/day free, then $0.004 per 10,000
  Class C (List, Head): First 2,500/day free, then $0.004 per 1,000

Egress to Cloudflare/Fastly/Bunny CDN: completely free (legacy Bandwidth Alliance)

B2's Key Selling Points

  • Storage is 4x cheaper than S3 ($0.006 vs $0.023)
  • Free egress when fronted by Cloudflare/Fastly/Bunny CDN — origin pulls are zero charge
  • S3-compatible API (since 2020)
  • Mature backup ecosystem: Veeam, Synology, Restic, Arq
  • US company with SOC 2, GDPR, HIPAA certifications

Where B2 Falls Short

  • Few regions (roughly us-west, us-east, eu-central)
  • Minimal analytics/lambda/event extensions
  • No global PoP network — single-region latency unless paired with a CDN

4. Wasabi — The "Predictable Bill" Model

Wasabi launched in 2017 with radical simplicity: free egress and flat-rate storage.

Wasabi Pricing as of May 2026

Storage:
  $6.99 / TB-month (Pay-As-You-Go)
  $5.99 / TB-month (Reserved Capacity Storage, 1-year commit)

Egress: Free, with a fair-use clause:
  "API calls and egress should not exceed stored capacity."

Request Costs: Free

Minimum retention: 90 days (deletes before 90 days are still billed for 90 days)

Wasabi's Quirks

  • All requests are free: PUT, GET, LIST, DELETE
  • Egress is free (subject to fair use)
  • The fair-use rule is strict — frequently downloaded hot data is a poor fit
  • S3-compatible API
  • The 90-day minimum retention is the biggest trap — bad for ephemeral data
  • About 12 global regions across US, EU, AP, AU

Wasabi 1TB Stored + 10TB Egress Scenario

Storage: 1TB * $6.99 = $6.99
Egress:  10TB > 1TB stored → likely fair-use violation
         → Wasabi may push you to Reserved Capacity Storage or
            renegotiate the contract
Requests: Free
-----------------------------------------------
Monthly total: $6.99 (ideal), with policy-violation risk

→ Wasabi is best for backup/archive where egress stays within 1x of storage. For workloads with heavy egress, like video hosting, R2 or B2 is the better answer.


5. Bunny.net — CDN-First Storage

Bunny.net is a Slovenian company that built its reputation on CDN. It added Edge Storage around 2020, and by 2026 its positioning as "storage integrated with a CDN" is crystal clear.

Bunny Pricing as of May 2026

Edge Storage (origin, 11 regions):
  HDD: $0.01 / GB-month
  SSD: $0.02 / GB-month
  Replication to additional regions: +50% each

Edge Storage Egress: free when feeding Bunny CDN

Bunny CDN Egress (delivery to users):
  High Volume (HQ Tier): $0.005 / GB to $0.01 / GB
  Standard Tier: $0.01 / GB to $0.06 / GB (varies by region)
  Cheapest in US/EU
  Most expensive in Africa/Oceania

Request Costs: Free

Bunny's Identity

Bunny is less a direct competitor to R2/B2/Wasabi than a specialized CDN backend storage. Video streaming, image hosting, and game patch delivery are its sweet spots.

  • Origin storage is effectively close to free
  • CDN egress is pay-as-you-go by region (still more expensive than R2's zero, but very cheap per GB)
  • Bunny Stream (video transcoding, HLS) and Bunny Optimizer (image transforms) are media-specific extensions
  • An S3-compatible interface exists alongside Bunny's native SDK

When Bunny Beats R2

  • Video streaming that needs adaptive bitrate streaming (Bunny Stream's HLS transform)
  • Image transformations at the origin (Bunny Optimizer)
  • Static sites with a high CDN cache hit ratio, where the per-GB CDN egress is not painful

6. Tigris Data — Globally Distributed S3, Newcomer in 2024

Tigris Data is a relatively new object storage service operated on top of Fly.io's infrastructure. After going GA in 2024, it became a hot topic across 2025 and 2026.

Tigris's Identity

  • Globally distributed by default: uploaded objects are automatically replicated across multiple regions and served from the nearest one
  • Runs directly on Fly.io machines, so Fly apps in the same data center see extremely low latency
  • S3-compatible API
  • Base pricing: storage + requests, egress free

Tigris Pricing as of May 2026

Storage (Standard):
  $0.02 / GB-month

Egress:
  Free

Request Costs:
  Class A (PUT, etc.): $0.0045 per 1,000
  Class B (GET, etc.): $0.0004 per 1,000

Global replication: built-in (no extra charge for replicating across PoPs)

How Tigris Differs From R2

  • R2 starts in one region and caches at PoPs; Tigris replicates the object itself across regions
  • For Fly.io apps distributed across Tokyo, Singapore, Sydney, etc., each region accesses the same object with near-zero latency
  • Trade-off: storage is slightly more expensive than R2 ($0.02 vs $0.015)
  • Strongest fit for globally distributed ML inference or multi-region game servers

7. R2 Data Catalog — Iceberg On Top of Object Storage

In late 2024, Cloudflare announced R2 Data Catalog, and it went GA in 2025. To understand why this matters, you need to pause and consider the data lakehouse trend.

What Is Iceberg, and Why Has Every Cloud Adopted It

Apache Iceberg is an open table format created by Netflix. It adds a metadata layer over Parquet/ORC files so that they behave like tables.

  • Schema evolution (add/drop columns, change types)
  • ACID transactions
  • Time travel (query historical snapshots)
  • Partition pruning (query optimization)

Across 2024 and 2025, AWS S3 Tables, Snowflake Open Catalog, and Databricks Unity Catalog all announced Iceberg support. The idea of putting a transactional database on top of object storage went from experimental to industry standard.

What R2 Data Catalog Promises

  • Native Iceberg tables on R2 buckets, fully managed
  • Access from DuckDB, Spark, ClickHouse, PyIceberg, and others
  • Free egress — every analytics query produces zero egress cost
  • A REST catalog API compatible with AWS Glue Data Catalog

Real Code Example

# Query R2 Catalog tables via PyIceberg
from pyiceberg.catalog import load_catalog

catalog = load_catalog(
    "r2",
    **{
        "type": "rest",
        "uri": "https://catalog.cloudflarestorage.com/v1/<account-id>",
        "warehouse": "my-warehouse",
        "credential": "<r2-api-token>",
    }
)

table = catalog.load_table("analytics.events")
df = table.scan(
    row_filter="event_date >= '2026-05-01'",
    selected_fields=["user_id", "event_name", "event_date"],
).to_pandas()

The free egress matters most for analytics workloads. On S3, every analytics query has a hidden egress cost when data moves to the compute side; on R2, that cost is zero.


8. Google Cloud Storage / Azure Blob — The Reality of Parity Products

GCP and Azure also offer object storage. Their egress posture, however, looks more like S3 than R2.

GCS as of May 2026

Storage (Standard, us-central1):
  $0.020 / GB-month

Egress:
  Within same region: free
  Same continent: $0.01 / GB
  Cross-continent: $0.05 to $0.15 / GB

GCS's strength is its native BigQuery integration. Iceberg and BigLake run on GCS, and if you already operate in GCP the data gravity favors it.

Azure Blob Storage as of May 2026

Storage (Hot, East US):
  $0.0184 / GB-month

Egress:
  Within same region: free
  Cross-continent: $0.05 to $0.087 / GB

Azure's strengths are enterprise compliance (especially Microsoft 365 integration) and analytics variants like ADLS Gen2.

Why GCP/Azure Cannot Match R2/B2

There are three reasons.

  1. Portfolio protection: zero-egress storage would also reshape the pricing of adjacent services like BigQuery or Synapse
  2. Compute coupling: even if GCS egress is free, Compute Engine egress is billed separately
  3. Governance overhead: enterprise SLA and certifications carry costs that R2/B2 do not shoulder

9. iDrive E2, Storj, Filebase — The Fringe of Decentralization

iDrive E2

iDrive's US-based S3-compatible storage. As of 2026 it offers about $0.004 / GB-month storage with free egress by default. Certifications and SLAs are weaker than B2 or Wasabi.

Storj

A P2P distributed storage network. Objects are sharded with Reed-Solomon erasure coding across community-run storage nodes. As of 2026, storage is roughly $0.004 / GB-month and egress is around $0.007 / GB.

  • Pros: censorship resistance, distributed redundancy
  • Cons: inconsistent latency, metadata catalog overhead

Filebase

An S3-compatible gateway backed by IPFS, Sia, Storj, and Skynet. It acts as an adapter that lowers the entry barrier to decentralized storage.

These three carry a strong "Web3-friendly" identity. They are not yet the right primary storage for general SaaS workloads, but they make sense as cold redundancy — a backup of your backup.


10. "1TB Stored + 10TB/Month Egress" Cost Matrix

Below is the same workload normalized across every service.

Service                          Storage   Egress    Requests  Total (per month)
---------------------------------------------------------------------------
AWS S3 (Standard)                $23.00    $900.00   ~$5       ≈ $928
AWS S3 (Intelligent-Tiering)     $23.00    $900.00   ~$5       ≈ $928
Cloudflare R2                    $15.00    $0.00     ~$2       ≈ $17
Cloudflare R2 Infrequent         $10.00    $100.00   ~$10      ≈ $120
                                           (10GB retrieval fee included)
Backblaze B2 (standalone)        $6.00     $90.00    ~$5       ≈ $101
                                           (3TB free, then 7TB * $0.01)
Backblaze B2 + Cloudflare CDN    $6.00     $0.00     ~$5       ≈ $11
Wasabi                           $6.99     Free*     Free      ≈ $7
                                           (* fair-use violation risk)
Bunny Edge Storage + CDN         $10.00    $50–100   Free      ≈ $60–110
                                           (region mix)
Tigris Data                      $20.00    $0.00     ~$2       ≈ $22
GCS (Standard)                   $20.00    $500–1500 ~$5       ≈ $525–1525
Azure Blob (Hot)                 $18.40    $500–870  ~$5       ≈ $525–895
iDrive E2                        $4.00     $0.00     Free      ≈ $4
Storj                            $4.00     $70.00    ~$2       ≈ $76

S3 at $928 versus B2 + CDN at $11 is an 84x gap on the same workload. That gap is why R2 disrupted the market, and why four years later AWS still has not slashed its egress price.


11. When S3 Is Still the Right Answer — An Honest Framework

R2 and B2 are not always right. In several scenarios, S3 remains the reasonable choice.

S3 Is the Right Answer When…

  1. Your data stays inside AWS: EC2 → S3 → Athena → Redshift incurs no egress. Without internet egress, you only pay for storage.
  2. You depend on S3 Select or S3 Object Lambda: native server-side filtering and on-read transformation that R2 does not offer.
  3. You need extremely high IOPS: variants like S3 Express One Zone (microsecond latency) outperform R2's standard tier.
  4. You require deep compliance: FedRAMP High, IL5, ITAR — only AWS GovCloud satisfies these.
  5. You need rich lifecycle management: S3 Intelligent-Tiering auto-moves between hot/warm/cold/archive. R2 has a single tier plus Infrequent Access, nothing more.

R2 Is the Right Answer When…

  1. You serve frequently downloaded static assets: images, video, game patches, model weight downloads
  2. You run analytics on a data lake: repeated DuckDB/ClickHouse queries on Iceberg tables
  3. You need a CDN origin: zero-hop connection to Cloudflare CDN
  4. You build Workers-based serverless apps: R2 binding feels like a local disk inside Workers

B2 Is the Right Answer When…

  1. You handle backup/archive: target for Veeam, Restic, Synology, Arq
  2. You want minimum storage cost: $0.006/GB is 40% of R2's price
  3. You pair it with your own CDN: combined with Cloudflare, Fastly, or Bunny it becomes zero-egress

Tigris Is the Right Answer When…

  1. You run a global multi-region app: distributed services on Fly.io
  2. You distribute ML model weights globally: each region loads identical weights with near-zero latency

Wasabi Is the Right Answer When…

  1. Egress stays under your stored capacity: storing 1TB and pulling out under 1TB per month
  2. Predictable flat billing matters: when finance cannot tolerate egress variance

12. Migration Traps

Here are the traps most often hit when migrating from S3 to R2 or B2.

Trap 1: The Egress Cost of Migration Itself

Moving 1TB from S3 to R2 means S3 internet egress. $90. For 100TB, $9,000.

→ Cloudflare's Super Slurper pulls from S3, but AWS still bills its egress. Since March 2024 AWS waives egress for permanent migration to another cloud, but you must prove the move is permanent and the audit happens after the fact.

Trap 2: Subtle S3 SDK Compatibility Differences

R2, B2, and Wasabi all advertise "S3 API compatible," but each is missing pieces.

  • R2: no SSE-C (customer-provided server-side encryption keys), no S3 Select, versioning added only in 2024
  • B2: multipart upload minimum part size differs (S3's 5MB is matched but other quirks differ)
  • Wasabi: pagination of some LIST APIs behaves differently

→ Always test SDK compatibility with the real workload before committing.

Trap 3: Pre-Signed URL Expiry and Signing Policies

S3 pre-signed URLs derive from IAM policies; R2 uses API-token signatures. Your URL-generation code may need a rewrite.

Trap 4: Lifecycle Management Gap

S3 lets you say "after 30 days move to IA, after 90 days to Glacier." R2 and B2 do not have equivalent richness.

→ Plan to move data into cold tiers from your backup tooling rather than relying on the storage to do it.

Trap 5: Observability Gap

S3 ships CloudTrail, S3 Server Access Logs, and S3 Inventory. R2 supports log delivery via Logpush but lags S3 on retention and query power.


13. Iceberg + S3-Compatible Storage — The Real 2026 Mega-Trend

This is the trend most worth highlighting. By 2026, the combination of "cheap object storage + Iceberg tables + decoupled query engine" is replacing data warehouses.

The Traditional Data Warehouse

Snowflake, BigQuery, and Redshift bundle compute and storage inside one vendor. Egress is effectively impossible.

Lakehouse Architecture

Raw Data (CSV, JSON, Avro)
       ↓ Transformation (dbt, Spark)
Iceberg Table (Parquet + metadata)
       ↓ Storage
Object Storage (R2, S3, GCS)
       ↓ Catalog
Iceberg Catalog (REST, Glue, Unity, R2 Data Catalog)
       ↓ Query
Compute Engine (DuckDB, ClickHouse, Trino, Spark, Snowflake)

Storage and compute are entirely decoupled, and multiple engines can hit the same dataset concurrently.

Why R2 Data Catalog Is a Game Changer

  • Free egress — every analytics query incurs zero data-transfer cost
  • Combined with embedded engines like DuckDB, infrastructure cost converges toward zero
  • Open Iceberg standard avoids vendor lock-in
  • One catalog can be queried simultaneously by Spark, Trino, and ClickHouse

Real-World Adoption

  • MotherDuck (DuckDB cloud) supports SQL analytics on top of R2 Data Catalog
  • Estuary (CDC pipelines) supports R2 Iceberg as a sink
  • Hex / Definite (analytics notebooks) ship native R2 Catalog connectors

The deep point is that the business model of selling compute and storage as a bundle is wobbling. Snowflake and Databricks already responded with their own Iceberg catalogs (Polaris, Unity), but pairing free-egress storage with open catalogs is where R2 holds an edge.


14. Anti-Patterns: When R2 or B2 Is the Wrong Choice

A final note: "egress is free, so move everything" is not the answer.

Anti-Pattern 1: Tons of Tiny Objects

R2's Class A requests cost $4.50 / 1M. PUTting a billion 1KB files costs $4,500. Putting them in a single DynamoDB table or a SQLite file is cheaper.

Anti-Pattern 2: Hot Read-Modify-Write Workloads

Object storage guarantees atomicity only at object granularity. If you update the same object dozens of times per second, choose PostgreSQL, Redis, or DynamoDB.

Anti-Pattern 3: Analytics That Require S3 Select

Reading only a slice of an object is what S3 Select does. R2 and B2 do not have it. For raw JSON/CSV that has not been converted to a columnar format, S3 Select may still win on cost.

Anti-Pattern 4: Compliance That Outweighs Egress Savings

Certain finance/healthcare workloads require FedRAMP, IL5, ITAR, or HIPAA. R2 has SOC 2 and GDPR/CCPA but FedRAMP High or IL5 still requires AWS GovCloud.

Anti-Pattern 5: Single-Vendor Risk

Cloudflare experienced two notable global incidents between 2024 and 2025. R2 was spared in some cases, but a total Cloudflare network outage would take R2 down with it. If your workload demands cross-cloud redundancy, consider dual-write to R2 + B2 (or R2 + S3).


Epilogue: A Decision Checklist

Questions to answer when picking object storage.

Checklist

  • What is your monthly egress as a multiple of stored capacity? (≤1x → Wasabi; 1–5x → B2 + CDN; ≥5x → R2)
  • Are you tightly coupled with EC2, Lambda, or Athena? (If yes, keep S3.)
  • Are you already using a CDN? (Cloudflare/Bunny pair well with B2.)
  • Are you moving toward Iceberg/lakehouse? (If yes, evaluate R2 Data Catalog aggressively.)
  • Do compliance requirements include FedRAMP High, IL5, or ITAR? (If yes, AWS GovCloud is required.)
  • Do you need global multi-region distribution? (If yes, Tigris Data fits.)
  • Do you store huge numbers of tiny objects? (If yes, audit PUT costs carefully.)
  • Is the workload backup or archive? (B2 or Wasabi fits.)
  • Do you need cross-vendor redundancy? (Dual-write to R2 + B2.)

A New View on Egress Pricing

Before 2022, egress was an "unavoidable toll." In 2026 it is a "choice." If your monthly egress bill is ten times the storage bill, that is no longer a technical decision — it is a business decision.

R2's 2022 question was simple: "Is taking your data hostage really the core of cloud business?" Four years later, that question is no longer a hypothesis. It has become a market-price assumption.

Anti-Pattern Summary

  • Do not force R2 onto workloads with no egress (S3-internal workloads belong on S3)
  • Do not throw billions of tiny objects at R2/B2 (Class A costs explode)
  • Do not put hot egress workloads on Wasabi (fair-use will be invoked)
  • Do not ignore migration cost (it is one-time but not small)
  • For businesses that cannot tolerate Cloudflare outages, design dual-write

Next Article Preview

The next article translates this framework into runnable code. We migrate 100TB from S3 to R2 — comparing rclone, AWS DataSync, Cloudflare Super Slurper, and a custom Lambda + Workers pipeline — measuring cost and elapsed time across each. Then we put DuckDB on top of R2 Data Catalog and run a 100GB analytics workbook end to end.


References