Cloud Parts

Cloudflare Basin CatalogRenamed

Cloudflare’s managed Apache Iceberg REST catalog built into R2 buckets, called R2 Data Catalog until it became generally available as Basin Catalog on 1 October 2026, which also compacts tables and expires old snapshots for you.

Used for
Lakehouses
Type
Commercial product
License
Proprietary
Status
Renamed. Called R2 Data Catalog until 1 October 2026; the old names still work but will be deprecated.
Facts checked
11 October 2026

What it is

You turn the catalog on per R2 bucket, in the dashboard or with wrangler basin catalog enable <bucket>, and get back a catalog URI and a warehouse name. Engines connect through the standard Iceberg REST catalog API with a Cloudflare API token that has both catalog and R2 storage permissions, and the catalog hands them SigV4 credentials for the data files. Those credentials inherit the token’s storage permissions, so a token with read-only catalog access but read-write storage access can still write objects. Cloudflare documents DuckDB (1.4.0 or newer to attach and write), PyIceberg, Snowflake, Spark, StarRocks and Trino, and its own Basin SQL engine and Basin Pipelines ingestion service use it too. Because the data sits in R2, engines in other clouds read it without egress fees.

Maintenance runs inside the service. Compaction bin-packs small Parquet files into files of a target size between 64 and 512 MB (128 MB by default), names them compacted-… in the table’s data/ directory, and since July 2026 also clusters manifests by partition. Snapshot expiration removes snapshots that are both older than a limit (30 days by default) and outside the most recent N (5 by default), along with the data files only they referenced. Both can be set for the whole catalog or per table. Billing started on 3 August 2026: beyond 1 million catalog operations a month it costs $9 per million, and compaction beyond 10 GB and 1 million objects costs $0.005 per GB and $2 per million objects, on top of R2 storage at $0.015 per GB-month. Snapshot expiration is free. On 1 October 2026 Cloudflare renamed its data platform Basin: R2 Data Catalog became Basin Catalog, Pipelines became Basin Pipelines and R2 SQL became Basin SQL. Existing R2 Data Catalog resources and configurations keep working and will be deprecated over time.

Why teams pick it

  • No catalog server to run: one command turns any R2 bucket into an Iceberg warehouse, with the catalog state managed by Cloudflare
  • A standard Iceberg REST interface, so DuckDB, PyIceberg, Spark, Trino, Snowflake and StarRocks connect with a URI, a warehouse name and a token
  • No egress fees, so engines in other clouds or regions can query the same tables without paying for data transfer
  • Built-in compaction, manifest clustering and snapshot expiration, so small files from streaming writers don’t need scheduled Spark jobs; Cloudflare’s own example puts compaction for a 20 MB/s stream at about $253 a month against $759 of storage

Watch out for

  • Renamed in October 2026: R2 Data Catalog names, wrangler r2 bucket catalog commands and existing configurations still work but will be deprecated, so older guides and scripts need updating
  • Compaction is bin-packing only, for Parquet files only, within 64 to 512 MB; Cloudflare says sort or z-order compaction may be priced differently if it comes, and files never referenced by a snapshot are not cleaned up
  • Tied to R2: one catalog per bucket, no buckets in a non-default jurisdiction, and access is set by API tokens scoped to buckets, with no per-table grants in the docs
  • Needs an active R2 subscription and a linked payment card even for use inside the free allowance, and DROP TABLE … PURGE deletes the files permanently while a plain DROP TABLE leaves them in the bucket

Alternatives

What all lakehouse catalogs have in common →

How it fits with other technologies

Turn an R2 bucket into an Iceberg catalog and switch on maintenance · bash

npx wrangler r2 bucket create analytics
npx wrangler basin catalog enable analytics      # prints the Catalog URI and Warehouse name

# Catalog-level maintenance needs an API token with Basin Catalog and R2 storage
# read/write permissions, used as a service credential
npx wrangler basin catalog compaction enable analytics --target-size 128 --token "$CATALOG_TOKEN"
npx wrangler basin catalog snapshot-expiration enable analytics \
  --token "$CATALOG_TOKEN" --older-than-days 7 --retain-last 10

# Override for one busy table: smaller files, shorter history
npx wrangler basin catalog compaction enable analytics web events --target-size 64
npx wrangler basin catalog snapshot-expiration enable analytics web events \
  --token "$CATALOG_TOKEN" --older-than-days 2 --retain-last 5

# Any Iceberg REST client then connects with the URI, the warehouse and a token, e.g. DuckDB:
#   CREATE SECRET r2 (TYPE ICEBERG, TOKEN '<token>');
#   ATTACH '<warehouse_name>' AS lake (TYPE ICEBERG, ENDPOINT '<catalog_uri>');

See it in a real stack

No architecture uses Cloudflare Basin Catalog yet. Drop it into the playground and wire it up yourself.Open playground →
Where it came from2021–2026

Cloudflare launched R2 in 2021 with no egress fees. Over time more companies kept analytical data on R2 in open formats, above all Apache Iceberg, so that any team could query it with whatever engine it liked, from any cloud. But an Iceberg table also needs a catalog that records where each table’s current metadata is, and on R2 that meant running one yourself or relying on an external service.

On 10 April 2025, during Developer Week, Cloudflare put R2 Data Catalog into public beta: a managed Iceberg REST catalog built into the bucket, free while in beta, with planned prices of $9 per million catalog operations and $0.05 per GB plus $4 per million objects for compaction. On 25 September 2025 it added compaction and announced the Cloudflare Data Platform around it, with Pipelines, built on the Arroyo stream processor Cloudflare had acquired that year, to load events into tables, and R2 SQL to query them. Automatic snapshot expiration followed in December 2025.

In 2026 snapshot expiration started deleting unreferenced data files, and the catalog gained read-only tokens and manifest optimization. Pricing published in May was a tenth of the beta plan for compaction data ($0.005 per GB), and billing began on 3 August 2026. On 1 October 2026 the data platform became generally available under a new name, Basin, and R2 Data Catalog became Basin Catalog.

Why it’s built this way

Build the catalog into the bucket
The launch post promised Iceberg’s database-like features “without the overhead of managing your own external catalog”: enabling a bucket is all the setup there is.
The standard Iceberg REST API instead of a new one
Engines that already speak the REST catalog protocol, such as PyIceberg, Snowflake and Spark, can connect without a Cloudflare-specific connector.
Maintenance as part of the catalog
Query engines work best with fewer, larger files, so Cloudflare listed compaction as the next step at launch and started with small-file bin-packing in September 2025, then added snapshot expiration and manifest clustering.
Pay per catalog operation and per GB compacted
Cloudflare pitched the data platform on usage-based pricing: metadata requests and compaction work are billed by use, with a monthly free allowance, and reads out of R2 have no egress fees.

Timeline

  1. 2021

    Cloudflare launches R2 object storage with no egress fees

  2. 2025

    R2 Data Catalog enters public beta on 10 April

  3. 2025

    Compaction and the Cloudflare Data Platform arrive on 25 September

  4. 2025

    Automatic snapshot expiration on 18 December

  5. 2026

    Billing begins on 3 August

  6. 2026

    Generally available and renamed Basin Catalog on 1 October

Sources13 · facts checked 11 October 2026

Improve this page on GitHub