Every S3-compatible provider advertises the same headline: a few gigabytes free. That number is close to meaningless. A 10 GB bucket costs about fifteen cents a month at list price — nobody is going broke on storage. The bill that surprises people is egress: the per-gigabyte fee for anyone actually downloading your files. Here is what each free tier really includes, with every figure taken from the provider's own pricing page.
Free Object Storage Tiers Compared
| Cloudflare R2 | Backblaze B2 | Tigris | Supabase Storage | |
|---|---|---|---|---|
| Free storage | 10 GB-month | 10 GB (always) | 5 GB-month | 1 GB |
| Free egress | Unlimited | 3× stored/month | Unlimited | 5 GB/month |
| Free requests | 1M Class A + 10M Class B | Class A/B/C free | 10K Class A + 100K Class B | Not metered separately |
| Card required | Yes | No | No | No |
| Paid storage | $0.015/GB-mo | $6.95/TB-mo | $0.02/GB-mo | Pro plan |
| Paid egress | $0 | $0.01/GB | $0 | Metered |
| Best for | Public assets at scale | Backups & archives | Small projects, no card | App file uploads |
Two things in that table deserve more than a row.
Cloudflare R2 has the strongest offer and one piece of friction: the free allowance is real (10 GB-month, 1 million Class A and 10 million Class B operations, $0 egress across every storage class), but you cannot switch R2 on without completing a checkout flow that takes a payment method. It also applies to Standard storage only — the Infrequent Access class has no free allowance and adds a $0.01/GB retrieval fee. Nothing is charged while you stay inside the limits, but "no credit card" is not one of R2's selling points.
Backblaze B2's free egress is the one most often mis-stated. The rule is free downloads up to 3× your average monthly stored data, then $0.01/GB — so 10 GB stored buys 30 GB of downloads. The escape hatch matters more than the allowance: egress through a partner CDN (Cloudflare, Fastly, bunny.net) is unlimited and free, so putting a CDN in front turns B2 into a zero-egress store. Class A, B, and C API calls are free on pay-as-you-go; only Class D transactions cost anything, at $0.004 per 10,000 after 2,500 free per day.
What a Real Workload Actually Costs
Free-tier headlines collapse the moment you outgrow them, and the ranking changes. Take a small media site: 50 GB stored, 500 GB downloaded per month. Doing the arithmetic at list prices:
| Provider | Storage | Egress | Monthly total |
|---|---|---|---|
| Cloudflare R2 | 40 GB billable × $0.015 = $0.60 | $0 | $0.60 |
| Tigris | 45 GB billable × $0.02 = $0.90 | $0 | $0.90 |
| Backblaze B2 (direct) | 40 GB × $0.00695 = $0.28 | 150 GB free, 350 × $0.01 = $3.50 | $3.78 |
| Backblaze B2 (via CDN) | $0.28 | $0 (partner CDN) | $0.28 |
B2 is the cheapest place to keep bytes and the most expensive to serve them — unless you route through a partner CDN, at which point it becomes the cheapest overall. R2 needs no such trick. That is the whole decision in one table: pick on egress path, not on free gigabytes.
For contrast, the old default is no longer a free option at all. Since 15 July 2025, new AWS accounts get up to $200 in credits usable for six months instead of a perpetual S3 allowance, and internet egress is free only for the first 100 GB/month aggregated across all AWS services. Storj is similar — its "free" is a 30-day, 25 GB trial, after which storage and egress each cost $7/TB with a $5 monthly minimum. Neither belongs on a free-tier list.
One API, Any Provider
All four speak the S3 API, so the same client works everywhere and switching means changing two strings. With boto3:
import boto3
s3 = boto3.client(
"s3",
endpoint_url="https://<account_id>.r2.cloudflarestorage.com", # B2: https://s3.us-west-004.backblazeb2.com
aws_access_key_id=ACCESS_KEY, # Tigris: https://t3.storage.dev
aws_secret_access_key=SECRET_KEY,
region_name="auto",
)
s3.upload_file("cat.jpg", "my-bucket", "images/cat.jpg")
print(s3.generate_presigned_url("get_object",
Params={"Bucket": "my-bucket", "Key": "images/cat.jpg"}, ExpiresIn=3600))
For bulk moves and migrations, rclone (MIT, 58,000+ stars) beats writing a script — configure two remotes and copy between them:
rclone sync b2:my-bucket r2:my-bucket --progress --transfers 16
Because the interface is portable, vendor lock-in on object storage is mostly imaginary. Test the free tier that fits, and move if the bill changes.
Self-Hosting Changed in 2026
If your answer to free storage is "run it myself," the standard advice is now out of date. MinIO's community edition is over. The project stripped bucket, IAM, and configuration management out of the community web console during 2025, reserving the admin UI for its commercial AIStor product — and the minio/minio repository is now archived on GitHub, read-only at 61,000+ stars with no further commits. Do not start a new deployment on it.
The two live options:
- Garage (AGPLv3, Rust) — a single dependency-free binary that implements the S3 API and is explicitly designed to run outside datacenters on cheap, mismatched hardware: 1 GB RAM and 16 GB disk minimum. It is the common recommendation for small self-hosted clusters and works with Nextcloud, Mastodon, Matrix, and rclone.
- SeaweedFS (Apache 2.0, 33,000+ stars, actively developed) — heavier but more featureful, and the permissive license avoids AGPL obligations if you embed it in a product.
Self-hosting is only free if the server is. Pair either with an always-free ARM VPS and the storage genuinely costs $0/month — with the caveat that you now own durability, backups, and uptime, which is exactly what the managed providers charge for.
Which One Should You Pick?
- Serving public files (images, downloads, model weights) — R2. Unmetered egress is the only feature that matters here, and it is unconditional.
- Backups and archives that rarely get read — B2. Cheapest per stored gigabyte, and the 3× egress allowance covers the occasional restore.
- No credit card, small project — Tigris. Smaller allowance, but zero egress fees and no billing gate.
- User uploads inside an app — Supabase Storage, since it arrives with auth and row-level policies attached. Budget for the 1 GB / 5 GB ceiling and note that free projects pause after a week of inactivity.
- Full control, unmetered — Garage or SeaweedFS on a free VPS.
Frequently Asked Questions
What is the largest free object storage tier?
Cloudflare R2 and Backblaze B2 tie at 10 GB, but R2 is more generous in practice because its egress is unlimited and unconditional, while B2 caps free downloads at 3× your stored volume unless you serve through a partner CDN.
Does Cloudflare R2 really have no egress fees?
Yes. Cloudflare's pricing page lists $0 for data transfer to the internet across all storage classes, with no volume cap. You still pay for operations and stored data beyond the free allowance, and Infrequent Access storage adds a $0.01/GB retrieval fee.
Can I use a free object storage tier commercially?
Yes for all the hosted providers here — free tiers are usage allowances, not license restrictions. For self-hosted software, check the license instead: SeaweedFS is Apache 2.0 and safe to embed, while Garage and MinIO are AGPLv3, which triggers source-disclosure obligations if you offer them as a network service.
Is S3 still free for new accounts?
No. AWS replaced the old 12-month per-service allowances in July 2025 with up to $200 in credits valid for six months. After they expire, S3 is fully metered, including egress beyond the first 100 GB/month.
The Verdict
Free object storage is a solved problem, and the winner depends on one question: who downloads your files? If the answer is "the public, often," R2's unmetered egress makes everything else look expensive — accept the payment method on file and move on. If the answer is "almost nobody, but I need the bytes safe for years," B2 stores them for less than anyone. If you want to start without handing over a card, Tigris does the same job at 5 GB. And if you would rather own the whole stack, put Garage on a free VPS — just remember that MinIO is no longer the answer to that question.