<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Cloudflare changelogs | Pipelines</title><description>Cloudflare changelogs for Pipelines</description><link>https://developers.cloudflare.com/changelog/</link><item><title>Pipelines, Workers - Dropped event metrics, typed Pipelines bindings, and improved setup</title><link>https://developers.cloudflare.com/changelog/post/2026-02-24-typed-bindings-setup-improvements-error-metrics/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-24-typed-bindings-setup-improvements-error-metrics/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/pipelines/&quot;&gt;Cloudflare Pipelines&lt;/a&gt; ingests streaming data via &lt;a href=&quot;https://developers.cloudflare.com/workers/&quot;&gt;Workers&lt;/a&gt; or HTTP endpoints, transforms it with SQL, and writes it to &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;R2&lt;/a&gt; as Apache Iceberg tables. Today we&apos;re shipping three improvements to help you understand why streaming events get dropped, catch data quality issues early, and set up Pipelines faster.&lt;/p&gt;
&lt;h4&gt;Dropped event metrics&lt;/h4&gt;
&lt;p&gt;When &lt;a href=&quot;https://developers.cloudflare.com/pipelines/streams/&quot;&gt;stream&lt;/a&gt; events don&apos;t match the expected schema, Pipelines accepts them during ingestion but drops them when attempting to deliver them to the &lt;a href=&quot;https://developers.cloudflare.com/pipelines/sinks/&quot;&gt;sink&lt;/a&gt;. To help you identify the root cause of these issues, we are introducing a new dashboard and metrics that surface dropped events with detailed error messages.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/pipelines-error-log-dash.6JIa7r5d_Z1ILPxd.webp&quot; alt=&quot;The Errors tab in the Cloudflare dashboard showing deserialization errors grouped by type with individual error details&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Dropped events can also be queried programmatically via the new &lt;code&gt;pipelinesUserErrorsAdaptiveGroups&lt;/code&gt; GraphQL dataset. The dataset breaks down failures by specific error type (&lt;code&gt;missing_field&lt;/code&gt;, &lt;code&gt;type_mismatch&lt;/code&gt;, &lt;code&gt;parse_failure&lt;/code&gt;, or &lt;code&gt;null_value&lt;/code&gt;) so you can trace issues back to the source.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;graphql&quot;&gt;&lt;code class=&quot;language-graphql&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GetPipelineUserErrors&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$accountTag&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$pipelineId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;String&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$datetimeStart&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Time&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;$datetimeEnd&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Time&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;viewer &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;accounts(&lt;/span&gt;&lt;span&gt;filter&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; { &lt;/span&gt;&lt;span&gt;accountTag&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; $accountTag }) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pipelinesUserErrorsAdaptiveGroups(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;limit&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;filter&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;pipelineId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; $pipelineId&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;datetime_geq&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; $datetimeStart&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;datetime_leq&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; $datetimeEnd&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;orderBy&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;count_DESC&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;count&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;dimensions &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;errorFamily&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;errorType&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;For the full list of dimensions, error types, and additional query examples, refer to &lt;a href=&quot;https://developers.cloudflare.com/pipelines/observability/metrics/#user-error-metrics&quot;&gt;User error metrics&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Typed Pipelines bindings&lt;/h4&gt;
&lt;p&gt;Sending data to a Pipeline from a Worker previously used a generic &lt;code&gt;Pipeline&amp;#x3C;PipelineRecord&gt;&lt;/code&gt; type, which meant schema mismatches (wrong field names, incorrect types) were only caught at runtime as dropped events.&lt;/p&gt;
&lt;p&gt;Running &lt;code&gt;wrangler types&lt;/code&gt; now generates schema-specific TypeScript types for your &lt;a href=&quot;https://developers.cloudflare.com/pipelines/streams/writing-to-streams/#send-via-workers&quot;&gt;Pipeline bindings&lt;/a&gt;. TypeScript catches missing required fields and incorrect field types at compile time, before your code is deployed.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;ts&quot;&gt;&lt;code class=&quot;language-ts&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;declare&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;namespace&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Cloudflare&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;EcommerceStreamRecord&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;event_type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;product_id&lt;/span&gt;&lt;span&gt;?:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;amount&lt;/span&gt;&lt;span&gt;?:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;number&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;interface&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Env&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;STREAM&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;cloudflare:pipelines&quot;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;Pipeline&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Cloudflare&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;EcommerceStreamRecord&lt;/span&gt;&lt;span&gt;&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/pipelines/streams/writing-to-streams/#typed-pipeline-bindings&quot;&gt;Typed Pipeline bindings&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Improved Pipelines setup&lt;/h4&gt;
&lt;p&gt;Setting up a new Pipeline previously required multiple manual steps: creating an R2 bucket, enabling R2 Data Catalog, generating an API token, and configuring format, compression, and rolling policies individually.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;wrangler pipelines setup&lt;/code&gt; command now offers a &lt;strong&gt;Simple&lt;/strong&gt; setup mode that applies recommended defaults and automatically creates the &lt;a href=&quot;https://developers.cloudflare.com/r2/buckets/&quot;&gt;R2 bucket&lt;/a&gt; and enables &lt;a href=&quot;https://developers.cloudflare.com/r2/data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; if they do not already exist. Validation errors during setup prompt you to retry inline rather than restarting the entire process.&lt;/p&gt;
&lt;p&gt;For a full walkthrough, refer to the &lt;a href=&quot;https://developers.cloudflare.com/pipelines/getting-started/&quot;&gt;Getting started guide&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 24 Feb 2026 00:00:00 GMT</pubDate><product>Pipelines</product><category>Pipelines</category><category>Workers</category></item><item><title>Pipelines - Pipelines now supports SQL transformations and Apache Iceberg</title><link>https://developers.cloudflare.com/changelog/post/2025-09-25-pipelines-sql/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-25-pipelines-sql/</guid><description>&lt;p&gt;Today, we&apos;re launching the new &lt;a href=&quot;https://developers.cloudflare.com/pipelines/&quot;&gt;Cloudflare Pipelines&lt;/a&gt;: a streaming data platform that ingests events, transforms them with &lt;a href=&quot;https://developers.cloudflare.com/pipelines/sql-reference/select-statements/&quot;&gt;SQL&lt;/a&gt;, and writes to &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;R2&lt;/a&gt; as &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot;&gt;Apache Iceberg&lt;/a&gt; tables or Parquet files.&lt;/p&gt;
&lt;p&gt;Pipelines can receive events via &lt;a href=&quot;https://developers.cloudflare.com/pipelines/streams/writing-to-streams/#send-via-http&quot;&gt;HTTP endpoints&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/pipelines/streams/writing-to-streams/#send-via-workers&quot;&gt;Worker bindings&lt;/a&gt;, transform them with SQL, and deliver to R2 with exactly-once guarantees. This makes it easy to build analytics-ready warehouses for server logs, mobile application events, IoT telemetry, or clickstream data without managing streaming infrastructure.&lt;/p&gt;
&lt;p&gt;For example, here&apos;s a pipeline that ingests clickstream events and filters out bot traffic while extracting domain information:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sql&quot;&gt;&lt;code class=&quot;language-sql&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;INSERT into&lt;/span&gt;&lt;span&gt; events_table&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user_id,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;lower&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; event_type,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;to_timestamp_micros(ts_us) &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; event_time,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;regexp_match(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&apos;^https?://([^/]+)&apos;&lt;/span&gt;&lt;span&gt;)[1]  &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; domain,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;referrer,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;user_agent&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; events_json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;WHERE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;event&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;page_view&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;AND&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;NOT&lt;/span&gt;&lt;span&gt; regexp_like(user_agent, &lt;/span&gt;&lt;span&gt;&apos;(?i)bot|spider&apos;&lt;/span&gt;&lt;span&gt;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Get started by creating a pipeline in the dashboard or running a single command in &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pipelines&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Check out our &lt;a href=&quot;https://developers.cloudflare.com/pipelines/getting-started/&quot;&gt;getting started guide&lt;/a&gt; to learn how to create a pipeline that delivers events to an &lt;a href=&quot;https://developers.cloudflare.com/r2/data-catalog/&quot;&gt;Iceberg table&lt;/a&gt; you can query with R2 SQL. Read more about today&apos;s announcement in our &lt;a href=&quot;https://blog.cloudflare.com/cloudflare-data-platform&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 25 Sep 2025 13:00:00 GMT</pubDate><product>Pipelines</product><category>Pipelines</category></item><item><title>Pipelines, R2, Workers - Cloudflare Pipelines now available in beta</title><link>https://developers.cloudflare.com/changelog/post/2025-04-10-launching-pipelines/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-10-launching-pipelines/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/pipelines&quot;&gt;Cloudflare Pipelines&lt;/a&gt; is now available in beta, to all users with a &lt;a href=&quot;https://developers.cloudflare.com/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.cloudflare.com/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.cloudflare.com/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;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;npx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wrangler@latest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pipelines&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-clickstream-pipeline&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--r2-bucket&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-bucket&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;🌀&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Authorizing&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;R2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bucket&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-bucket&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;🌀&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Creating&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pipeline&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;named&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-clickstream-pipeline&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;✅&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Successfully&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;created&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pipeline&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-clickstream-pipeline&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Id:&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;0e00c5ff09b34d018152af98d06f5a1xvc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Name:&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;my-clickstream-pipeline&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Sources:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;HTTP:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Endpoint:&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;https://0e00c5ff09b34d018152af98d06f5a1xvc.pipelines.cloudflare.com/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Authentication:&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Format:&lt;/span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Worker:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Format:&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Destination:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Type:&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;R2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Bucket:&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;my-bucket&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Format:&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;newline-delimited&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Compression:&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;GZIP&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Batch&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hints:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Max&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bytes:&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MB&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Max&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;duration:&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;300&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;seconds&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;Max&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;records:&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;100,000&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;🎉&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;You&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;can&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;now&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;send&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;your&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pipeline!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Send&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;your&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pipeline&apos;s HTTP endpoint:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl &quot;https://0e00c5ff09b34d018152af98d06f5a1xvc.pipelines.cloudflare.com/&quot; -d &apos;[{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;...JSON_DATA...&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}]&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;To send data to your pipeline from a Worker, add the following configuration to your config file:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;pipelines&quot;: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;pipeline&quot;: &quot;my-clickstream-pipeline&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;binding&quot;: &quot;PIPELINE&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Head over to our &lt;a href=&quot;https://developers.cloudflare.com/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></channel></rss>