<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Cloudflare changelogs | R2</title><description>Cloudflare changelogs for R2</description><link>https://developers.stormtrust.net/changelog/</link><item><title>R2, R2 Data Catalog - Billing is now enabled for R2 Data Catalog</title><link>https://developers.stormtrust.net/changelog/post/2026-08-03-r2-data-catalog-billing-enabled/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-08-03-r2-data-catalog-billing-enabled/</guid><description>&lt;p&gt;Billing is now enabled for &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; on non-enterprise accounts. R2 Data Catalog usage beyond the included free tier will appear on your next invoice.&lt;/p&gt;
&lt;p&gt;R2 Data Catalog charges based on two dimensions, in addition to standard &lt;a href=&quot;https://developers.stormtrust.net/r2/pricing/&quot;&gt;R2 storage and operations&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Catalog operations&lt;/strong&gt;: $9.00 / million operations for metadata requests such as creating tables, reading table metadata, and updating table properties.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compaction&lt;/strong&gt;: $0.005 / GB processed and $2.00 / million objects processed. These charges only apply when &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/table-maintenance/&quot;&gt;automatic compaction&lt;/a&gt; is turned on for a table.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each dimension includes a monthly free tier: 1 million catalog operations, 10 GB of compaction data processed, and 1 million compaction objects processed.&lt;/p&gt;
&lt;p&gt;For example, a single Iceberg table with 50 GB of data, 500,000 catalog operations per month, and compaction turned on that processes 20 GB across 200,000 files would be billed as follows:&lt;/p&gt;
&lt;div class=&quot;table-scroll&quot; tabindex=&quot;0&quot; role=&quot;region&quot; aria-label=&quot;Table&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Usage&lt;/th&gt;
&lt;th&gt;Included&lt;/th&gt;
&lt;th&gt;Billable&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Catalog operations&lt;/td&gt;
&lt;td&gt;500,000&lt;/td&gt;
&lt;td&gt;1,000,000&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compaction (data processed)&lt;/td&gt;
&lt;td&gt;20 GB&lt;/td&gt;
&lt;td&gt;10 GB&lt;/td&gt;
&lt;td&gt;10 GB&lt;/td&gt;
&lt;td&gt;$0.05&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compaction (objects)&lt;/td&gt;
&lt;td&gt;200,000&lt;/td&gt;
&lt;td&gt;1,000,000&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;$0.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total (Data Catalog)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$0.05&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Standard R2 storage charges ($0.015 / GB-month) apply separately for the 50 GB of data stored.&lt;/p&gt;
&lt;p&gt;For full pricing details and billing examples, refer to &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/platform/pricing/&quot;&gt;R2 Data Catalog pricing&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 03 Aug 2026 00:00:00 GMT</pubDate><product>R2</product><category>R2</category><category>R2 Data Catalog</category></item><item><title>R2 - Sippy now supports Azure Blob Storage and S3-compatible storage providers</title><link>https://developers.stormtrust.net/changelog/post/2026-07-24-r2-sippy-azure-s3-compatible-support/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-07-24-r2-sippy-azure-s3-compatible-support/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/r2/data-migration/sippy/&quot;&gt;Sippy&lt;/a&gt; can now incrementally migrate data from Azure Blob Storage and any S3-compatible object storage provider to &lt;a href=&quot;https://developers.stormtrust.net/r2/&quot;&gt;Cloudflare R2&lt;/a&gt;, in addition to Amazon S3 and Google Cloud Storage. Sippy copies objects to R2 as your application requests them, so you can start serving data from R2 without first moving your entire dataset or paying migration-specific egress fees.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;enable-sippy&quot;&gt;Enable Sippy&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#enable-sippy&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Run the following command and follow the prompts to select and configure your source storage provider:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; sippy&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; enable&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;BUCKET_NAM&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;For Azure Blob Storage, provide your storage account name, container name, and either an account key or a shared access signature (SAS) token with read and list permissions. For an S3-compatible provider, provide the S3 API endpoint URL and read-only Access Key ID and Secret Access Key.&lt;/p&gt;
&lt;img src=&quot;https://developers.stormtrust.net/cdn-cgi/image/onerror=redirect,width=400,height=650,format=webp/_astro/sippy-azure-source-configuration.j9uacYgX.png&quot; alt=&quot;Azure Blob Storage source configuration in the R2 dashboard&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;400&quot; height=&quot;650&quot;&gt;
&lt;p&gt;After you enable Sippy, requests for objects that are not yet in R2 are served from your source bucket and copied to R2. Subsequent requests for those objects are served from R2.&lt;/p&gt;
&lt;p&gt;For setup instructions and credential requirements, refer to the &lt;a href=&quot;https://developers.stormtrust.net/r2/data-migration/sippy/&quot;&gt;Sippy documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate><product>R2</product><category>R2</category></item><item><title>R2, R2 Data Catalog - R2 Data Catalog now supports read-only API tokens</title><link>https://developers.stormtrust.net/changelog/post/2026-07-09-r2-data-catalog-read-only-tokens/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-07-09-r2-data-catalog-read-only-tokens/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; now accepts read-only API tokens, so query engines and clients that only read data no longer need a read-write token. Previously, every catalog operation required an &lt;strong&gt;Admin Read &amp;amp; Write&lt;/strong&gt; token, which granted read-only clients more access than they needed.&lt;/p&gt;
&lt;p&gt;You can now authenticate your Iceberg engine based on your workload:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Read-only&lt;/strong&gt; operations (such as listing namespaces, loading tables, and querying data) work with an &lt;strong&gt;Admin Read only&lt;/strong&gt; token (R2 Data Catalog read and R2 storage read).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Write&lt;/strong&gt; operations (such as creating or dropping tables and committing transactions) continue to require an &lt;strong&gt;Admin Read &amp;amp; Write&lt;/strong&gt; token.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This lets you follow the principle of least privilege — for example, using a read-write token for the pipeline that writes to your tables and read-only tokens for engines like &lt;a href=&quot;https://developers.stormtrust.net/r2-sql/&quot;&gt;R2 SQL&lt;/a&gt;, &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/config-examples/duckdb/&quot;&gt;DuckDB&lt;/a&gt;, or &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/config-examples/pyiceberg/&quot;&gt;PyIceberg&lt;/a&gt; that query them.&lt;/p&gt;
&lt;p&gt;Note that credentials vended by the catalog inherit the R2 storage permissions of the token used to authenticate. To ensure read-only access to your underlying data, scope the R2 storage permission to read-only as well.&lt;/p&gt;
&lt;p&gt;For details on choosing and creating the right token, refer to &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/manage-catalogs/#authenticate-your-iceberg-engine&quot;&gt;Authenticate your Iceberg engine&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate><product>R2</product><category>R2</category><category>R2 Data Catalog</category></item><item><title>R2, R2 Data Catalog - R2 Data Catalog warns before you delete data manually</title><link>https://developers.stormtrust.net/changelog/post/2026-07-06-r2-data-catalog-delete-warnings/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-07-06-r2-data-catalog-delete-warnings/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; is a managed &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; catalog built directly into your R2 bucket. Iceberg tracks your data through a tree of metadata files, so every insert, update, and delete must go through a catalog transaction. Manually adding, modifying, or deleting objects outside the catalog can leave pointers referencing files that no longer exist, corrupting the table into an inconsistent state that is difficult to recover from.&lt;/p&gt;
&lt;p&gt;To help prevent this, the R2 dashboard and Wrangler now warn you when you attempt a manual delete operation on a Data Catalog-enabled bucket.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;dashboard&quot;&gt;Dashboard&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#dashboard&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;When you try to delete objects from a bucket that has R2 Data Catalog enabled, the dashboard displays a warning explaining that the operation could leave the catalog in an invalid state, with a link to the documentation for deleting data correctly. You can cancel the operation or choose to proceed anyway.&lt;/p&gt;
&lt;img src=&quot;https://developers.stormtrust.net/cdn-cgi/image/onerror=redirect,width=1886,height=684,format=webp/_astro/data-catalog-delete-warning.DoBR0sFO.png&quot; alt=&quot;R2 dashboard warning shown before deleting objects from a Data Catalog-enabled bucket&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1886&quot; height=&quot;684&quot;&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;wrangler&quot;&gt;Wrangler&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#wrangler&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Wrangler now checks whether a bucket is Data Catalog-enabled before running a delete and warns you before continuing:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;txt&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;txt&quot; data-nb-lang=&quot;txt&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-wvjl67&quot;&gt;Data Catalog is enabled for this bucket. &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-wvjl67&quot;&gt;Proceeding may leave the data catalog in an invalid state. Continue?&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;To learn how to safely manage and delete data in your tables, refer to the &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/&quot;&gt;R2 Data Catalog documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate><product>R2</product><category>R2</category><category>R2 Data Catalog</category></item><item><title>Cloudflare Fundamentals, Workers, D1, R2, KV, Queues, Vectorize, Durable Objects, Containers - Billable usage and budget alerts now in product sidebars</title><link>https://developers.stormtrust.net/changelog/post/2026-06-04-billable-usage-product-sidebar/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-06-04-billable-usage-product-sidebar/</guid><description>&lt;p&gt;Pay-as-you-go customers can now view billable usage and create &lt;a href=&quot;https://developers.stormtrust.net/changelog/post/2026-04-13-billable-usage-dashboard-and-budget-alerts/&quot;&gt;budget alerts&lt;/a&gt; directly from the product overview pages for &lt;a href=&quot;https://developers.stormtrust.net/workers/&quot;&gt;Workers &amp;amp; Pages&lt;/a&gt;, &lt;a href=&quot;https://developers.stormtrust.net/d1/&quot;&gt;D1&lt;/a&gt;, &lt;a href=&quot;https://developers.stormtrust.net/r2/&quot;&gt;R2&lt;/a&gt;, &lt;a href=&quot;https://developers.stormtrust.net/kv/&quot;&gt;Workers KV&lt;/a&gt;, &lt;a href=&quot;https://developers.stormtrust.net/queues/&quot;&gt;Queues&lt;/a&gt;, &lt;a href=&quot;https://developers.stormtrust.net/vectorize/&quot;&gt;Vectorize&lt;/a&gt;, &lt;a href=&quot;https://developers.stormtrust.net/durable-objects/&quot;&gt;Durable Objects&lt;/a&gt;, and &lt;a href=&quot;https://developers.stormtrust.net/containers/&quot;&gt;Containers&lt;/a&gt;. A new sidebar widget shows current-period spend and the billing cycle date range, alongside a button to create a budget alert.&lt;/p&gt;
&lt;p&gt;The widget pulls from the same data as the &lt;a href=&quot;https://developers.stormtrust.net/changelog/post/2026-04-13-billable-usage-dashboard-and-budget-alerts/&quot;&gt;Billable Usage dashboard&lt;/a&gt; and aligns to your billing cycle (or the current day on Free plans), so the numbers match your invoice. Enterprise contract accounts are not yet supported.&lt;/p&gt;
&lt;img src=&quot;https://developers.stormtrust.net/cdn-cgi/image/onerror=redirect,width=2872,height=1614,format=webp/_astro/2026-06-04-billable-usage-product-sidebar.BUuIokn_.png&quot; alt=&quot;Billable usage widget in the Durable Objects product sidebar showing current-period spend and a breakdown by service&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2872&quot; height=&quot;1614&quot;&gt;
&lt;p&gt;Selecting &lt;strong&gt;Create budget alert&lt;/strong&gt; opens the budget alert flow inline so you can set a dollar threshold in the same place you are reviewing usage. Budget alerts apply to your total account-level spend across all products, not just the product page you create them from.&lt;/p&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://developers.stormtrust.net/billing/&quot;&gt;Usage-based billing documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Workers</category><category>D1</category><category>R2</category><category>KV</category><category>Queues</category><category>Vectorize</category><category>Durable Objects</category><category>Containers</category></item><item><title>R2, R2 Data Catalog - R2 Data Catalog pricing announced</title><link>https://developers.stormtrust.net/changelog/post/2026-05-11-r2-data-catalog-pricing-announced/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-05-11-r2-data-catalog-pricing-announced/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; is a managed &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; data catalog built directly into R2 buckets, queryable by any Iceberg-compatible engine such as Spark, Snowflake, and DuckDB. R2 Data Catalog now has published pricing for catalog operations and table compaction, in addition to standard &lt;a href=&quot;https://developers.stormtrust.net/r2/pricing/&quot;&gt;R2 storage and operations&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Billing is not yet enabled. We will provide at least 30 days notice before we start charging for R2 Data Catalog usage.&lt;/p&gt;
&lt;p&gt;Pricing is based on two dimensions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Catalog operations&lt;/strong&gt;: $9.00 / million operations for metadata requests such as creating tables, reading table metadata, and updating table properties.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compaction&lt;/strong&gt;: $0.005 / GB processed and $2.00 / million objects processed. These charges only apply when automatic compaction is turned on for a table.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both dimensions include a monthly free tier: 1 million catalog operations, 10 GB of compaction data processed, and 1 million compaction objects processed.&lt;/p&gt;
&lt;p&gt;For full pricing details and billing examples, refer to &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/platform/pricing/&quot;&gt;R2 Data Catalog pricing&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>R2</product><category>R2</category><category>R2 Data Catalog</category></item><item><title>R2, R2 Data Catalog - R2 Data Catalog gets a dedicated dashboard experience</title><link>https://developers.stormtrust.net/changelog/post/2026-05-28-r2-data-catalog-dashboard/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-05-28-r2-data-catalog-dashboard/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; is a managed &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; data catalog built directly into your R2 bucket. It exposes a standard Iceberg REST catalog interface so you can connect query engines like &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/config-examples/spark-scala/&quot;&gt;Spark&lt;/a&gt;, &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/config-examples/snowflake/&quot;&gt;Snowflake&lt;/a&gt;, &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/config-examples/duckdb/&quot;&gt;DuckDB&lt;/a&gt;, and &lt;a href=&quot;https://developers.stormtrust.net/r2-sql/&quot;&gt;R2 SQL&lt;/a&gt; to your data in R2.&lt;/p&gt;
&lt;p&gt;R2 Data Catalog now has a dedicated section in the Cloudflare dashboard, replacing the previous settings panel embedded in R2 bucket configuration. The new experience includes:&lt;/p&gt;
&lt;img src=&quot;https://developers.stormtrust.net/cdn-cgi/image/onerror=redirect,width=3070,height=1486,format=webp/_astro/data-catalog-dashboard.BsKDvUQn.png&quot; alt=&quot;R2 Data Catalog dashboard overview&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3070&quot; height=&quot;1486&quot;&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Catalog overview&lt;/strong&gt; — View all your catalogs in one place with catalog request counts, bucket sizes, and table maintenance status at a glance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guided setup wizard&lt;/strong&gt; — Create a catalog in three steps: choose or create an R2 bucket, configure table maintenance (compaction and snapshot expiration), and review. The wizard creates the bucket and generates a service credential automatically.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Settings management&lt;/strong&gt; — A dedicated settings page for each catalog with sections for general configuration, table maintenance, service credentials, and disabling the catalog. You can now enable and configure &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/table-maintenance/&quot;&gt;snapshot expiration&lt;/a&gt; directly from the dashboard.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built-in metrics&lt;/strong&gt; — Five charts on each catalog&apos;s metrics tab: bytes compacted, files compacted, catalog requests, storage size, and snapshots expired.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get started, go to &lt;strong&gt;R2 Data Catalog&lt;/strong&gt; in the Cloudflare dashboard or refer to the &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/get-started/&quot;&gt;getting started guide&lt;/a&gt; and &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/manage-catalogs/&quot;&gt;manage catalogs documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><product>R2</product><category>R2</category><category>R2 Data Catalog</category></item><item><title>R2, R2 Data Catalog - R2 Data Catalog now exposes metrics via the GraphQL Analytics API</title><link>https://developers.stormtrust.net/changelog/post/2026-05-12-r2-data-catalog-graphql-analytics/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-05-12-r2-data-catalog-graphql-analytics/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; is a managed Apache Iceberg data catalog built directly into your R2 bucket that allows you to connect query engines like &lt;a href=&quot;https://developers.stormtrust.net/r2-sql/&quot;&gt;R2 SQL&lt;/a&gt;, Spark, Snowflake, and DuckDB to your data in R2.&lt;/p&gt;
&lt;p&gt;You can now query analytics for your R2 Data Catalog warehouses via Cloudflare&apos;s &lt;a href=&quot;https://developers.stormtrust.net/analytics/graphql-api/&quot;&gt;GraphQL Analytics API&lt;/a&gt;. Two new datasets are available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;r2CatalogDataOperationsAdaptiveGroups&lt;/code&gt;&lt;/strong&gt; tracks Iceberg REST API requests made to your catalog, including operation type, request duration, HTTP status, and request body bytes. Use this to monitor request volume and latency across warehouses, namespaces, and tables.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;r2CatalogTableMaintenanceAdaptiveGroups&lt;/code&gt;&lt;/strong&gt; tracks table maintenance jobs such as compaction and snapshot expiration. Use this to monitor job success rates, files processed, bytes read and written, and job duration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both datasets support filtering by warehouse name, namespace, table name, and time range. They also include percentile aggregations for duration metrics.&lt;/p&gt;
&lt;p&gt;For detailed schema information and example queries, refer to the &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/observability/metrics/&quot;&gt;R2 Data Catalog metrics and analytics documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><product>R2</product><category>R2</category><category>R2 Data Catalog</category></item><item><title>R2 - Empty buckets and delete folders from the R2 dashboard</title><link>https://developers.stormtrust.net/changelog/post/2026-04-30-r2-empty-bucket-folder-delete/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-04-30-r2-empty-bucket-folder-delete/</guid><description>&lt;p&gt;You can now empty an entire &lt;a href=&quot;https://developers.stormtrust.net/r2/&quot;&gt;R2&lt;/a&gt; bucket or delete folders directly from the dashboard. Emptying a bucket is required before you can delete it. Previously, this required scripting or configuring &lt;a href=&quot;https://developers.stormtrust.net/r2/buckets/object-lifecycles/&quot;&gt;lifecycle rules&lt;/a&gt;. Now, the dashboard can handle it in a single action.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;empty-a-bucket&quot;&gt;Empty a bucket&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#empty-a-bucket&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Go to your bucket&apos;s &lt;strong&gt;Settings&lt;/strong&gt; tab and select &lt;strong&gt;Empty&lt;/strong&gt; under the &lt;strong&gt;Empty Bucket&lt;/strong&gt; section. This deletes all objects in the bucket while preserving the bucket and its configuration. For large buckets, the operation runs in the background and the dashboard displays progress.&lt;/p&gt;
&lt;p&gt;Emptying a bucket is also a prerequisite for deleting it. The dashboard now guides you through both steps in one place.&lt;/p&gt;
&lt;img src=&quot;https://developers.stormtrust.net/cdn-cgi/image/onerror=redirect,width=3380,height=1776,format=webp/_astro/empty-bucket-changelog.DjuMZppm.png&quot; alt=&quot;Empty Bucket and Delete Bucket sections in the R2 dashboard Settings tab&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3380&quot; height=&quot;1776&quot;&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;delete-folders&quot;&gt;Delete folders&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#delete-folders&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;R2 uses a flat object structure. The dashboard groups objects that share a common prefix into folders when the &lt;strong&gt;View prefixes as directories&lt;/strong&gt; checkbox is selected. Deleting a folder removes every object under that prefix.&lt;/p&gt;
&lt;p&gt;From the &lt;strong&gt;Objects&lt;/strong&gt; tab, you can select one or more folders and delete them alongside individual objects.&lt;/p&gt;
&lt;p&gt;For step-by-step instructions, refer to &lt;a href=&quot;https://developers.stormtrust.net/r2/buckets/delete-buckets/&quot;&gt;Delete buckets&lt;/a&gt; and &lt;a href=&quot;https://developers.stormtrust.net/r2/objects/delete-objects/&quot;&gt;Delete objects&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate><product>R2</product><category>R2</category></item><item><title>R2, R2 Data Catalog - R2 Data Catalog snapshot expiration now removes unreferenced data files</title><link>https://developers.stormtrust.net/changelog/post/2026-04-22-snapshot-expiration-cleans-data-files/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-04-22-snapshot-expiration-cleans-data-files/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt;, a managed &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; catalog built into R2, now removes unreferenced data files during automatic snapshot expiration. This improvement reduces storage costs and eliminates the need to run manual maintenance jobs to reclaim space from deleted data.&lt;/p&gt;
&lt;p&gt;Previously, snapshot expiration only cleaned up Iceberg metadata files such as manifests and manifest lists. Data files that were no longer referenced by active snapshots remained in R2 storage until you manually ran &lt;code&gt;remove_orphan_files&lt;/code&gt; or &lt;code&gt;expire_snapshots&lt;/code&gt; through an engine like Spark. This required extra operational overhead and left stale data files consuming storage.&lt;/p&gt;
&lt;p&gt;Snapshot expiration now handles both metadata and data file cleanup automatically. When a snapshot is expired, any data files that are no longer referenced by retained snapshots are removed from R2 storage.&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# Enable catalog-level snapshot expiration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; catalog&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; snapshot-expiration&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; enable&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; my-bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --older-than-days&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 7&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --retain-last&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/table-maintenance/&quot;&gt;table maintenance documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate><product>R2</product><category>R2</category><category>R2 Data Catalog</category></item><item><title>Agents, R2, Containers - Backup and restore API for Sandbox SDK</title><link>https://developers.stormtrust.net/changelog/post/2026-02-23-sandbox-backup-restore-api/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-02-23-sandbox-backup-restore-api/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/sandbox/&quot;&gt;Sandboxes&lt;/a&gt; now support &lt;code&gt;createBackup()&lt;/code&gt; and &lt;code&gt;restoreBackup()&lt;/code&gt; methods for creating and restoring point-in-time snapshots of directories.&lt;/p&gt;
&lt;p&gt;This allows you to restore environments quickly. For instance, in order to develop in a sandbox, you may need to include a user&apos;s codebase and run a build step.
Unfortunately &lt;code&gt;git clone&lt;/code&gt; and &lt;code&gt;npm install&lt;/code&gt; can take minutes, and you don&apos;t want to run these steps every time the user starts their sandbox.&lt;/p&gt;
&lt;p&gt;Now, after the initial setup, you can just call &lt;code&gt;createBackup()&lt;/code&gt;, then &lt;code&gt;restoreBackup()&lt;/code&gt; the next time this environment is needed. This makes it practical to pick up exactly
where a user left off, even after days of inactivity, without repeating expensive setup steps.&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;ts&quot; data-nb-lang=&quot;ts&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; sandbox&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt; getSandbox&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(env.Sandbox, &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;my-sandbox&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;);&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// Make non-trivial changes to the file system&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; sandbox.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;gitCheckout&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(endUserRepo, { targetDir: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;/workspace&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; sandbox.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;exec&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;npm install&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, { cwd: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;/workspace&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// Create a point-in-time backup of the directory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;const&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; backup&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; sandbox.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;createBackup&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;({ dir: &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;/workspace&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; });&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// Store the handle for later use&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; env.&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;KV&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;put&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;`backup:${&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;userId&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}`&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;JSON&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;stringify&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(backup));&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// ... in a future session...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;// Restore instead of re-cloning and reinstalling&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;await&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; sandbox.&lt;/span&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;restoreBackup&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;(backup);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Backups are stored in &lt;a href=&quot;https://developers.stormtrust.net/r2&quot;&gt;R2&lt;/a&gt; and can take advantage of &lt;a href=&quot;https://developers.stormtrust.net/sandbox/guides/backup-restore/#configure-r2-lifecycle-rules-for-automatic-cleanup&quot;&gt;R2 object lifecycle rules&lt;/a&gt; to ensure they do not persist forever.&lt;/p&gt;
&lt;p&gt;Key capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Persist and reuse across sandbox sessions&lt;/strong&gt; — Easily store backup handles in KV, D1, or Durable Object storage for use in subsequent sessions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Usable across multiple instances&lt;/strong&gt; — Fork a backup across many sandboxes for parallel work&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Named backups&lt;/strong&gt; — Provide optional human-readable labels for easier management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TTLs&lt;/strong&gt; — Set time-to-live durations so backups are automatically removed from storage once they are no longer needed&lt;/li&gt;
&lt;/ul&gt;
&lt;aside role=&quot;note&quot; aria-label=&quot;Note&quot; class=&quot;aside-card flex items-start gap-3 rounded-lg px-4 py-3 my-4&quot; style=&quot;--_c: var(--nb-info); --_t: var(--nb-info-muted);&quot; data-astro-cid-znle5jil&gt;&lt;span class=&quot;flex h-[1.375em] shrink-0 items-center&quot; aria-hidden=&quot;true&quot; data-astro-cid-znle5jil&gt;&lt;svg width=&quot;1em&quot; height=&quot;1em&quot; viewBox=&quot;0 0 256 256&quot; class=&quot;h-[1em] w-[1em]&quot; data-astro-cid-znle5jil=&quot;true&quot; data-icon=&quot;ph:info&quot;&gt;&lt;path fill=&quot;currentColor&quot; d=&quot;M128 24a104 104 0 1 0 104 104A104.11 104.11 0 0 0 128 24m0 192a88 88 0 1 1 88-88a88.1 88.1 0 0 1-88 88m16-40a8 8 0 0 1-8 8a16 16 0 0 1-16-16v-40a8 8 0 0 1 0-16a16 16 0 0 1 16 16v40a8 8 0 0 1 8 8m-32-92a12 12 0 1 1 12 12a12 12 0 0 1-12-12&quot;/&gt;&lt;/svg&gt;&lt;/span&gt;&lt;div class=&quot;flex min-w-0 flex-1 flex-col gap-0.5&quot; data-astro-cid-znle5jil&gt;&lt;p class=&quot;m-0 text-base leading-snug font-semibold&quot; data-astro-cid-znle5jil&gt;Note&lt;/p&gt;&lt;div class=&quot;aside-card-body text-sm leading-normal&quot; data-astro-cid-znle5jil&gt;&lt;p&gt;Backup and restore currently uses a FUSE overlay. Soon, native snapshotting at a lower level will be added to Containers and Sandboxes, improving speed and ergonomics. The current backup functionality provides a significant speed improvement over manually recreating a file system, but it will be further optimized in the future. The new snapshotting system will use a similar API, so changing to this system will be simple once it is available.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;To get started, refer to the &lt;a href=&quot;https://developers.stormtrust.net/sandbox/guides/backup-restore/&quot;&gt;backup and restore guide&lt;/a&gt; for setup instructions and usage patterns, or the &lt;a href=&quot;https://developers.stormtrust.net/sandbox/api/backups/&quot;&gt;Backups API reference&lt;/a&gt; for full method documentation.&lt;/p&gt;</description><pubDate>Mon, 23 Feb 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>R2</category><category>Containers</category></item><item><title>R2 - Improve Global Upload Performance with R2 Local Uploads - Now in Open Beta</title><link>https://developers.stormtrust.net/changelog/post/2026-02-03-r2-local-uploads/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2026-02-03-r2-local-uploads/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/r2/buckets/local-uploads/&quot;&gt;Local Uploads&lt;/a&gt; is now available in open beta. Enable it on your &lt;a href=&quot;https://developers.stormtrust.net/r2/&quot;&gt;R2&lt;/a&gt; bucket to improve upload performance when clients upload data from a different region than your bucket. With Local Uploads enabled, object data is written to storage infrastructure near the client, then asynchronously replicated to your bucket. The object is immediately accessible and remains strongly consistent throughout. Refer to &lt;a href=&quot;https://developers.stormtrust.net/r2/how-r2-works/&quot;&gt;How R2 works&lt;/a&gt; for details on how data is written to your bucket.&lt;/p&gt;
&lt;p&gt;In our tests, we observed &lt;strong&gt;up to 75% reduction in Time to Last Byte (TTLB)&lt;/strong&gt; for upload requests when Local Uploads is enabled.&lt;/p&gt;
&lt;img src=&quot;https://developers.stormtrust.net/cdn-cgi/image/onerror=redirect,width=1506,height=596,format=webp/_astro/local-uploads-latency.R4pUgVuI.png&quot; alt=&quot;Local Uploads latency comparison showing p50 TTLB dropping from around 2 seconds to 500ms after enabling Local Uploads&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1506&quot; height=&quot;596&quot;&gt;
&lt;p&gt;This feature is ideal when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your users are globally distributed&lt;/li&gt;
&lt;li&gt;Upload performance and reliability is critical to your application&lt;/li&gt;
&lt;li&gt;You want to optimize write performance without changing your bucket&apos;s primary location&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To enable Local Uploads on your bucket, find &lt;strong&gt;Local Uploads&lt;/strong&gt; in your bucket settings in the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/r2/overview&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Cloudflare Dashboard&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;, or run:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; local-uploads&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; enable&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;BUCKET_NAM&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Enabling Local Uploads on a bucket is seamless: existing uploads will complete as expected and there’s no interruption to traffic. There is no additional cost to enable Local Uploads. Upload requests incur the standard &lt;a href=&quot;https://developers.stormtrust.net/r2/pricing/&quot;&gt;Class A operation costs&lt;/a&gt; same as upload requests made without Local Uploads.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.stormtrust.net/r2/buckets/local-uploads/&quot;&gt;Local Uploads&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><product>R2</product><category>R2</category></item><item><title>R2, R2 Data Catalog - R2 Data Catalog now supports automatic snapshot expiration</title><link>https://developers.stormtrust.net/changelog/post/2025-12-18-r2-data-catalog-snapshot-expiration/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2025-12-18-r2-data-catalog-snapshot-expiration/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; now supports automatic snapshot expiration for Apache Iceberg tables.&lt;/p&gt;
&lt;p&gt;In Apache Iceberg, a snapshot is metadata that represents the state of a table at a given point in time. Every mutation creates a new snapshot which enable powerful features like time travel queries and rollback capabilities but will accumulate over time.&lt;/p&gt;
&lt;p&gt;Without regular cleanup, these accumulated snapshots can lead to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Metadata overhead&lt;/li&gt;
&lt;li&gt;Slower table operations&lt;/li&gt;
&lt;li&gt;Increased storage costs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Snapshot expiration in R2 Data Catalog automatically removes old table snapshots based on your configured retention policy, improving performance and storage costs.&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# Enable catalog-level snapshot expiration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# Expire snapshots older than 7 days, always retain at least 10 recent snapshots&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; catalog&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; snapshot-expiration&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; enable&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; my-bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --older-than-days&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 7&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --retain-last&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 10&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Snapshot expiration uses two parameters to determine which snapshots to remove:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--older-than-days&lt;/code&gt;: age threshold in days&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--retain-last&lt;/code&gt;: minimum snapshot count to retain&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both conditions must be met before a snapshot is expired, ensuring you always retain recent snapshots even if they exceed the age threshold.&lt;/p&gt;
&lt;p&gt;This feature complements &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/table-maintenance/&quot;&gt;automatic compaction&lt;/a&gt;, which optimizes query performance by combining small data files into larger ones. Together, these automatic maintenance operations keep your Iceberg tables performant and cost-efficient without manual intervention.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/table-maintenance/&quot;&gt;Table maintenance&lt;/a&gt; or &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/manage-catalogs/&quot;&gt;Manage catalogs&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate><product>R2</product><category>R2</category><category>R2 Data Catalog</category></item><item><title>Containers, R2 - Mount R2 buckets in Containers</title><link>https://developers.stormtrust.net/changelog/post/2025-11-21-fuse-support-in-containers/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2025-11-21-fuse-support-in-containers/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/containers/&quot;&gt;Containers&lt;/a&gt; now support mounting R2 buckets as FUSE (Filesystem in Userspace) volumes, allowing applications to interact with &lt;a href=&quot;https://developers.stormtrust.net/r2/&quot;&gt;R2&lt;/a&gt; using standard filesystem operations.&lt;/p&gt;
&lt;p&gt;Common use cases include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bootstrapping containers with datasets, models, or dependencies for &lt;a href=&quot;https://developers.stormtrust.net/sandbox/&quot;&gt;sandboxes&lt;/a&gt; and &lt;a href=&quot;https://developers.stormtrust.net/agents/&quot;&gt;agent&lt;/a&gt; environments&lt;/li&gt;
&lt;li&gt;Persisting user configuration or application state without managing downloads&lt;/li&gt;
&lt;li&gt;Accessing large static files without bloating container images or downloading at startup&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;FUSE adapters like &lt;a href=&quot;https://github.com/tigrisdata/tigrisfs&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;tigrisfs&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/s3fs-fuse/s3fs-fuse&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;s3fs&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt;, and &lt;a href=&quot;https://github.com/GoogleCloudPlatform/gcsfuse&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;gcsfuse&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; can be installed in your container image and configured to mount buckets at startup.&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;dockerfile&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;dockerfile&quot; data-nb-lang=&quot;dockerfile&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; alpine:3.20&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# Install FUSE and dependencies&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; apk update &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    apk add --no-cache ca-certificates fuse curl bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# Install tigrisfs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; ARCH=$(uname -m) &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    if [ &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;$ARCH&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;x86_64&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; ]; then ARCH=&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;amd64&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;; fi &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    if [ &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;$ARCH&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;aarch64&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; ]; then ARCH=&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;arm64&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;; fi &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;&quot;tag_name&quot;: &quot;[^&quot;]*&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; | cut -d&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;&quot;&apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; -f4) &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    curl -L &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; -o /tmp/tigrisfs.tar.gz &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    rm /tmp/tigrisfs.tar.gz &amp;amp;&amp;amp; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;    chmod +x /usr/local/bin/tigrisfs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# Create startup script that mounts bucket&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;RUN&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; printf &lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&apos;#!/bin/sh&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;\&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    set -e&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;\&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    mkdir -p /mnt/r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;\&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    R2_ENDPOINT=&quot;https://${R2_ACCOUNT_ID}.r2.cloudflarestorage.com&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;\&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    /usr/local/bin/tigrisfs --endpoint &quot;${R2_ENDPOINT}&quot; -f &quot;${BUCKET_NAME}&quot; /mnt/r2 &amp;amp;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;\&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    sleep 3&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;\&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    ls -lah /mnt/r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;\&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    &apos;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; &amp;gt; /startup.sh &amp;amp;&amp;amp; chmod +x /startup.sh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;CMD&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt; [&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;&quot;/startup.sh&quot;&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;See the &lt;a href=&quot;https://developers.stormtrust.net/containers/examples/r2-fuse-mount/&quot;&gt;Mount R2 buckets with FUSE&lt;/a&gt; example for a complete guide on mounting R2 buckets and/or other S3-compatible storage buckets within your containers.&lt;/p&gt;</description><pubDate>Fri, 21 Nov 2025 00:00:00 GMT</pubDate><product>Containers</product><category>Containers</category><category>R2</category></item><item><title>R2, R2 Data Catalog - R2 Data Catalog table-level compaction</title><link>https://developers.stormtrust.net/changelog/post/2025-10-06-data-catalog-table-compaction/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2025-10-06-data-catalog-table-compaction/</guid><description>&lt;p&gt;You can now enable compaction for individual &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; tables in &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt;, giving you fine-grained control over different workloads.&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-21nrsd&quot;&gt;# Enable compaction for a specific table (no token required)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; catalog&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; compaction&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; enable&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;BUCKE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;T&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;NAMESPAC&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;TABL&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --target-size&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 256&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;This allows you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apply different target file sizes per table&lt;/li&gt;
&lt;li&gt;Disable compaction for specific tables&lt;/li&gt;
&lt;li&gt;Optimize based on table-specific access patterns&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learn more at &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/manage-catalogs/&quot;&gt;Manage catalogs&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 06 Oct 2025 00:00:00 GMT</pubDate><product>R2</product><category>R2</category><category>R2 Data Catalog</category></item><item><title>R2, R2 Data Catalog - R2 Data Catalog now supports compaction</title><link>https://developers.stormtrust.net/changelog/post/2025-09-25-data-catalog-compaction/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2025-09-25-data-catalog-compaction/</guid><description>
&lt;p&gt;You can now enable automatic compaction for &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; tables in &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; to improve query performance.&lt;/p&gt;
&lt;p&gt;Compaction is the process of taking a group of small files and combining them into fewer larger files. This is an important maintenance operation as it helps ensure that query performance remains consistent by reducing the number of files that needs to be scanned.&lt;/p&gt;
&lt;p&gt;To enable automatic compaction in R2 Data Catalog, find it under &lt;strong&gt;R2 Data Catalog&lt;/strong&gt; in your R2 bucket settings in the dashboard.&lt;/p&gt;
&lt;img src=&quot;https://developers.stormtrust.net/cdn-cgi/image/onerror=redirect,width=799,height=400,format=webp/_astro/compaction.MLojYuHL.png&quot; alt=&quot;compaction-dash&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;799&quot; height=&quot;400&quot;&gt;
&lt;p&gt;Or with &lt;a href=&quot;https://developers.stormtrust.net/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt;, run:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; catalog&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; compaction&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; enable&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;BUCKET_NAM&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  --target-size&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 128&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --token&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;API_TOKE&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;To get started with compaction, check out &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/manage-catalogs/&quot;&gt;manage catalogs&lt;/a&gt;. For best practices and limitations, refer to &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/table-maintenance/&quot;&gt;about compaction&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 25 Sep 2025 00:00:00 GMT</pubDate><product>R2</product><category>R2</category><category>R2 Data Catalog</category></item><item><title>R2 - R2 Dashboard experience gets new updates</title><link>https://developers.stormtrust.net/changelog/post/2025-05-01-r2-dashboard-updates/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2025-05-01-r2-dashboard-updates/</guid><description>&lt;p&gt;We&apos;re excited to announce several improvements to the &lt;a href=&quot;https://developers.stormtrust.net/r2/&quot;&gt;Cloudflare R2&lt;/a&gt; dashboard experience that make managing your object storage easier and more intuitive:&lt;/p&gt;
&lt;img src=&quot;https://developers.stormtrust.net/cdn-cgi/image/onerror=redirect,width=2286,height=1600,format=webp/_astro/r2-dashboard-updates.B7WXxzMk.png&quot; alt=&quot;Cloudflare R2 Dashboard&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2286&quot; height=&quot;1600&quot;&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;all-new-settings-page&quot;&gt;All-new settings page&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#all-new-settings-page&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;We&apos;ve redesigned the bucket settings page, giving you a centralized location to manage all your bucket configurations in one place.&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;improved-navigation-and-sharing&quot;&gt;Improved navigation and sharing&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#improved-navigation-and-sharing&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Deeplink support for prefix directories: Navigate through your bucket hierarchy without losing your state. Your browser&apos;s back button now works as expected, and you can share direct links to specific prefix directories with teammates.&lt;/li&gt;
&lt;li&gt;Objects as clickable links: Objects are now proper links that you can copy or &lt;code&gt;CMD + Click&lt;/code&gt; to open in a new tab.&lt;/li&gt;
&lt;/ul&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;clearer-public-access-controls&quot;&gt;Clearer public access controls&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#clearer-public-access-controls&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Renamed &quot;r2.dev domain&quot; to &quot;Public Development URL&quot; for better clarity when exposing bucket contents for non-production workloads.&lt;/li&gt;
&lt;li&gt;Public Access status now clearly displays &quot;Enabled&quot; when your bucket is exposed to the internet (via Public Development URL or Custom Domains).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&apos;ve also made numerous other usability improvements across the board to make your R2 experience smoother and more productive.&lt;/p&gt;</description><pubDate>Thu, 01 May 2025 00:00:00 GMT</pubDate><product>R2</product><category>R2</category></item><item><title>Pipelines, R2, Workers - Cloudflare Pipelines now available in beta</title><link>https://developers.stormtrust.net/changelog/post/2025-04-10-launching-pipelines/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2025-04-10-launching-pipelines/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/pipelines&quot;&gt;Cloudflare Pipelines&lt;/a&gt; is now available in beta, to all users with a &lt;a href=&quot;https://developers.stormtrust.net/workers/platform/pricing&quot;&gt;Workers Paid&lt;/a&gt; plan.&lt;/p&gt;
&lt;p&gt;Pipelines let you ingest high volumes of real time data, without managing the underlying infrastructure. A single pipeline can ingest up to 100 MB of data per second, via HTTP or from a &lt;a href=&quot;https://developers.stormtrust.net/workers&quot;&gt;Worker&lt;/a&gt;. Ingested data is automatically batched, written to output files, and delivered to an &lt;a href=&quot;https://developers.stormtrust.net/r2&quot;&gt;R2 bucket&lt;/a&gt; in your account. You can use Pipelines to build a data lake of clickstream data, or to store events from a Worker.&lt;/p&gt;
&lt;p&gt;Create your first pipeline with a single command:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure nb-code-figure-titled&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;figcaption class=&quot;nb-code-title&quot;&gt;&lt;span class=&quot;nb-code-title-name&quot;&gt;Create a pipeline&lt;/span&gt;&lt;span class=&quot;nb-code-title-lang&quot;&gt;bash&lt;/span&gt;&lt;/figcaption&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler@latest&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; pipelines&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; create&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; my-clickstream-pipeline&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --r2-bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; my-bucket&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;🌀&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Authorizing&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; R2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;my-bucket&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;🌀&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Creating&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; pipeline&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; named&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; &quot;my-clickstream-pipeline&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;✅&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; Successfully&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; created&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; pipeline&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; my-clickstream-pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Id:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    0e00c5ff09b34d018152af98d06f5a1xvc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Name:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  my-clickstream-pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Sources:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  HTTP:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;    Endpoint:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;        https://0e00c5ff09b34d018152af98d06f5a1xvc.pipelines.cloudflare.com/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;    Authentication:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  off&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;    Format:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;          JSON&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  Worker:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;    Format:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  JSON&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Destination:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  Type:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;         R2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  Bucket:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       my-bucket&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  Format:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;       newline-delimited&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; JSON&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  Compression:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  GZIP&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Batch&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; hints:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  Max&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bytes:&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;     100&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; MB&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  Max&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; duration:&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt;  300&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; seconds&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;  Max&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; records:&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;   100,000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;🎉&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; You&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; can&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; now&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; send&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; data&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; your&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; pipeline!&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;Send&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; data&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; to&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; your&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; pipeline&apos;s HTTP endpoint:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;curl &quot;https://0e00c5ff09b34d018152af98d06f5a1xvc.pipelines.cloudflare.com/&quot; -d &apos;[{&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; ...JSON_DATA...&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; }]&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;To send data to your pipeline from a Worker, add the following configuration to your config file:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  &quot;pipelines&quot;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      &quot;pipeline&quot;: &quot;my-clickstream-pipeline&quot;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;      &quot;binding&quot;: &quot;PIPELINE&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;Head over to our &lt;a href=&quot;https://developers.stormtrust.net/pipelines/getting-started&quot;&gt;getting started guide&lt;/a&gt; for an in-depth tutorial to building with Pipelines.&lt;/p&gt;</description><pubDate>Thu, 10 Apr 2025 00:00:00 GMT</pubDate><product>Pipelines</product><category>Pipelines</category><category>R2</category><category>Workers</category></item><item><title>R2, R2 Data Catalog - R2 Data Catalog is a managed Apache Iceberg data catalog built directly into R2 buckets</title><link>https://developers.stormtrust.net/changelog/post/2025-04-10-r2-data-catalog-beta/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2025-04-10-r2-data-catalog-beta/</guid><description>&lt;p&gt;Today, we are launching &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; in open beta, a managed Apache Iceberg catalog built directly into your &lt;a href=&quot;https://developers.stormtrust.net/r2/&quot;&gt;Cloudflare R2&lt;/a&gt; bucket.&lt;/p&gt;
&lt;p&gt;If you are not already familiar with it, &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Apache Iceberg&lt;span class=&quot;external-link&quot;&gt; ↗&lt;/span&gt;&lt;/a&gt; is an open table format designed to handle large-scale analytics datasets stored in object storage, offering ACID transactions and schema evolution. R2 Data Catalog exposes a standard Iceberg REST catalog interface, so you can connect engines like &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/config-examples/spark-scala/&quot;&gt;Spark&lt;/a&gt;, &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/config-examples/snowflake/&quot;&gt;Snowflake&lt;/a&gt;, and &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/config-examples/pyiceberg/&quot;&gt;PyIceberg&lt;/a&gt; to start querying your tables using the tools you already know.&lt;/p&gt;
&lt;p&gt;To enable a data catalog on your R2 bucket, find &lt;strong&gt;R2 Data Catalog&lt;/strong&gt; in your buckets settings in the dashboard, or run:&lt;/p&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot; data-nb-lang=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; catalog&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; enable&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; my-bucket&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;And that&apos;s it. You&apos;ll get a catalog URI and warehouse you can plug into your favorite Iceberg engines.&lt;/p&gt;
&lt;p&gt;Visit our &lt;a href=&quot;https://developers.stormtrust.net/r2-data-catalog/get-started/&quot;&gt;getting started guide&lt;/a&gt; for step-by-step instructions on enabling R2 Data Catalog, creating tables, and running your first queries.&lt;/p&gt;</description><pubDate>Thu, 10 Apr 2025 00:00:00 GMT</pubDate><product>R2</product><category>R2</category><category>R2 Data Catalog</category></item><item><title>R2 - Set retention polices for your R2 bucket with bucket locks</title><link>https://developers.stormtrust.net/changelog/post/2025-03-06-r2-bucket-locks/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2025-03-06-r2-bucket-locks/</guid><description>&lt;p&gt;You can now use &lt;a href=&quot;https://developers.stormtrust.net/r2/buckets/bucket-locks/&quot;&gt;bucket locks&lt;/a&gt; to set retention policies on your &lt;a href=&quot;https://developers.stormtrust.net/r2/buckets/&quot;&gt;R2 buckets&lt;/a&gt; (or specific prefixes within your buckets) for a specified period — or indefinitely. This can help ensure compliance by protecting important data from accidental or malicious deletion.&lt;/p&gt;
&lt;p&gt;Locks give you a few ways to ensure your objects are retained (not deleted or overwritten). You can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lock objects for a specific duration, for example 90 days.&lt;/li&gt;
&lt;li&gt;Lock objects until a certain date, for example January 1, 2030.&lt;/li&gt;
&lt;li&gt;Lock objects indefinitely, until the lock is explicitly removed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Buckets can have up to 1,000 &lt;a href=&quot;https://developers.stormtrust.net/r2/buckets/&quot;&gt;bucket lock rules&lt;/a&gt;. Each rule specifies which objects it covers (via prefix) and how long those objects must remain retained.&lt;/p&gt;
&lt;p&gt;Here are a couple of examples showing how you can configure bucket lock rules using &lt;a href=&quot;https://developers.stormtrust.net/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt;:&lt;/p&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;ensure-all-objects-in-a-bucket-are-retained-for-at-least-180-days&quot;&gt;Ensure all objects in a bucket are retained for at least 180 days&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#ensure-all-objects-in-a-bucket-are-retained-for-at-least-180-days&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; lock&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; add&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;bucke&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --name&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; 180-days-all&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --retention-days&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; 180&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;div tabindex=&quot;-1&quot; class=&quot;heading-wrapper level-h4&quot;&gt;&lt;h4 id=&quot;prevent-deletion-or-overwriting-of-all-logs-indefinitely-via-prefix&quot;&gt;Prevent deletion or overwriting of all logs indefinitely (via prefix)&lt;/h4&gt;&lt;a class=&quot;anchor-link&quot; href=&quot;#prevent-deletion-or-overwriting-of-all-logs-indefinitely-via-prefix&quot;&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;anchor-icon&quot;&gt;&lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot;&gt;&lt;path fill=&quot;currentcolor&quot; d=&quot;m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;figure class=&quot;nb-code-figure&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot; data-nb-lang=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;nb-shiki-1t8gfj&quot;&gt;npx&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; wrangler&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; r2&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; bucket&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; lock&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; add&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt;bucke&lt;/span&gt;&lt;span class=&quot;nb-shiki-140thh&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;nb-shiki-1itgoe&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --name&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; indefinite-logs&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --prefix&lt;/span&gt;&lt;span class=&quot;nb-shiki-mdbnqw&quot;&gt; logs/&lt;/span&gt;&lt;span class=&quot;nb-shiki-dzsirb&quot;&gt; --retention-indefinite&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;
&lt;p&gt;For more information on bucket locks and how to set retention policies for objects in your R2 buckets, refer to our &lt;a href=&quot;https://developers.stormtrust.net/r2/buckets/bucket-locks/&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 06 Mar 2025 00:00:00 GMT</pubDate><product>R2</product><category>R2</category></item><item><title>R2 - Super Slurper now supports migrations from all S3-compatible storage providers</title><link>https://developers.stormtrust.net/changelog/post/2025-02-24-r2-super-slurper-s3-compatible-support/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2025-02-24-r2-super-slurper-s3-compatible-support/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/r2/data-migration/super-slurper/&quot;&gt;Super Slurper&lt;/a&gt; can now migrate data from any S3-compatible object storage provider to &lt;a href=&quot;https://developers.stormtrust.net/r2/&quot;&gt;Cloudflare R2&lt;/a&gt;. This includes transfers from services like MinIO, Wasabi, Backblaze B2, and DigitalOcean Spaces.&lt;/p&gt;
&lt;img src=&quot;https://developers.stormtrust.net/cdn-cgi/image/onerror=redirect,width=757,height=348,format=webp/_astro/super-slurper-s3-compat-screenshot-border.D8Gd5eye.png&quot; alt=&quot;Super Slurper S3-Compatible Source&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;757&quot; height=&quot;348&quot;&gt;
&lt;p&gt;For more information on Super Slurper and how to migrate data from your existing S3-compatible storage buckets to R2, refer to our &lt;a href=&quot;https://developers.stormtrust.net/r2/data-migration/super-slurper/&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 24 Feb 2025 00:00:00 GMT</pubDate><product>R2</product><category>R2</category></item><item><title>R2 - Super Slurper now transfers data to R2 up to 5x faster</title><link>https://developers.stormtrust.net/changelog/post/2025-02-14-r2-super-slurper-faster-migrations/</link><guid isPermaLink="true">https://developers.stormtrust.net/changelog/post/2025-02-14-r2-super-slurper-faster-migrations/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.stormtrust.net/r2/data-migration/super-slurper/&quot;&gt;Super Slurper&lt;/a&gt; now transfers data from cloud object storage providers like AWS S3 and Google Cloud Storage to &lt;a href=&quot;https://developers.stormtrust.net/r2/&quot;&gt;Cloudflare R2&lt;/a&gt; up to 5x faster than it did before.&lt;/p&gt;
&lt;p&gt;We moved from a centralized service to a distributed system built on the Cloudflare Developer Platform — using &lt;a href=&quot;https://developers.stormtrust.net/workers/&quot;&gt;Cloudflare Workers&lt;/a&gt;, &lt;a href=&quot;https://developers.stormtrust.net/durable-objects/&quot;&gt;Durable Objects&lt;/a&gt;, and &lt;a href=&quot;https://developers.stormtrust.net/queues/&quot;&gt;Queues&lt;/a&gt; — to both improve performance and increase system concurrency capabilities (and we&apos;ll share more details about how we did it soon!)&lt;/p&gt;
&lt;img src=&quot;https://developers.stormtrust.net/cdn-cgi/image/onerror=redirect,width=974,height=493,format=webp/_astro/slurper-objects-over-time-border.BFDkMQUw.png&quot; alt=&quot;Super Slurper Objects Migrated&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;974&quot; height=&quot;493&quot;&gt;
&lt;p&gt;&lt;em&gt;Time to copy 75,000 objects from AWS S3 to R2 decreased from 15 minutes 30 seconds (old) to 3 minutes 25 seconds (after performance improvements)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For more information on Super Slurper and how to migrate data from existing object storage to R2, refer to our &lt;a href=&quot;https://developers.stormtrust.net/r2/data-migration/super-slurper/&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 14 Feb 2025 00:00:00 GMT</pubDate><product>R2</product><category>R2</category></item></channel></rss>