Cloudflare R2 vs Naijacloud object storage: which should I use?
If you are serving public files to a worldwide audience, R2 is very hard to beat and we will not pretend otherwise: storage is $0.015 per GB-month, egress is free, and there is a standing free tier of 10 GB with a million Class A and ten million Class B operations a month. Naijacloud object storage is S3-compatible buckets we operate per region, with versioning, lifecycle rules and CORS, free inside the region and billed in Naira. The case for ours is location and proximity: the bucket sits in Port Harcourt in the same region as the container that reads it, so in-region traffic is not charged and Nigerian data stays in Nigeria. The case for R2 is that egress anywhere costs nothing, which is a genuinely different economic model.
Free egress is R2’s whole argument and it is a strong one. The reason object storage gets expensive elsewhere is almost never the storage — it is the bandwidth out. R2 removes that line entirely, which for a public media library, a downloads endpoint or anything fronted by a CDN is decisive.
What R2 charges instead is operations: $4.50 per million Class A (writes, listings, multipart creation) and $0.36 per million Class B (reads). A workload that writes many small objects — per-request logs, thumbnails, event files — pays there rather than on egress, and it is worth doing that arithmetic before assuming R2 is free.
Our side is priced the ordinary way, in Naira, and transfer inside a region is not charged at all. For the common shape — an application in af-west reading and writing its own bucket in af-west — that means the traffic that dominates most applications costs nothing on either platform, and the difference is where the bytes sit and who invoices you.
Where we are behind: R2 is a globally distributed object store in front of Cloudflare’s network, with a CDN on the same account and a very long operating history. Ours is a distributed store we run ourselves, per region, with no CDN in front of the bucket by default. For public assets served worldwide that is a real gap.
Where we are ahead: the bucket can be in Nigeria. R2 objects live in Cloudflare’s network with a location hint at best, so "this file stays in the country" is a claim R2 is not built to make, and one af-west is.
Both speak the S3 API, so the migration is rclone or the AWS CLI in either direction, and application code changes an endpoint and a credential rather than a library.
Platform comparison
Scored out of five on what actually changes your day.
Cost of egress to the public internet
Naijacloud
3/5Free inside the region. Egress out of the region is metered in Naira, so a public download-heavy workload does cost money.
Cloudflare
5/5Free, everywhere, with no allowance to exceed. This is the reason R2 exists and nothing here matches it.
Where the objects physically live
Naijacloud
5/5In the region you chose. af-west buckets are in Port Harcourt, which is the only thing that answers a Nigerian residency requirement.
Cloudflare
2/5Cloudflare’s network, with a location hint at creation. Not designed to guarantee a country.
S3 API compatibility
Naijacloud
4/5S3-compatible: the AWS SDKs, the CLI and rclone work, including range reads, virtual-host addressing and conditional requests.
Cloudflare
5/5S3-compatible and very widely exercised, plus a Workers binding that skips HTTP entirely.
Operation pricing
Naijacloud
4/5No separate per-operation charge; you are billed for what you store and what leaves the region.
Cloudflare
3/5$4.50 per million Class A and $0.36 per million Class B. A write-heavy workload of small objects pays here.
Serving public assets worldwide
Naijacloud
3/5Buckets are per region with no CDN in front by default. You would put one there yourself.
Cloudflare
5/5It is already inside the world’s largest CDN, on the same account, with cache rules beside it.
Reading it from your application
Naijacloud
5/5The app and the bucket are in the same region on a private path, and that traffic is not charged.
Cloudflare
4/5Free egress means this is cheap too, but the bucket is not in a region your container is also in.
Versioning, lifecycle rules and CORS
Naijacloud
4/5All three, configurable per bucket from the dashboard or the API.
Cloudflare
4/5Versioning, lifecycle rules and CORS, plus infrequent-access storage at $0.01 per GB-month.
Frequently asked
For a public, download-heavy workload served worldwide, you probably would not — R2 is the better economic answer and we would rather say that than argue against arithmetic. Where ours wins is when the reader is your own application in the same region, because that traffic is not charged either, and when the bytes have to stay in Nigeria.
Yes, and plenty do. A common split is R2 for public static assets behind the CDN, and an af-west bucket for anything containing customer data — uploads, documents, exports — so the regulated bytes stay in-country and the public ones stay cheap.
Yes, and specifically: range reads, virtual-host-style addressing, conditional requests and multipart uploads all work, so the AWS SDKs, the AWS CLI, rclone and s3cmd work against it. We fixed several of those compatibility gaps after finding that the dashboard worked and real S3 clients did not, which is the only reason to be this specific about the list.
rclone with both endpoints configured, or aws s3 sync run twice — once to copy and once to catch what changed. Both sides speak S3, so application code changes an endpoint URL and a credential, not a library.
Related questions
DigitalOcean App Platform · Object storage and the S3 API
DigitalOcean Spaces vs Naijacloud object storage: which is cheaper?
Vercel · Nigeria latency and regions
Does Vercel have a region in Nigeria?
Or read the full Naijacloud vs Cloudflare comparison, which covers pricing, databases, email and the rows we lose.
Try it against your own workload
Deploy one service from a Git repo in Port Harcourt and compare the numbers yourself. Free tier, no card, no FX.