<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Cloudflare changelogs</title><description>Updates to various Cloudflare products</description><link>https://developers.cloudflare.com/changelog/</link><item><title>Cloudflare One Client - Cloudflare One Client for macOS (version 2026.3.846.0)</title><link>https://developers.cloudflare.com/changelog/post/2026-04-02-warp-macos-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-04-02-warp-macos-ga/</guid><description>&lt;p&gt;A new GA release for the macOS Cloudflare One Client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;The next stable release for macOS will introduce the new Cloudflare One Client UI, providing a cleaner and more intuitive design as well as easier access to common actions and information.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Empty MDM files are now rejected instead of being incorrectly accepted as a single MDM config.&lt;/li&gt;
&lt;li&gt;Fixed an issue in local proxy mode where the client could become unresponsive due to upstream connection timeouts.&lt;/li&gt;
&lt;li&gt;Fixed an issue where the emergency disconnect status of a prior organization persisted after a switch to a different organization.&lt;/li&gt;
&lt;li&gt;Consumer-only CLI commands are now clearly distinguished from Zero Trust commands.&lt;/li&gt;
&lt;li&gt;Added detailed QUIC connection metrics to diagnostic logs for better troubleshooting.&lt;/li&gt;
&lt;li&gt;Added monitoring for tunnel statistics collection timeouts.&lt;/li&gt;
&lt;li&gt;Switched tunnel congestion control algorithm for local proxy mode to Cubic for improved reliability across platforms.&lt;/li&gt;
&lt;li&gt;Fixed initiating managed network detections checks when no network is available, which caused device profile flapping.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 02 Apr 2026 16:28:33 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - Cloudflare One Client for Linux (version 2026.3.846.0)</title><link>https://developers.cloudflare.com/changelog/post/2026-04-02-warp-linux-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-04-02-warp-linux-ga/</guid><description>&lt;p&gt;A new GA release for the Linux Cloudflare One Client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;The next stable release for Linux will introduce the new Cloudflare One Client UI, providing a cleaner and more intuitive design as well as easier access to common actions and information.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Empty MDM files are now rejected instead of being incorrectly accepted as a single MDM config.&lt;/li&gt;
&lt;li&gt;Fixed an issue in local proxy mode where the client could become unresponsive due to upstream connection timeouts.&lt;/li&gt;
&lt;li&gt;Fixed an issue where the emergency disconnect status of a prior organization persisted after a switch to a different organization.&lt;/li&gt;
&lt;li&gt;Consumer-only CLI commands are now clearly distinguished from Zero Trust commands.&lt;/li&gt;
&lt;li&gt;Added detailed QUIC connection metrics to diagnostic logs for better troubleshooting.&lt;/li&gt;
&lt;li&gt;Added monitoring for tunnel statistics collection timeouts.&lt;/li&gt;
&lt;li&gt;Switched tunnel congestion control algorithm for local proxy mode to Cubic for improved reliability across platforms.&lt;/li&gt;
&lt;li&gt;Fixed initiating managed network detections checks when no network is available, which caused device profile flapping.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 02 Apr 2026 15:39:10 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>AI Gateway - Automatically retry on upstream provider failures on AI Gateway</title><link>https://developers.cloudflare.com/changelog/post/2026-04-02-auto-retry-upstream-failures/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-04-02-auto-retry-upstream-failures/</guid><description>&lt;p&gt;AI Gateway now supports automatic retries at the gateway level. When an upstream provider returns an error, your gateway retries the request based on the retry policy you configure, without requiring any client-side changes.&lt;/p&gt;
&lt;p&gt;You can configure the retry count (up to 5 attempts), the delay between retries (from 100ms to 5 seconds), and the backoff strategy (Constant, Linear, or Exponential). These defaults apply to all requests through the gateway, and per-request headers can override them.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/auto-retry-changelog.DoCXZnDy_bIipL.webp&quot; alt=&quot;Retry Requests settings in the AI Gateway dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;This is particularly useful when you do not control the client making the request and cannot implement retry logic on the caller side. For more complex failover scenarios — such as failing across different providers — use &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/features/dynamic-routing/&quot;&gt;Dynamic Routing&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/configuration/manage-gateway/#retry-requests&quot;&gt;Manage gateways&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate><product>AI Gateway</product><category>AI Gateway</category></item><item><title>Logs - BigQuery as Logpush destination</title><link>https://developers.cloudflare.com/changelog/post/2026-04-02-bigquery-destination/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-04-02-bigquery-destination/</guid><description>&lt;p&gt;Cloudflare Logpush now supports &lt;strong&gt;BigQuery&lt;/strong&gt; as a native destination.&lt;/p&gt;
&lt;p&gt;Logs from Cloudflare can be sent to &lt;a href=&quot;https://cloud.google.com/bigquery&quot; target=&quot;_blank&quot;&gt;Google Cloud BigQuery&lt;/a&gt; via &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/&quot;&gt;Logpush&lt;/a&gt;. The destination can be configured through the Logpush UI in the Cloudflare dashboard or by using the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/logpush/subresources/jobs/&quot;&gt;Logpush API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/enable-destinations/bigquery/&quot;&gt;Destination Configuration&lt;/a&gt; documentation.&lt;/p&gt;</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>Workflows, Workers - All Wrangler commands for Workflows now support local development</title><link>https://developers.cloudflare.com/changelog/post/2026-04-01-wrangler-workflows-local/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-04-01-wrangler-workflows-local/</guid><description>&lt;p&gt;All &lt;code&gt;wrangler workflows&lt;/code&gt; commands now accept a &lt;code&gt;--local&lt;/code&gt; flag to target a Workflow running in a local &lt;code&gt;wrangler dev&lt;/code&gt; session instead of the production API.&lt;/p&gt;
&lt;p&gt;You can now manage the full Workflow lifecycle locally, including triggering Workflows, listing instances, pausing, resuming, restarting, terminating, and sending events:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&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;workflows&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--local&lt;/span&gt;&lt;/div&gt;&lt;/div&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;workflows&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;trigger&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-workflow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--local&lt;/span&gt;&lt;/div&gt;&lt;/div&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;workflows&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;list&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-workflow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--local&lt;/span&gt;&lt;/div&gt;&lt;/div&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;workflows&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pause&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-workflow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;INSTANCE_ID&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--local&lt;/span&gt;&lt;/div&gt;&lt;/div&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;workflows&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;send-event&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-workflow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;INSTANCE_ID&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-event&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--local&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;All commands also accept &lt;code&gt;--port&lt;/code&gt; to target a specific &lt;code&gt;wrangler dev&lt;/code&gt; session (defaults to &lt;code&gt;8787&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/workflows/build/local-development/&quot;&gt;Workflows local development&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 01 Apr 2026 12:00:00 GMT</pubDate><product>Workflows</product><category>Workflows</category><category>Workers</category></item><item><title>AI Search - Create, manage, search AI Search instances with Wrangler CLI</title><link>https://developers.cloudflare.com/changelog/post/2026-04-01-ai-search-wrangler-commands/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-04-01-ai-search-wrangler-commands/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-search/&quot;&gt;AI Search&lt;/a&gt; supports a &lt;code&gt;wrangler ai-search&lt;/code&gt; command namespace. Use it to manage instances from the command line.&lt;/p&gt;
&lt;p&gt;The following commands are available:&lt;/p&gt;





































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Command&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;wrangler ai-search create&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Create a new instance with an interactive wizard&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;wrangler ai-search list&lt;/code&gt;&lt;/td&gt;&lt;td&gt;List all instances in your account&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;wrangler ai-search get&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Get details of a specific instance&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;wrangler ai-search update&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Update the configuration of an instance&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;wrangler ai-search delete&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Delete an instance&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;wrangler ai-search search&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Run a search query against an instance&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;wrangler ai-search stats&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Get usage statistics for an instance&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The &lt;code&gt;create&lt;/code&gt; command guides you through setup, choosing a name, source type (&lt;code&gt;r2&lt;/code&gt; or &lt;code&gt;web&lt;/code&gt;), and data source. You can also pass all options as flags for non-interactive use:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ai-search&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-instance&lt;/span&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;span&gt; &lt;/span&gt;&lt;span&gt;--source&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-bucket&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;Use &lt;code&gt;wrangler ai-search search&lt;/code&gt; to query an instance directly from the CLI:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ai-search&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;search&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;how do I configure caching?&quot;&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;All commands support &lt;code&gt;--json&lt;/code&gt; for structured output that scripts and AI agents can parse directly.&lt;/p&gt;
&lt;p&gt;For full usage details, refer to the &lt;a href=&quot;https://developers.cloudflare.com/ai-search/wrangler-commands/&quot;&gt;Wrangler commands documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>Cloudflare One, Access, Gateway - Logs UI refresh</title><link>https://developers.cloudflare.com/changelog/post/2026-04-01-logs-ui-refresh/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-04-01-logs-ui-refresh/</guid><description>&lt;p&gt;Access authentication logs and Gateway activity logs (DNS, Network, and HTTP) now feature a refreshed user interface that gives you more flexibility when viewing and analyzing your logs.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/cf1-new-logs-ui.DxF4x0l-_mRSyH.webp&quot; alt=&quot;Screenshot of the new logs UI showing DNS query logs with customizable columns and filtering options&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;The updated UI includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Filter by field&lt;/strong&gt; - Select any field value to add it as a filter and narrow down your results.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customizable fields&lt;/strong&gt; - Choose which fields to display in the log table. Querying for fewer fields improves log loading performance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;View details&lt;/strong&gt; - Select a timestamp to view the full details of a log entry.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Switch to classic view&lt;/strong&gt; - Return to the previous log viewer interface if needed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/logs/dashboard-logs/access-authentication-logs/&quot;&gt;Access authentication logs&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/logs/dashboard-logs/gateway-logs/&quot;&gt;Gateway activity logs&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category><category>Access</category><category>Gateway</category></item><item><title>Radar - Routing Section Expansion on Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2026-04-01-radar-routing-section/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-04-01-radar-routing-section/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; now features an expanded &lt;a href=&quot;https://radar.cloudflare.com/routing&quot; target=&quot;_blank&quot;&gt;Routing section&lt;/a&gt; with dedicated sub-pages, providing a more organized and in-depth view of the global routing ecosystem. This restructuring lays the groundwork for additional routing features and widgets coming in the near future.&lt;/p&gt;
&lt;h4&gt;Dedicated sub-pages&lt;/h4&gt;
&lt;p&gt;The single Routing page has been split into three focused sub-pages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://radar.cloudflare.com/routing&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/a&gt; — Routing statistics, IP address space trends, BGP announcements, and the new Top 100 ASes ranking.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://radar.cloudflare.com/routing/rpki&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;RPKI&lt;/strong&gt;&lt;/a&gt; — RPKI validation status, ASPA deployment trends, and per-ASN ASPA provider details.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://radar.cloudflare.com/routing/anomalies&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Anomalies&lt;/strong&gt;&lt;/a&gt; — BGP route leaks, origin hijacks, and Multi-Origin AS (MOAS) conflicts.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/routing-section-menu.CEq17il__Z247uNQ.webp&quot; alt=&quot;Screenshot of the routing section menu&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;New widgets&lt;/h4&gt;
&lt;p&gt;The routing overview now includes a &lt;strong&gt;Top 100 ASes&lt;/strong&gt; table ranking autonomous systems by customer cone size, IPv4 address space, or IPv6 address space. Users can switch between rankings using a segmented control.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/top-100-ases-table.ZBSReN_5_ZvHO93.webp&quot; alt=&quot;Screenshot of the top-100 ASes table&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;The RPKI sub-page introduces a &lt;strong&gt;RPKI validation&lt;/strong&gt; view for per-ASN pages, showing prefixes grouped by RPKI validation status (Valid, Invalid, Unknown) with visibility scores.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/rpki-validation-view.D3eQih4x_1IAam0.webp&quot; alt=&quot;Screenshot of the RPKI validation view&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;Improved IP address space chart&lt;/h4&gt;
&lt;p&gt;The &lt;a href=&quot;https://radar.cloudflare.com/routing&quot; target=&quot;_blank&quot;&gt;IP address space&lt;/a&gt; chart now displays both IPv4 and IPv6 trends stacked vertically and is available on global, country, and AS views.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/combined-ipv4-ipv6-space.DQ5qc8la_281LcA.webp&quot; alt=&quot;Screenshot of the IPv4 and IPv6 combined IP space chart&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://radar.cloudflare.com/routing&quot; target=&quot;_blank&quot;&gt;Radar routing section&lt;/a&gt; to explore the data, and stay tuned for more routing insights coming soon.&lt;/p&gt;</description><pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>Rules - New QUIC RTT and delivery rate fields</title><link>https://developers.cloudflare.com/changelog/post/2026-04-01-l4-transport-telemetry-fields/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-04-01-l4-transport-telemetry-fields/</guid><description>&lt;p&gt;Two new fields are now available in rule expressions that surface Layer 4 transport telemetry from the client connection. Together with the existing &lt;a href=&quot;https://developers.cloudflare.com/ruleset-engine/rules-language/fields/reference/&quot;&gt;&lt;code&gt;cf.timings.client_tcp_rtt_msec&lt;/code&gt;&lt;/a&gt; field, these fields give you a complete picture of connection quality for both TCP and QUIC traffic — enabling transport-aware rules without requiring any client-side changes.&lt;/p&gt;
&lt;p&gt;Previously, QUIC RTT and delivery rate data was only available via the &lt;code&gt;Server-Timing: cfL4&lt;/code&gt; response header. These new fields make the same data available directly in rule expressions, so you can use them in Transform Rules, WAF Custom Rules, and other phases that support dynamic fields.&lt;/p&gt;
&lt;h4&gt;New fields&lt;/h4&gt;




















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Field&lt;/th&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;cf.timings.client_quic_rtt_msec&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Integer&lt;/td&gt;&lt;td&gt;The smoothed QUIC round-trip time (RTT) between Cloudflare and the client in milliseconds. Only populated for QUIC (HTTP/3) connections. Returns &lt;code&gt;0&lt;/code&gt; for TCP connections.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;cf.edge.l4.delivery_rate&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Integer&lt;/td&gt;&lt;td&gt;The most recent data delivery rate estimate for the client connection, in bytes per second. Returns &lt;code&gt;0&lt;/code&gt; when L4 statistics are not available for the request.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;Example: Route slow connections to a lightweight origin&lt;/h4&gt;
&lt;p&gt;Use a request header transform rule to tag requests from high-latency connections, so your origin can serve a lighter page variant:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rule expression:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cf.timings.client_tcp_rtt_msec &gt; 200 or cf.timings.client_quic_rtt_msec &gt; 200&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;&lt;strong&gt;Header modifications:&lt;/strong&gt;&lt;/p&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Operation&lt;/th&gt;&lt;th&gt;Header name&lt;/th&gt;&lt;th&gt;Value&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Set&lt;/td&gt;&lt;td&gt;&lt;code&gt;X-High-Latency&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;Example: Match low-bandwidth connections&lt;/h4&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cf.edge.l4.delivery_rate &gt; 0 and cf.edge.l4.delivery_rate &amp;#x3C; 100000&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/rules/transform/request-header-modification/&quot;&gt;Request Header Transform Rules&lt;/a&gt; and the &lt;a href=&quot;https://developers.cloudflare.com/ruleset-engine/rules-language/fields/reference/&quot;&gt;fields reference&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Workers - Deploy Hooks are now available for Workers Builds</title><link>https://developers.cloudflare.com/changelog/post/2026-04-01-deploy-hooks/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-04-01-deploy-hooks/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/&quot;&gt;Workers Builds&lt;/a&gt; now supports Deploy Hooks — trigger builds from your headless CMS, a Cron Trigger, a Slack bot, or any system that can send an HTTP request.&lt;/p&gt;
&lt;p&gt;Each Deploy Hook is a unique URL tied to a specific branch. Send it a &lt;code&gt;POST&lt;/code&gt; and your Worker builds and deploys.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.cloudflare.com/client/v4/workers/builds/deploy_hooks/&amp;#x3C;DEPLOY_HOOK_ID&gt;&quot;&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;To create one, go to &lt;strong&gt;Workers &amp;#x26; Pages&lt;/strong&gt; &gt; your Worker &gt; &lt;strong&gt;Settings&lt;/strong&gt; &gt; &lt;strong&gt;Builds&lt;/strong&gt; &gt; &lt;strong&gt;Deploy Hooks&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Since a Deploy Hook is a URL, you can also call it from another Worker. For example, a Worker with a &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/cron-triggers/&quot;&gt;Cron Trigger&lt;/a&gt; can rebuild your project on a schedule:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scheduled&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;env&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ctx&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;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;waitUntil&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fetch&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;DEPLOY_HOOK_URL&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; method&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;POST&quot;&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scheduled&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;ScheduledEvent&lt;/span&gt;&lt;span&gt;,&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;span&gt;Env&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ExecutionContext&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt;&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;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;waitUntil&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fetch&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;DEPLOY_HOOK_URL&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; method&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;POST&quot;&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;/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;satisfies&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ExportedHandler&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Env&lt;/span&gt;&lt;span&gt;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;You can also use Deploy Hooks to &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/deploy-hooks/#cms-integration&quot;&gt;rebuild when your CMS publishes new content&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/deploy-hooks/#deploy-from-a-slack-slash-command&quot;&gt;deploy from a Slack slash command&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Built-in optimizations&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Automatic deduplication&lt;/strong&gt;: If a Deploy Hook fires multiple times before the first build starts running, redundant builds are automatically skipped. This keeps your build queue clean when webhooks retry or CMS events arrive in bursts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Last triggered&lt;/strong&gt;: The dashboard shows when each hook was last triggered.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build source&lt;/strong&gt;: Your Worker&apos;s build history shows which Deploy Hook started each build by name.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deploy Hooks are rate limited to 10 builds per minute per Worker and 100 builds per minute per account. For all limits, see &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/limits-and-pricing/&quot;&gt;Limits &amp;#x26; pricing&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To get started, read the &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/deploy-hooks/&quot;&gt;Deploy Hooks documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - New L4 transport telemetry fields in Workers</title><link>https://developers.cloudflare.com/changelog/post/2026-04-01-l4-transport-telemetry-fields/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-04-01-l4-transport-telemetry-fields/</guid><description>&lt;p&gt;Three new properties are now available on &lt;code&gt;request.cf&lt;/code&gt; in Workers that expose Layer 4 transport telemetry from the client connection. These properties let your Worker make decisions based on real-time connection quality signals — such as round-trip time and data delivery rate — without requiring any client-side changes.&lt;/p&gt;
&lt;p&gt;Previously, this telemetry was only available via the &lt;code&gt;Server-Timing: cfL4&lt;/code&gt; response header. These new properties surface the same data directly in the Workers runtime, so you can use it for routing, logging, or response customization.&lt;/p&gt;
&lt;h4&gt;New properties&lt;/h4&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Property&lt;/th&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;clientTcpRtt&lt;/code&gt;&lt;/td&gt;&lt;td&gt;number | undefined&lt;/td&gt;&lt;td&gt;The smoothed TCP round-trip time (RTT) between Cloudflare and the client in milliseconds. Only present for TCP connections (HTTP/1, HTTP/2). For example, &lt;code&gt;22&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;clientQuicRtt&lt;/code&gt;&lt;/td&gt;&lt;td&gt;number | undefined&lt;/td&gt;&lt;td&gt;The smoothed QUIC round-trip time (RTT) between Cloudflare and the client in milliseconds. Only present for QUIC connections (HTTP/3). For example, &lt;code&gt;42&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;edgeL4&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Object | undefined&lt;/td&gt;&lt;td&gt;Layer 4 transport statistics. Contains &lt;code&gt;deliveryRate&lt;/code&gt; (number) — the most recent data delivery rate estimate for the connection, in bytes per second. For example, &lt;code&gt;123456&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;Example: Log connection quality metrics&lt;/h4&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cf&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;cf&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rtt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cf&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clientTcpRtt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;??&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cf&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clientQuicRtt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;??&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deliveryRate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cf&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;edgeL4&lt;/span&gt;&lt;span&gt;?.&lt;/span&gt;&lt;span&gt;deliveryRate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;??&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;transport&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cf&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;clientTcpRtt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;TCP&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;QUIC&quot;&lt;/span&gt;&lt;span&gt;;&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Transport: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;transport&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;, RTT: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;rtt&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;ms, Delivery rate: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;deliveryRate&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; B/s`&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Headers&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&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;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;X-Client-RTT&quot;&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;span&gt;rtt&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;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;X-Delivery-Rate&quot;&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;span&gt;deliveryRate&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;span&gt;headers&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;/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/workers/runtime-apis/request/&quot;&gt;Workers Runtime APIs: Request&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>DNS - Internal DNS - now in open beta</title><link>https://developers.cloudflare.com/changelog/post/2026-03-31-internal-dns-open-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-31-internal-dns-open-beta/</guid><description>&lt;p&gt;Internal DNS is now in open beta.&lt;/p&gt;
&lt;h4&gt;Who can use it?&lt;/h4&gt;
&lt;p&gt;Internal DNS is bundled as a part of Cloudflare Gateway and is now available to every Enterprise customer with one of the following subscriptions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cloudflare Zero Trust Enterprise&lt;/li&gt;
&lt;li&gt;Cloudflare Gateway Enterprise&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To learn more and get started, refer to the &lt;a href=&quot;https://developers.cloudflare.com/dns/internal-dns/&quot;&gt;Internal DNS documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate><product>DNS</product><category>DNS</category></item><item><title>WAF - WAF Release - 2026-03-30</title><link>https://developers.cloudflare.com/changelog/post/2026-03-30-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-30-waf-release/</guid><description>&lt;p&gt;This week&apos;s release introduces new detections for a critical authentication bypass vulnerability in Fortinet products (CVE-2025-59718), alongside three new generic detection rules designed to identify and block HTTP Parameter Pollution attempts. Additionally, this release includes targeted protection for a high-impact unrestricted file upload vulnerability in Magento and Adobe Commerce.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;CVE-2025-59718: An improper cryptographic signature verification vulnerability in Fortinet FortiOS, FortiProxy, and FortiSwitchManager. This may allow an unauthenticated attacker to bypass the FortiCloud SSO login authentication using a maliciously crafted SAML message, if that feature is enabled on the device.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Magento 2 - Unrestricted File Upload: A critical flaw in Magento and Adobe Commerce allows unauthenticated attackers to bypass security checks and upload malicious files to the server, potentially leading to Remote Code Execution (RCE).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Successful exploitation of the Fortinet and Magento vulnerabilities could allow unauthenticated attackers to gain administrative control or deploy webshells, leading to complete server compromise and data theft.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;4f7d513cea424c2a853881982f7f95e9 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic Rules - Parameter Pollution - Body&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;60d023f3be414d379428add3319731a4 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Generic Rules - Parameter Pollution - Header - Form&lt;/td&gt;
&lt;td&gt;Log&lt;/td&gt;
&lt;td&gt;Disabled&lt;/td&gt;
&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;2dde02d792ad41ec8fd65c2bdef262dd &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Generic Rules - Parameter Pollution - URI&lt;/td&gt;
&lt;td&gt;Log&lt;/td&gt;
&lt;td&gt;Disabled&lt;/td&gt;
&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ab8a96ed13034d56a81a79e570a36147 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Magento 2 - Unrestricted file upload&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;0a13a38dd81c44688950444e2ffcca9f &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Fortinet FortiCloud SSO - Authentication Bypass - CVE:CVE-2025-59718&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>WAF - WAF Release - Scheduled changes for 2026-04-06</title><link>https://developers.cloudflare.com/changelog/post/scheduled-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/scheduled-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Announcement Date&lt;/th&gt;&lt;th&gt;Release Date&lt;/th&gt;&lt;th&gt;Release Behavior&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;2026-03-30&lt;/td&gt;&lt;td&gt;2026-04-06&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;73ae1cf103da4bacaa2e1a610aa410af &lt;/td&gt;&lt;td&gt;Generic Rules - Command Execution - 5 - Body&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-03-30&lt;/td&gt;&lt;td&gt;2026-04-06&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;a88a85b0cc5a4bc2abead6289131ec2f &lt;/td&gt;&lt;td&gt;Generic Rules - Command Execution - 5 - Header&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-03-30&lt;/td&gt;&lt;td&gt;2026-04-06&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;28518cdc40544979bbd86720551eb9e5 &lt;/td&gt;&lt;td&gt;Generic Rules - Command Execution - 5 - URI&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-03-30&lt;/td&gt;&lt;td&gt;2026-04-06&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;1177993d53a1467997002b44d46229eb &lt;/td&gt;&lt;td&gt;MCP Server - Remote Code Execution - CVE:CVE-2026-23744&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-03-30&lt;/td&gt;&lt;td&gt;2026-04-06&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;3d43cdfbc3c14584942f8bc4a864b9c2 &lt;/td&gt;&lt;td&gt;XSS - OnEvents - Cookies&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-03-30&lt;/td&gt;&lt;td&gt;2026-04-06&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;c9dbce2c1da94b24916e37559712a863 &lt;/td&gt;&lt;td&gt;SQLi - Evasion - Body&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-03-30&lt;/td&gt;&lt;td&gt;2026-04-06&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;64d812e6d5844d7c9d7a44a440732d48 &lt;/td&gt;&lt;td&gt;SQLi - Evasion - Headers&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-03-30&lt;/td&gt;&lt;td&gt;2026-04-06&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;50de9369ef7c45928a5dfb34e68a99b5 &lt;/td&gt;&lt;td&gt;SQLi - Evasion - URI&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-03-30&lt;/td&gt;&lt;td&gt;2026-04-06&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;765ffb5c67b94c9589106c843e8143d2 &lt;/td&gt;&lt;td&gt;SQLi - LIKE 3 - Body&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-03-30&lt;/td&gt;&lt;td&gt;2026-04-06&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;5c3dbd4f115e47c781491fcd70e7fb97 &lt;/td&gt;&lt;td&gt;SSQLi - LIKE 3 - URI&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-03-30&lt;/td&gt;&lt;td&gt;2026-04-06&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;89fa6027a0334949b1cb2e654c538bd9 &lt;/td&gt;&lt;td&gt;SQLi - UNION - 2 - Body&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-03-30&lt;/td&gt;&lt;td&gt;2026-04-06&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;05946b3458364f1b9d4819d561c439c9 &lt;/td&gt;&lt;td&gt;SQLi - UNION - 2 - URI&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-03-30&lt;/td&gt;&lt;td&gt;2026-04-06&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;b2fe5c2a39df4609b6d39908cf33ea10 &lt;/td&gt;&lt;td&gt;SolarWinds - Auth Bypass - CVE:CVE-2025-40552&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - New RFC 9440 mTLS certificate fields in Workers</title><link>https://developers.cloudflare.com/changelog/post/2026-03-27-rfc9440-mtls-fields/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-27-rfc9440-mtls-fields/</guid><description>&lt;p&gt;Four new fields are now available on &lt;code&gt;request.cf.tlsClientAuth&lt;/code&gt; in Workers for requests that include a mutual TLS (mTLS) client certificate. These fields encode the client certificate and its intermediate chain in &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9440&quot; target=&quot;_blank&quot;&gt;RFC 9440&lt;/a&gt; format — the same standard format used by the &lt;code&gt;Client-Cert&lt;/code&gt; and &lt;code&gt;Client-Cert-Chain&lt;/code&gt; HTTP headers — so your Worker can forward them directly to your origin without any custom parsing or encoding logic.&lt;/p&gt;
&lt;h4&gt;New fields&lt;/h4&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Field&lt;/th&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;certRFC9440&lt;/code&gt;&lt;/td&gt;&lt;td&gt;String&lt;/td&gt;&lt;td&gt;The client leaf certificate in RFC 9440 format (&lt;code&gt;:base64-DER:&lt;/code&gt;). Empty if no client certificate was presented.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;certRFC9440TooLarge&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Boolean&lt;/td&gt;&lt;td&gt;&lt;code&gt;true&lt;/code&gt; if the leaf certificate exceeded 10 KB and was omitted from &lt;code&gt;certRFC9440&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;certChainRFC9440&lt;/code&gt;&lt;/td&gt;&lt;td&gt;String&lt;/td&gt;&lt;td&gt;The intermediate certificate chain in RFC 9440 format as a comma-separated list. Empty if no intermediates were sent or if the chain exceeded 16 KB.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;certChainRFC9440TooLarge&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Boolean&lt;/td&gt;&lt;td&gt;&lt;code&gt;true&lt;/code&gt; if the intermediate chain exceeded 16 KB and was omitted from &lt;code&gt;certChainRFC9440&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;Example: forwarding client certificate headers to your origin&lt;/h4&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tls&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;cf&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;tlsClientAuth&lt;/span&gt;&lt;span&gt;;&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;// Only forward if cert was verified and chain is complete&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;tls&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;/span&gt;&lt;span&gt;tls&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;certVerified&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;||&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tls&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;certRevoked&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;||&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tls&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;certChainRFC9440TooLarge&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Unauthorized&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;401&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;/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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Headers&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&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;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Client-Cert&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tls&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;certRFC9440&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;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Client-Cert-Chain&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tls&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;certChainRFC9440&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;span&gt;headers&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;/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/ssl/client-certificates/client-certificate-variables/#workers-variables&quot;&gt;Client certificate variables&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/service-credentials/mutual-tls-authentication/&quot;&gt;Mutual TLS authentication&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 27 Mar 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Containers - Easily connect Containers and Sandboxes to Workers</title><link>https://developers.cloudflare.com/changelog/post/2026-03-26-outbound-workers/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-26-outbound-workers/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/containers/&quot;&gt;Containers&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/sandbox/&quot;&gt;Sandboxes&lt;/a&gt; now support connecting directly to Workers over HTTP. This allows you to call Workers
functions and &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/&quot;&gt;bindings&lt;/a&gt;, like &lt;a href=&quot;https://developers.cloudflare.com/kv&quot;&gt;KV&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;R2&lt;/a&gt;, from within the container at specific hostnames.&lt;/p&gt;
&lt;h4&gt;Run Worker code&lt;/h4&gt;
&lt;p&gt;Define an &lt;code&gt;outbound&lt;/code&gt; handler to capture any HTTP request or use &lt;code&gt;outboundByHost&lt;/code&gt; to capture requests to individual hostnames and IPs.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyApp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Sandbox&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;MyApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;outbound&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;// you can run arbitrary functions defined in your Worker on any HTTP request&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;someWorkersFunction&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;MyApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;outboundByHost&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;&quot;my.worker&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;anotherFunction&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&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;/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;In this example, requests from the container to &lt;code&gt;http://my.worker&lt;/code&gt; will run the function defined within &lt;code&gt;outboundByHost&lt;/code&gt;,
and any other HTTP requests will run the &lt;code&gt;outbound&lt;/code&gt; handler. These handlers run entirely inside the Workers runtime,
outside of the container sandbox.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;TLS support coming soon&lt;/p&gt;&lt;div&gt;&lt;p&gt;Containers and Sandboxes currently only intercept HTTP traffic. HTTPS interception is coming soon. This will enable using Workers as a transparent proxy for credential injection.&lt;/p&gt;&lt;p&gt;Even though this is just using HTTP, traffic to Workers is secure and runs on the same machine as the container.
If needed, you can also upgrade requests to TLS from the Worker itself.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;h4&gt;Access Workers bindings&lt;/h4&gt;
&lt;p&gt;Each handler has access to &lt;code&gt;env&lt;/code&gt;, so it can call any binding set in &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/configuration/#bindings&quot;&gt;Wrangler config&lt;/a&gt;.
Code inside the container makes a standard HTTP request to that hostname and the outbound Worker translates it into a binding call.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyApp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Sandbox&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;MyApp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;outboundByHost&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;&quot;my.kv&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;URL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;pathname&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;KV&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;key&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;??&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;200&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;404&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;my.r2&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;URL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;pathname&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;slice&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;object&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;BUCKET&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;key&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;object&lt;/span&gt;&lt;span&gt;?.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;??&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;object&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;200&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;404&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;/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;Now, from inside the container sandbox, &lt;code&gt;curl http://my.kv/some-key&lt;/code&gt; will access &lt;a href=&quot;https://developers.cloudflare.com/kv&quot;&gt;Workers KV&lt;/a&gt; and &lt;code&gt;curl http://my.r2/some-object&lt;/code&gt; will access &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;R2&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Access Durable Object state&lt;/h4&gt;
&lt;p&gt;Use &lt;code&gt;ctx.containerId&lt;/code&gt; to reference the container&apos;s automatically provisioned &lt;a href=&quot;https://developers.cloudflare.com/durable-objects&quot;&gt;Durable Object&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyContainer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Container&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;MyContainer&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;outboundByHost&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;&quot;get-state.do&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;MY_CONTAINER&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;idFromString&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;containerId&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;MY_CONTAINER&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getStateForKey&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&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;/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;This provides an easy way to associate state with any container instance, and includes a &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/get-started/#2-write-a-durable-object-class-using-sql-api&quot;&gt;built-in SQLite database&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Get Started Today&lt;/h4&gt;
&lt;p&gt;Upgrade to &lt;code&gt;@cloudflare/containers&lt;/code&gt; version 0.2.0 or later, or &lt;code&gt;@cloudflare/sandbox&lt;/code&gt; version 0.8.0 or later to use outbound Workers.&lt;/p&gt;
&lt;p&gt;Refer to &lt;a href=&quot;https://developers.cloudflare.com/containers/platform-details/outbound-traffic/&quot;&gt;Containers outbound traffic&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/sandbox/guides/outbound-traffic/&quot;&gt;Sandboxes outbound traffic&lt;/a&gt; for more details and examples.&lt;/p&gt;</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate><product>Containers</product><category>Containers</category></item><item><title>Radar - URL Scanner improvements on Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2026-03-26-url-scanner-improvements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-26-url-scanner-improvements/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; ships several improvements to the &lt;a href=&quot;https://radar.cloudflare.com/scan&quot; target=&quot;_blank&quot;&gt;URL Scanner&lt;/a&gt; that make scan reports more informative and easier to share:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Live screenshots&lt;/strong&gt; — the summary card now includes an option to capture a live screenshot of the scanned URL on demand using the &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/&quot;&gt;Browser Rendering&lt;/a&gt; API.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Save as PDF&lt;/strong&gt; — a new button generates a print-optimized document aggregating all tab contents (Summary, Security, Network, Behavior, and Indicators) into a single file.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Download as JSON&lt;/strong&gt; — raw scan data is available as a JSON download for programmatic use.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redesigned summary layout&lt;/strong&gt; — page information and security details are now displayed side by side with the screenshot, with a layout that adapts to narrower viewports.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;File downloads&lt;/strong&gt; — downloads are separated into a dedicated card with expandable rows showing each file&apos;s source URL and SHA256 hash.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Detailed IP address data&lt;/strong&gt; — the Network tab now includes additional detail per IP address observed during the scan.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/url-scanner-summary-redesign.DO4wDjQ3_ZcLVPN.webp&quot; alt=&quot;Screenshot of the redesigned URL Scanner summary on Radar&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Explore these improvements on the &lt;a href=&quot;https://radar.cloudflare.com/scan&quot; target=&quot;_blank&quot;&gt;Cloudflare Radar URL Scanner&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>logpush, Logs - Logpush — More granular timestamps</title><link>https://developers.cloudflare.com/changelog/post/2026-03-25-logpush-granular-timestamps/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-25-logpush-granular-timestamps/</guid><description>&lt;p&gt;Logpush now supports higher-precision timestamp formats for log output. You can configure jobs to output timestamps at millisecond or nanosecond precision. This is available in both the Logpush UI in the Cloudflare dashboard and the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/logpush/subresources/jobs/&quot;&gt;Logpush API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To use the new formats, set &lt;code&gt;timestamp_format&lt;/code&gt; in your Logpush job&apos;s &lt;code&gt;output_options&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;rfc3339ms&lt;/code&gt; — &lt;code&gt;2024-02-17T23:52:01.123Z&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rfc3339ns&lt;/code&gt; — &lt;code&gt;2024-02-17T23:52:01.123456789Z&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Default timestamp formats apply unless explicitly set. The dashboard defaults to &lt;code&gt;rfc3339&lt;/code&gt; and the API defaults to &lt;code&gt;unixnano&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/log-output-options/&quot;&gt;Log output options&lt;/a&gt; documentation.&lt;/p&gt;</description><pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate><product>logpush</product><category>logpush</category><category>Logs</category></item><item><title>Rules - New mTLS certificate fields for Transform Rules</title><link>https://developers.cloudflare.com/changelog/post/2026-03-25-rfc9440-mtls-fields/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-25-rfc9440-mtls-fields/</guid><description>&lt;p&gt;Cloudflare now exposes four new fields in the Transform Rules phase that encode client certificate data in &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9440&quot; target=&quot;_blank&quot;&gt;RFC 9440&lt;/a&gt; format. Previously, forwarding client certificate information to your origin required custom parsing of PEM-encoded fields or non-standard HTTP header formats. These new fields produce output in the standardized &lt;code&gt;Client-Cert&lt;/code&gt; and &lt;code&gt;Client-Cert-Chain&lt;/code&gt; header format defined by RFC 9440, so your origin can consume them directly without any additional decoding logic.&lt;/p&gt;
&lt;p&gt;Each certificate is DER-encoded, Base64-encoded, and wrapped in colons. For example, &lt;code&gt;:MIIDsT...Vw==:&lt;/code&gt;. A chain of intermediates is expressed as a comma-separated list of such values.&lt;/p&gt;
&lt;h4&gt;New fields&lt;/h4&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Field&lt;/th&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;cf.tls_client_auth.cert_rfc9440&lt;/code&gt;&lt;/td&gt;&lt;td&gt;String&lt;/td&gt;&lt;td&gt;The client leaf certificate in RFC 9440 format. Empty if no client certificate was presented.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;cf.tls_client_auth.cert_rfc9440_too_large&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Boolean&lt;/td&gt;&lt;td&gt;&lt;code&gt;true&lt;/code&gt; if the leaf certificate exceeded 10 KB and was omitted. In practice this will almost always be &lt;code&gt;false&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;cf.tls_client_auth.cert_chain_rfc9440&lt;/code&gt;&lt;/td&gt;&lt;td&gt;String&lt;/td&gt;&lt;td&gt;The intermediate certificate chain in RFC 9440 format as a comma-separated list. Empty if no intermediate certificates were sent or if the chain exceeded 16 KB.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;cf.tls_client_auth.cert_chain_rfc9440_too_large&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Boolean&lt;/td&gt;&lt;td&gt;&lt;code&gt;true&lt;/code&gt; if the intermediate chain exceeded 16 KB and was omitted.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The chain encoding follows the same ordering as the TLS handshake: the certificate closest to the leaf appears first, working up toward the trust anchor. The root certificate is not included.&lt;/p&gt;
&lt;h4&gt;Example: Forwarding client certificate headers to your origin server&lt;/h4&gt;
&lt;p&gt;Add a request header transform rule to set the &lt;code&gt;Client-Cert&lt;/code&gt; and &lt;code&gt;Client-Cert-Chain&lt;/code&gt; headers on requests forwarded to your origin server. For example, to forward headers for verified, non-revoked certificates:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rule expression:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cf.tls_client_auth.cert_verified and not cf.tls_client_auth.cert_revoked&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;&lt;strong&gt;Header modifications:&lt;/strong&gt;&lt;/p&gt;




















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Operation&lt;/th&gt;&lt;th&gt;Header name&lt;/th&gt;&lt;th&gt;Value&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Set&lt;/td&gt;&lt;td&gt;&lt;code&gt;Client-Cert&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;cf.tls_client_auth.cert_rfc9440&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Set&lt;/td&gt;&lt;td&gt;&lt;code&gt;Client-Cert-Chain&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;cf.tls_client_auth.cert_chain_rfc9440&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;To get the most out of these fields, upload your client CA certificate to Cloudflare so that Cloudflare validates the client certificate at the edge and populates &lt;code&gt;cf.tls_client_auth.cert_verified&lt;/code&gt; and &lt;code&gt;cf.tls_client_auth.cert_revoked&lt;/code&gt;.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;Prevent header injection&lt;/p&gt;&lt;div&gt;&lt;p&gt;You should ensure that &lt;code&gt;Client-Cert&lt;/code&gt; and &lt;code&gt;Client-Cert-Chain&lt;/code&gt; headers received by your origin server can only originate from this transform rule — any client could send these headers directly.&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;If you use WAF custom rules to block requests with invalid mTLS connections:&lt;/strong&gt; The transform rule is sufficient. For all requests that reach your origin server, the rule will overwrite any existing &lt;code&gt;Client-Cert&lt;/code&gt; and &lt;code&gt;Client-Cert-Chain&lt;/code&gt; headers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If you do not enforce mTLS at the WAF:&lt;/strong&gt; Add another transform rule that removes any incoming &lt;code&gt;Client-Cert&lt;/code&gt; and &lt;code&gt;Client-Cert-Chain&lt;/code&gt; headers from all requests (use expression &lt;code&gt;true&lt;/code&gt;), ordered before the rule above. This ensures your origin server cannot receive client-supplied values for these HTTP headers.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/service-credentials/mutual-tls-authentication/&quot;&gt;Mutual TLS authentication&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/rules/transform/request-header-modification/&quot;&gt;Request Header Transform Rules&lt;/a&gt;, and the &lt;a href=&quot;https://developers.cloudflare.com/ruleset-engine/rules-language/fields/reference/&quot;&gt;fields reference&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Workers - Declare required secrets in your Wrangler configuration</title><link>https://developers.cloudflare.com/changelog/post/2026-03-24-secrets-config-property/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-24-secrets-config-property/</guid><description>&lt;p&gt;The new &lt;code&gt;secrets&lt;/code&gt; configuration property lets you declare the secret names your Worker requires in your Wrangler configuration file. Required secrets are validated during local development and deploy, and used as the source of truth for type generation.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;secrets&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;required&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;API_KEY&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;DB_PASSWORD&quot;&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;secrets&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;required&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;span&gt; &lt;/span&gt;&lt;span&gt;&quot;API_KEY&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;DB_PASSWORD&quot;&lt;/span&gt;&lt;span&gt; &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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;Local development&lt;/h4&gt;
&lt;p&gt;When &lt;code&gt;secrets&lt;/code&gt; is defined, &lt;code&gt;wrangler dev&lt;/code&gt; and &lt;code&gt;vite dev&lt;/code&gt; load only the keys listed in &lt;code&gt;secrets.required&lt;/code&gt; from &lt;code&gt;.dev.vars&lt;/code&gt; or &lt;code&gt;.env&lt;/code&gt;/&lt;code&gt;process.env&lt;/code&gt;. Additional keys in those files are excluded. If any required secrets are missing, a warning is logged listing the missing names.&lt;/p&gt;
&lt;h4&gt;Type generation&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;wrangler types&lt;/code&gt; generates typed bindings from &lt;code&gt;secrets.required&lt;/code&gt; instead of inferring names from &lt;code&gt;.dev.vars&lt;/code&gt; or &lt;code&gt;.env&lt;/code&gt;. This lets you run type generation in CI or other environments where those files are not present. Per-environment secrets are supported — the aggregated &lt;code&gt;Env&lt;/code&gt; type marks secrets that only appear in some environments as optional.&lt;/p&gt;
&lt;h4&gt;Deploy&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;wrangler deploy&lt;/code&gt; and &lt;code&gt;wrangler versions upload&lt;/code&gt; validate that all secrets in &lt;code&gt;secrets.required&lt;/code&gt; are configured on the Worker before the operation succeeds. If any required secrets are missing, the command fails with an error listing which secrets need to be set.&lt;/p&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/configuration/#secrets-configuration-property&quot;&gt;&lt;code&gt;secrets&lt;/code&gt; configuration property&lt;/a&gt; reference.&lt;/p&gt;</description><pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>AI Crawl Control - Advanced WAF customization for AI Crawl Control blocks</title><link>https://developers.cloudflare.com/changelog/post/2026-03-24-waf-rule-preservation/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-24-waf-rule-preservation/</guid><description>&lt;p&gt;AI Crawl Control now supports extending the underlying WAF rule with custom modifications. Any changes you make directly in the WAF custom rules editor — such as adding path-based exceptions, extra user agents, or additional expression clauses — are preserved when you update crawler actions in AI Crawl Control.&lt;/p&gt;
&lt;p&gt;If the WAF rule expression has been modified in a way AI Crawl Control cannot parse, a warning banner appears on the &lt;strong&gt;Crawlers&lt;/strong&gt; page with a link to view the rule directly in WAF.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/manage-ai-crawlers/#waf-rule-management&quot;&gt;WAF rule management&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><product>AI Crawl Control</product><category>AI Crawl Control</category></item><item><title>Cache - Cache Response Rules</title><link>https://developers.cloudflare.com/changelog/post/2026-03-24-cache-response-rules/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-24-cache-response-rules/</guid><description>&lt;p&gt;You can now control how Cloudflare handles origin responses without changing your origin. Cache Response Rules let you modify &lt;code&gt;Cache-Control&lt;/code&gt; directives, manage cache tags, and strip headers like &lt;code&gt;Set-Cookie&lt;/code&gt; from origin responses &lt;em&gt;before&lt;/em&gt; they reach Cloudflare&apos;s cache. Whether traffic is cached or passed through dynamically, these rules give you control over origin response behavior that was previously out of reach.&lt;/p&gt;
&lt;h4&gt;What changed&lt;/h4&gt;
&lt;p&gt;Cache Rules previously only operated on request attributes. Cache Response Rules introduce a new response phase that evaluates origin responses and lets you act on them before caching. You can now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Modify &lt;code&gt;Cache-Control&lt;/code&gt; directives&lt;/strong&gt;: Set or remove individual directives like &lt;code&gt;no-store&lt;/code&gt;, &lt;code&gt;no-cache&lt;/code&gt;, &lt;code&gt;max-age&lt;/code&gt;, &lt;code&gt;s-maxage&lt;/code&gt;, &lt;code&gt;stale-while-revalidate&lt;/code&gt;, &lt;code&gt;immutable&lt;/code&gt;, and more. For example, remove a &lt;code&gt;no-cache&lt;/code&gt; directive your origin sends so Cloudflare can cache the asset, or set an &lt;code&gt;s-maxage&lt;/code&gt; to control how long Cloudflare stores it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set a different browser &lt;code&gt;Cache-Control&lt;/code&gt;&lt;/strong&gt;: Send a different &lt;code&gt;Cache-Control&lt;/code&gt; header downstream to browsers and other clients than what Cloudflare uses internally, giving you independent control over edge and browser caching strategies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manage cache tags&lt;/strong&gt;: Add, set, or remove cache tags on responses, including converting tags from another CDN&apos;s header format into Cloudflare&apos;s &lt;code&gt;Cache-Tag&lt;/code&gt; header. This is especially useful if you are migrating from a CDN that uses a different tag header or delimiter.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strip headers that block caching&lt;/strong&gt;: Remove &lt;code&gt;Set-Cookie&lt;/code&gt;, &lt;code&gt;ETag&lt;/code&gt;, or &lt;code&gt;Last-Modified&lt;/code&gt; headers from origin responses before caching, so responses that would otherwise be treated as uncacheable can be stored and served from cache.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Benefits&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No origin changes required&lt;/strong&gt;: Fix caching behavior entirely from Cloudflare, even when your origin configuration is locked down or managed by a different team.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simpler CDN migration&lt;/strong&gt;: Match caching behavior from other CDN providers without rewriting your origin. Translate cache tag formats and override directives that do not align with Cloudflare&apos;s defaults.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Native support, fewer workarounds&lt;/strong&gt;: Functionality that previously required workarounds is now built into Cache Rules with full Tiered Cache compatibility.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fine-grained control&lt;/strong&gt;: Use expressions to match on request and response attributes, then apply precise cache settings per rule. Rules are stackable and composable with existing Cache Rules.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;Configure Cache Response Rules in the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/:zone/caching/cache-rules&quot; target=&quot;_blank&quot;&gt;Cloudflare dashboard&lt;/a&gt; under &lt;strong&gt;Caching&lt;/strong&gt; &gt; &lt;strong&gt;Cache Rules&lt;/strong&gt;, or via the &lt;a href=&quot;https://developers.cloudflare.com/ruleset-engine/rulesets-api/&quot; target=&quot;_blank&quot;&gt;Rulesets API&lt;/a&gt;. For more details, refer to the &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/cache-response-rules/&quot; target=&quot;_blank&quot;&gt;Cache Rules documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>Containers - Use Docker Hub images with Containers</title><link>https://developers.cloudflare.com/changelog/post/2026-03-24-docker-hub-images/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-24-docker-hub-images/</guid><description>&lt;p&gt;Containers now support &lt;a href=&quot;https://hub.docker.com/&quot; target=&quot;_blank&quot;&gt;Docker Hub&lt;/a&gt; images. You can use a fully qualified Docker Hub image reference in your &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/configuration/#containers&quot; target=&quot;_blank&quot;&gt;Wrangler configuration&lt;/a&gt; instead of first pushing the image to Cloudflare Registry.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;containers&lt;/span&gt;&lt;span&gt;&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// Example: docker.io/cloudflare/sandbox:0.7.18&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;image&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;docker.io/&amp;#x3C;NAMESPACE&gt;/&amp;#x3C;REPOSITORY&gt;:&amp;#x3C;TAG&gt;&quot;&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[[&lt;/span&gt;&lt;span&gt;containers&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;image&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;docker.io/&amp;#x3C;NAMESPACE&gt;/&amp;#x3C;REPOSITORY&gt;:&amp;#x3C;TAG&gt;&quot;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Containers also support private Docker Hub images. To configure credentials, refer to &lt;a href=&quot;https://developers.cloudflare.com/containers/platform-details/image-management/#use-private-docker-hub-images&quot;&gt;Use private Docker Hub images&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/containers/platform-details/image-management/&quot;&gt;Image management&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><product>Containers</product><category>Containers</category></item><item><title>Gateway - OIDC Claims filtering now available in Gateway Firewall, Resolver, and Egress policies</title><link>https://developers.cloudflare.com/changelog/post/2026-03-24-oidc-claims-filtering-gateway-policies/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-24-oidc-claims-filtering-gateway-policies/</guid><description>&lt;p&gt;Cloudflare Gateway now supports &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/identity-selectors/#oidc-claims&quot;&gt;OIDC Claims&lt;/a&gt; as a selector in Firewall, Resolver, and Egress policies. Administrators can use custom OIDC claims from their identity provider to build fine-grained, identity-based traffic policies across all Gateway policy types.&lt;/p&gt;
&lt;p&gt;With this update, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Filter traffic in &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/dns-policies/&quot;&gt;DNS&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/http-policies/&quot;&gt;HTTP&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/network-policies/&quot;&gt;Network&lt;/a&gt; firewall policies based on OIDC claim values.&lt;/li&gt;
&lt;li&gt;Apply custom &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/resolver-policies/&quot;&gt;resolver policies&lt;/a&gt; to route DNS queries to specific resolvers depending on a user&apos;s OIDC claims.&lt;/li&gt;
&lt;li&gt;Control &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/egress-policies/&quot;&gt;egress policies&lt;/a&gt; to assign dedicated egress IPs based on OIDC claim attributes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, you can create a policy that routes traffic differently for users with &lt;code&gt;department=engineering&lt;/code&gt; in their OIDC claims, or restrict access to certain destinations based on a user&apos;s role claim.&lt;/p&gt;
&lt;p&gt;To get started, configure &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/integrations/identity-providers/generic-oidc/#custom-oidc-claims&quot;&gt;custom OIDC claims&lt;/a&gt; on your identity provider and use the &lt;strong&gt;OIDC Claims&lt;/strong&gt; selector in the Gateway policy builder.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/identity-selectors/&quot;&gt;Identity-based policies&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>Network Interconnect - Interconnects moved to Connectors</title><link>https://developers.cloudflare.com/changelog/post/2026-03-24-interconnects-navigation-update/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-24-interconnects-navigation-update/</guid><description>&lt;p&gt;The top-level &lt;strong&gt;Interconnects&lt;/strong&gt; page in the Cloudflare dashboard has been removed. Interconnects are now located under &lt;strong&gt;Connectors&lt;/strong&gt; &gt; &lt;strong&gt;Interconnects&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Your existing configurations and functionality remain the same.&lt;/p&gt;</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><product>Network Interconnect</product><category>Network Interconnect</category></item><item><title>Workers - Dynamic Workers, now in open beta</title><link>https://developers.cloudflare.com/changelog/post/2026-03-24-dynamic-workers-open-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-24-dynamic-workers-open-beta/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/dynamic-workers/&quot;&gt;Dynamic Workers&lt;/a&gt; are now in &lt;a href=&quot;https://blog.cloudflare.com/dynamic-workers/&quot; target=&quot;_blank&quot;&gt;open beta&lt;/a&gt; for all paid Workers users. You can now have a Worker spin up other Workers, called Dynamic Workers, at runtime to execute code on-demand in a secure, sandboxed environment. Dynamic Workers start in milliseconds, making them well suited for fast, secure code execution at scale.&lt;/p&gt;
&lt;h4&gt;Use Dynamic Workers for&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://developers.cloudflare.com/agents/api-reference/codemode/&quot;&gt;Code Mode&lt;/a&gt;&lt;/strong&gt;: LLMs are trained to write code. Run tool-calling logic written in code instead of stepping through many tool calls, which can save up to 80% in inference tokens and cost.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI agents executing code&lt;/strong&gt;: Run code for tasks like data analysis, file transformation, API calls, and chained actions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Running AI-generated code&lt;/strong&gt;: Run generated code for prototypes, projects, and automations in a secure, isolated sandboxed environment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fast development and previews&lt;/strong&gt;: Load prototypes, previews, and playgrounds in milliseconds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom automations&lt;/strong&gt;: Create custom tools on the fly that execute a task, call an integration, or automate a workflow.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Executing Dynamic Workers&lt;/h4&gt;
&lt;p&gt;Dynamic Workers support two loading modes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;load(code)&lt;/code&gt; — for one-time code execution (equivalent to calling &lt;code&gt;get()&lt;/code&gt; with a null ID).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get(id, callback)&lt;/code&gt; — caches a Dynamic Worker by ID so it can stay warm across requests. Use this when the same code will receive subsequent requests.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;worker&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;LOADER&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;load&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;compatibilityDate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2026-01-01&quot;&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;mainModule&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;src/index.js&quot;&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;modules&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;&quot;src/index.js&quot;&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;export default {&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;fetch() {&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;return new Response(&quot;Hello from a dynamic Worker&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;/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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// Block all outbound network access from the Dynamic 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;&lt;/span&gt;&lt;span&gt;globalOutbound&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; null&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;worker&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getEntrypoint&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;,&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;span&gt;Env&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;worker&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;LOADER&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;load&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;compatibilityDate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2026-01-01&quot;&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;mainModule&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;src/index.js&quot;&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;modules&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;&quot;src/index.js&quot;&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;export default {&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;fetch() {&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;return new Response(&quot;Hello from a dynamic Worker&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;/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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// Block all outbound network access from the Dynamic 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;&lt;/span&gt;&lt;span&gt;globalOutbound&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; null&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;worker&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getEntrypoint&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;/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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;Helper libraries for Dynamic Workers&lt;/h4&gt;
&lt;p&gt;Here are 3 new libraries to help you build with Dynamic Workers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.npmjs.com/package/@cloudflare/codemode&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;@cloudflare/codemode&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt;: Replace individual tool calls with a single &lt;code&gt;code()&lt;/code&gt; tool, so LLMs write and execute TypeScript that orchestrates multiple API calls in one pass.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.npmjs.com/package/@cloudflare/worker-bundler&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;@cloudflare/worker-bundler&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt;: Resolve npm dependencies and bundle source files into ready-to-load modules for Dynamic Workers, all at runtime.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.npmjs.com/package/@cloudflare/shell&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;@cloudflare/shell&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt;: Give your agent a virtual filesystem inside a Dynamic Worker with persistent storage backed by SQLite and R2.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Try it out&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Dynamic Workers Starter&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/agents/tree/main/examples/dynamic-workers&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://deploy.workers.cloudflare.com/button&quot; alt=&quot;Deploy to Workers&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Use this &lt;a href=&quot;https://github.com/cloudflare/agents/tree/main/examples/dynamic-workers&quot; target=&quot;_blank&quot;&gt;starter&lt;/a&gt; to deploy a Worker that can load and execute Dynamic Workers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dynamic Workers Playground&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/agents/tree/main/examples/dynamic-workers-playground&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://deploy.workers.cloudflare.com/button&quot; alt=&quot;Deploy to Workers&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Deploy the &lt;a href=&quot;https://github.com/cloudflare/agents/tree/main/examples/dynamic-workers-playground&quot; target=&quot;_blank&quot;&gt;Dynamic Workers Playground&lt;/a&gt; to write or import code, bundle it at runtime with &lt;code&gt;@cloudflare/worker-bundler&lt;/code&gt;, execute it through a Dynamic Worker, and see real-time responses and execution logs.&lt;/p&gt;
&lt;p&gt;For the full API reference and configuration options, refer to the &lt;a href=&quot;https://developers.cloudflare.com/dynamic-workers/&quot;&gt;Dynamic Workers documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Pricing&lt;/h4&gt;
&lt;p&gt;Dynamic Workers &lt;a href=&quot;https://developers.cloudflare.com/dynamic-workers/pricing/&quot;&gt;pricing&lt;/a&gt; is based on three dimensions: Dynamic Workers created daily, requests, and CPU time.&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Included&lt;/th&gt;&lt;th&gt;Additional usage&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Dynamic Workers created daily&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;1,000 unique Dynamic Workers per month&lt;/td&gt;&lt;td&gt;+$0.002 per Dynamic Worker per day&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Requests&lt;/strong&gt; ¹&lt;/td&gt;&lt;td&gt;10 million per month&lt;/td&gt;&lt;td&gt;+$0.30 per million requests&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;CPU time&lt;/strong&gt; ¹&lt;/td&gt;&lt;td&gt;30 million CPU milliseconds per month&lt;/td&gt;&lt;td&gt;+$0.02 per million CPU milliseconds&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;¹ Uses &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/pricing/#workers&quot;&gt;Workers Standard rates&lt;/a&gt; and will appear as part of your existing Workers bill, not as separate Dynamic Workers charges.&lt;/p&gt;
&lt;p&gt;Note: Dynamic Workers requests and CPU time are already billed as part of your Workers plan and will count toward your Workers requests and CPU usage. The Dynamic Workers created daily charge is not yet active — you will not be billed for the number of Dynamic Workers created at this time. Pricing information is shared in advance so you can estimate future costs.&lt;/p&gt;</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workflows, Workers - Workflow instances now support pause(), resume(), restart(), and terminate() methods in local development</title><link>https://developers.cloudflare.com/changelog/post/2026-03-23-local-dev-instance-methods/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-23-local-dev-instance-methods/</guid><description>&lt;p&gt;Workflow instance methods &lt;code&gt;pause()&lt;/code&gt;, &lt;code&gt;resume()&lt;/code&gt;, &lt;code&gt;restart()&lt;/code&gt;, and &lt;code&gt;terminate()&lt;/code&gt; are now available in local development when using &lt;code&gt;wrangler dev&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can now test the full Workflow instance lifecycle locally:&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;MY_WORKFLOW&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;{&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;id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-instance-id&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;pause&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// pauses a running workflow instance&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;resume&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// resumes a paused instance&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;restart&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// restarts the instance from the beginning&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;terminate&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// terminates the instance immediately&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;</description><pubDate>Mon, 23 Mar 2026 12:00:00 GMT</pubDate><product>Workflows</product><category>Workflows</category><category>Workers</category></item><item><title>Agents, Workers - Agents SDK v0.8.0: readable state, idempotent schedules, typed AgentClient, and Zod 4</title><link>https://developers.cloudflare.com/changelog/post/2026-03-23-agents-sdk-v080/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-23-agents-sdk-v080/</guid><description>&lt;p&gt;The latest release of the &lt;a href=&quot;https://github.com/cloudflare/agents&quot; target=&quot;_blank&quot;&gt;Agents SDK&lt;/a&gt; exposes agent state as a readable property, prevents duplicate schedule rows across Durable Object restarts, brings full TypeScript inference to &lt;code&gt;AgentClient&lt;/code&gt;, and migrates to Zod 4.&lt;/p&gt;
&lt;h4&gt;Readable &lt;code&gt;state&lt;/code&gt; on &lt;code&gt;useAgent&lt;/code&gt; and &lt;code&gt;AgentClient&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Both &lt;code&gt;useAgent&lt;/code&gt; (React) and &lt;code&gt;AgentClient&lt;/code&gt; (vanilla JS) now expose a &lt;code&gt;state&lt;/code&gt; property that reflects the current agent state. Previously, reading state required manually tracking it through the &lt;code&gt;onStateUpdate&lt;/code&gt; callback.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;React (&lt;code&gt;useAgent&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useAgent&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;agent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;game-agent&quot;&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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;room-123&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Read state directly — no separate useState + onStateUpdate needed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&gt;Score: {&lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt;?.&lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt;}&amp;#x3C;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&gt;;&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;// Spread for partial updates&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setState&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;span&gt;agent&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; score&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt;?.&lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;??&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useAgent&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;GameAgent&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GameState&lt;/span&gt;&lt;span&gt;&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;agent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;game-agent&quot;&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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;room-123&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Read state directly — no separate useState + onStateUpdate needed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &amp;#x3C;&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt;Score&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;agent.state?.&lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;div&lt;/span&gt;&lt;span&gt;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Spread for partial updates&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setState&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;span&gt;agent&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; score&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt;?.&lt;/span&gt;&lt;span&gt;score&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;??&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;&lt;code&gt;agent.state&lt;/code&gt; is reactive — the component re-renders when state changes from either the server or a client-side &lt;code&gt;setState()&lt;/code&gt; call.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vanilla JS (&lt;code&gt;AgentClient&lt;/code&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AgentClient&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;agent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;game-agent&quot;&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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;room-123&quot;&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;host&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;your-worker.workers.dev&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setState&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; score&lt;/span&gt;&lt;span&gt;:&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;}&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// { score: 100 }&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AgentClient&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;GameAgent&lt;/span&gt;&lt;span&gt;&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;agent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;game-agent&quot;&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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;room-123&quot;&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;host&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;your-worker.workers.dev&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setState&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; score&lt;/span&gt;&lt;span&gt;:&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;}&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// { score: 100 }&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;State starts as &lt;code&gt;undefined&lt;/code&gt; and is populated when the server sends the initial state on connect (from &lt;code&gt;initialState&lt;/code&gt;) or when &lt;code&gt;setState()&lt;/code&gt; is called. Use optional chaining (&lt;code&gt;agent.state?.field&lt;/code&gt;) for safe access. The &lt;code&gt;onStateUpdate&lt;/code&gt; callback continues to work as before — the new &lt;code&gt;state&lt;/code&gt; property is additive.&lt;/p&gt;
&lt;h4&gt;Idempotent &lt;code&gt;schedule()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;schedule()&lt;/code&gt; now supports an &lt;code&gt;idempotent&lt;/code&gt; option that deduplicates by &lt;code&gt;(type, callback, payload)&lt;/code&gt;, preventing duplicate rows from accumulating when called in places that run on every Durable Object restart such as &lt;code&gt;onStart()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cron schedules are idempotent by default.&lt;/strong&gt; Calling &lt;code&gt;schedule(&quot;0 * * * *&quot;, &quot;tick&quot;)&lt;/code&gt; multiple times with the same callback, expression, and payload returns the existing schedule row instead of creating a new one. Pass &lt;code&gt;{ idempotent: false }&lt;/code&gt; to override.&lt;/p&gt;
&lt;p&gt;Delayed and date-scheduled types support opt-in idempotency:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;agents&quot;&lt;/span&gt;&lt;span&gt;;&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;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onStart&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;// Safe across restarts — only one row is created&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;schedule&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;maintenance&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;undefined&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; idempotent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;agents&quot;&lt;/span&gt;&lt;span&gt;;&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;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onStart&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;// Safe across restarts — only one row is created&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;schedule&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;maintenance&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;undefined&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; idempotent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;/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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Two new warnings help catch common foot-guns:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Calling &lt;code&gt;schedule()&lt;/code&gt; inside &lt;code&gt;onStart()&lt;/code&gt; without &lt;code&gt;{ idempotent: true }&lt;/code&gt; emits a &lt;code&gt;console.warn&lt;/code&gt; with actionable guidance (once per callback; skipped for cron and when &lt;code&gt;idempotent&lt;/code&gt; is set explicitly).&lt;/li&gt;
&lt;li&gt;If an alarm cycle processes 10 or more stale one-shot rows for the same callback, the SDK emits a &lt;code&gt;console.warn&lt;/code&gt; and a &lt;code&gt;schedule:duplicate_warning&lt;/code&gt; diagnostics channel event.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Typed &lt;code&gt;AgentClient&lt;/code&gt; with &lt;code&gt;call&lt;/code&gt; inference and &lt;code&gt;stub&lt;/code&gt; proxy&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;AgentClient&lt;/code&gt; now accepts an optional agent type parameter for full type inference on RPC calls, matching the typed experience already available with &lt;code&gt;useAgent&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AgentClient&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;agent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-agent&quot;&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;host&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;host&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Typed call — method name autocompletes, args and return type inferred&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;call&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;getValue&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Typed stub — direct RPC-style proxy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getValue&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AgentClient&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt;&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;agent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-agent&quot;&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;host&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;host&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Typed call — method name autocompletes, args and return type inferred&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;call&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;getValue&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Typed stub — direct RPC-style proxy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getValue&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;State is automatically inferred from the agent type, so &lt;code&gt;onStateUpdate&lt;/code&gt; is also typed:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AgentClient&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;agent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-agent&quot;&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;host&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;host&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;onStateUpdate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;// state is typed as MyAgent&apos;s state 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;/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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AgentClient&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt;&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;agent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-agent&quot;&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;host&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;window&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;host&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;onStateUpdate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;// state is typed as MyAgent&apos;s state 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;/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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Existing untyped usage continues to work without changes. The RPC type utilities (&lt;code&gt;AgentMethods&lt;/code&gt;, &lt;code&gt;AgentStub&lt;/code&gt;, &lt;code&gt;RPCMethods&lt;/code&gt;) are now exported from &lt;code&gt;agents/client&lt;/code&gt; for advanced typing scenarios.
&lt;code&gt;agents&lt;/code&gt;, &lt;code&gt;@cloudflare/ai-chat&lt;/code&gt;, and &lt;code&gt;@cloudflare/codemode&lt;/code&gt; now require &lt;code&gt;zod ^4.0.0&lt;/code&gt;. Zod v3 is no longer supported.&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;@cloudflare/ai-chat&lt;/code&gt; fixes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Turn serialization&lt;/strong&gt; — &lt;code&gt;onChatMessage()&lt;/code&gt; and &lt;code&gt;_reply()&lt;/code&gt; work is now queued so user requests, tool continuations, and &lt;code&gt;saveMessages()&lt;/code&gt; never stream concurrently.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Duplicate messages on stop&lt;/strong&gt; — Clicking stop during an active stream no longer splits the assistant message into two entries.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Duplicate messages after tool calls&lt;/strong&gt; — Orphaned client IDs no longer leak into persistent storage.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;code&gt;keepAlive()&lt;/code&gt; and &lt;code&gt;keepAliveWhile()&lt;/code&gt; are no longer experimental&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;keepAlive()&lt;/code&gt; now uses a lightweight in-memory ref count instead of schedule rows. Multiple concurrent callers share a single alarm cycle. The &lt;code&gt;@experimental&lt;/code&gt; tag has been removed from both &lt;code&gt;keepAlive()&lt;/code&gt; and &lt;code&gt;keepAliveWhile()&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;@cloudflare/codemode&lt;/code&gt;: TanStack AI integration&lt;/h4&gt;
&lt;p&gt;A new entry point &lt;code&gt;@cloudflare/codemode/tanstack-ai&lt;/code&gt; adds support for &lt;a href=&quot;https://tanstack.com/ai&quot; target=&quot;_blank&quot;&gt;TanStack AI&apos;s&lt;/a&gt; &lt;code&gt;chat()&lt;/code&gt; as an alternative to the Vercel AI SDK&apos;s &lt;code&gt;streamText()&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &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;createCodeTool&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;tanstackTools&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; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/codemode/tanstack-ai&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;chat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@tanstack/ai&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;codeTool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createCodeTool&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;tools&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;tanstackTools&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;myServerTools&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;executor&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&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; &lt;/span&gt;&lt;span&gt;chat&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;adapter&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; tools&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;codeTool&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;messages&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createCodeTool&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tanstackTools&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/codemode/tanstack-ai&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;chat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@tanstack/ai&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;codeTool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createCodeTool&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;tools&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;tanstackTools&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;myServerTools&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;executor&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&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; &lt;/span&gt;&lt;span&gt;chat&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;adapter&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; tools&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;codeTool&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;messages&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;Upgrade&lt;/h4&gt;
&lt;p&gt;To update to the latest version:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agents@latest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@cloudflare/ai-chat@latest&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;</description><pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>AI Search - New AI Search REST API endpoints for /search and /chat/completions</title><link>https://developers.cloudflare.com/changelog/post/2026-03-23-ai-search-new-rest-api/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-23-ai-search-new-rest-api/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-search/&quot;&gt;AI Search&lt;/a&gt; now offers new &lt;a href=&quot;https://developers.cloudflare.com/ai-search/usage/rest-api/&quot;&gt;REST API&lt;/a&gt; endpoints for search and chat that use an OpenAI compatible format. This means you can use the familiar &lt;code&gt;messages&lt;/code&gt; array structure that works with existing OpenAI SDKs and tools. The messages array also lets you pass previous messages within a session, so the model can maintain context across multiple turns.&lt;/p&gt;

















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Endpoint&lt;/th&gt;&lt;th&gt;Path&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Chat Completions&lt;/td&gt;&lt;td&gt;&lt;code&gt;POST /accounts/{account_id}/ai-search/instances/{name}/chat/completions&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Search&lt;/td&gt;&lt;td&gt;&lt;code&gt;POST /accounts/{account_id}/ai-search/instances/{name}/search&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Here is an example request to the Chat Completions endpoint using the new &lt;code&gt;messages&lt;/code&gt; array format:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai-search/instances/{NAME}/chat/completions&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Content-Type: application/json&quot;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Authorization: Bearer {API_TOKEN}&quot;&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;-d&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;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;messages&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;role&quot;: &quot;system&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;content&quot;: &quot;You are a helpful documentation assistant.&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;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;role&quot;: &quot;user&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;content&quot;: &quot;How do I get started?&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;/span&gt;&lt;/span&gt;&lt;span&gt;}&apos;&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 details, refer to the &lt;a href=&quot;https://developers.cloudflare.com/ai-search/usage/rest-api/&quot;&gt;AI Search REST API guide&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Migration from existing AutoRAG API (recommended)&lt;/h4&gt;
&lt;p&gt;If you are using the previous AutoRAG API endpoints (&lt;code&gt;/autorag/rags/&lt;/code&gt;), we recommend migrating to the new endpoints. The previous AutoRAG API endpoints will continue to be fully supported.&lt;/p&gt;
&lt;p&gt;Refer to the &lt;a href=&quot;https://developers.cloudflare.com/ai-search/how-to/migrate-from-autorag-api/&quot;&gt;migration guide&lt;/a&gt; for step-by-step instructions.&lt;/p&gt;</description><pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>AI Search - AI Search UI snippets and MCP support</title><link>https://developers.cloudflare.com/changelog/post/2026-03-23-ai-search-public-endpoint-and-snippets/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-23-ai-search-public-endpoint-and-snippets/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-search/&quot;&gt;AI Search&lt;/a&gt; now supports public endpoints, UI snippets, and MCP, making it easy to add search to your website or connect AI agents.&lt;/p&gt;
&lt;p&gt;Public endpoints allow you to expose AI Search capabilities without requiring API authentication. To enable public endpoints:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;AI Search&lt;/strong&gt; in the Cloudflare dashboard.
&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/ai/ai-search&quot; target=&quot;_blank&quot;&gt;  Go to &lt;strong&gt;AI Search&lt;/strong&gt;  &lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Select your instance, and turn on &lt;strong&gt;Public Endpoint&lt;/strong&gt; in &lt;strong&gt;Settings&lt;/strong&gt;.
For more details, refer to &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/public-endpoint/&quot;&gt;Public endpoint configuration&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;UI snippets&lt;/h4&gt;
&lt;p&gt;UI snippets are pre-built search and chat components you can embed in your website. Visit &lt;a href=&quot;https://search.ai.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;search.ai.cloudflare.com&lt;/a&gt; to configure and preview components for your AI Search instance.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ui-snippet-search-modal.tIxR8nl5_2300oN.webp&quot; alt=&quot;Example of the search-modal-snippet component&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To add a search modal to your page:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;html&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;script&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;&quot;module&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;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://&amp;#x3C;INSTANCE_ID&gt;.search.ai.cloudflare.com/assets/v0.0.25/search-snippet.es.js&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&gt;&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;&amp;#x3C;&lt;/span&gt;&lt;span&gt;search-modal-snippet&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;api-url&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;https://&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;INSTANCE_ID&gt;.search.ai.cloudflare.com/&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;placeholder&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;Search...&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&amp;#x3C;/&lt;/span&gt;&lt;span&gt;search-modal-snippet&lt;/span&gt;&lt;span&gt;&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 details, refer to the &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/embed-search-snippets/&quot;&gt;UI snippets documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;MCP&lt;/h4&gt;
&lt;p&gt;The MCP endpoint allows AI agents to search your content via the Model Context Protocol. Connect your MCP client to:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;https://&amp;#x3C;INSTANCE_ID&gt;.search.ai.cloudflare.com/mcp&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 details, refer to the &lt;a href=&quot;https://developers.cloudflare.com/ai-search/usage/mcp/&quot;&gt;MCP documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>AI Search - Custom metadata filtering for AI Search</title><link>https://developers.cloudflare.com/changelog/post/2026-03-23-custom-metadata-filtering/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-23-custom-metadata-filtering/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-search/&quot;&gt;AI Search&lt;/a&gt; now supports custom metadata filtering, allowing you to define your own metadata fields and filter search results based on attributes like category, version, or any custom field you define.&lt;/p&gt;
&lt;h4&gt;Define a custom metadata schema&lt;/h4&gt;
&lt;p&gt;You can define up to 5 custom metadata fields per AI Search instance. Each field has a name and data type (&lt;code&gt;text&lt;/code&gt;, &lt;code&gt;number&lt;/code&gt;, or &lt;code&gt;boolean&lt;/code&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai-search/instances&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Content-Type: application/json&quot;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Authorization: Bearer {API_TOKEN}&quot;&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;-d&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;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;id&quot;: &quot;my-instance&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;type&quot;: &quot;r2&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;source&quot;: &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;&quot;custom_metadata&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;field_name&quot;: &quot;category&quot;, &quot;data_type&quot;: &quot;text&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;field_name&quot;: &quot;version&quot;, &quot;data_type&quot;: &quot;number&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;field_name&quot;: &quot;is_public&quot;, &quot;data_type&quot;: &quot;boolean&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;}&apos;&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;h4&gt;Add metadata to your documents&lt;/h4&gt;
&lt;p&gt;How you attach metadata depends on your data source:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;R2 bucket&lt;/strong&gt;: Set metadata using S3-compatible custom headers (&lt;code&gt;x-amz-meta-*&lt;/code&gt;) when uploading objects. Refer to &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/data-source/r2/#custom-metadata&quot;&gt;R2 custom metadata&lt;/a&gt; for examples.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Website&lt;/strong&gt;: Add &lt;code&gt;&amp;#x3C;meta&gt;&lt;/code&gt; tags to your HTML pages. Refer to &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/data-source/website/#custom-metadata&quot;&gt;Website custom metadata&lt;/a&gt; for details.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Filter search results&lt;/h4&gt;
&lt;p&gt;Use custom metadata fields in your search queries alongside built-in attributes like &lt;code&gt;folder&lt;/code&gt; and &lt;code&gt;timestamp&lt;/code&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai-search/instances/{NAME}/search&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Content-Type: application/json&quot;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Authorization: Bearer {API_TOKEN}&quot;&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;-d&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;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;messages&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;content&quot;: &quot;How do I configure authentication?&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;role&quot;: &quot;user&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;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;ai_search_options&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;retrieval&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;filters&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;category&quot;: &quot;documentation&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;version&quot;: { &quot;$gte&quot;: 2.0 }&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;/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;}&apos;&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;Learn more in the &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/metadata/&quot;&gt;metadata filtering documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>API Shield - Web Assets fields now available in GraphQL Analytics API</title><link>https://developers.cloudflare.com/changelog/post/2026-03-23-web-assets-graphql-fields/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-23-web-assets-graphql-fields/</guid><description>&lt;p&gt;Two new fields are now available in the &lt;code&gt;httpRequestsAdaptive&lt;/code&gt; and &lt;code&gt;httpRequestsAdaptiveGroups&lt;/code&gt; &lt;a href=&quot;https://developers.cloudflare.com/analytics/graphql-api/&quot;&gt;GraphQL Analytics API&lt;/a&gt; datasets:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;webAssetsOperationId&lt;/code&gt; — the ID of the &lt;a href=&quot;https://developers.cloudflare.com/api-shield/management-and-monitoring/&quot;&gt;saved endpoint&lt;/a&gt; that matched the incoming request.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;webAssetsLabelsManaged&lt;/code&gt; — the &lt;a href=&quot;https://developers.cloudflare.com/api-shield/management-and-monitoring/endpoint-labels/#managed-labels&quot;&gt;managed labels&lt;/a&gt; mapped to the matched operation at the time of the request (for example, &lt;code&gt;cf-llm&lt;/code&gt;, &lt;code&gt;cf-log-in&lt;/code&gt;). At most 10 labels are returned per request.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both fields are empty when no operation matched. &lt;code&gt;webAssetsLabelsManaged&lt;/code&gt; is also empty when no managed labels are assigned to the matched operation.&lt;/p&gt;
&lt;p&gt;These fields allow you to determine, per request, which Web Assets operation was matched and which managed labels were active. This is useful for troubleshooting downstream security detection verdicts — for example, understanding why &lt;a href=&quot;https://developers.cloudflare.com/waf/detections/ai-security-for-apps/&quot;&gt;AI Security for Apps&lt;/a&gt; did or did not flag a request.&lt;/p&gt;
&lt;p&gt;Refer to &lt;a href=&quot;https://developers.cloudflare.com/api-shield/management-and-monitoring/endpoint-labels/#analytics&quot;&gt;Endpoint labeling service&lt;/a&gt; for GraphQL query examples.&lt;/p&gt;</description><pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate><product>API Shield</product><category>API Shield</category></item><item><title>R2 SQL - R2 SQL now supports over 190 new functions, expressions, and complex types</title><link>https://developers.cloudflare.com/changelog/post/2026-03-23-expanded-sql-functions-expressions-complex-types/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-23-expanded-sql-functions-expressions-complex-types/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/r2-sql/&quot;&gt;R2 SQL&lt;/a&gt; now supports an expanded SQL grammar so you can write richer analytical queries without exporting data. This release adds CASE expressions, column aliases, arithmetic in clauses, 163 scalar functions, 33 aggregate functions, EXPLAIN, Common Table Expressions (CTEs),and full struct/array/map access. R2 SQL is Cloudflare&apos;s serverless, distributed, analytics query engine for querying &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot;&gt;Apache Iceberg&lt;/a&gt; tables stored in &lt;a href=&quot;https://developers.cloudflare.com/r2/data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt;. This page documents the supported SQL syntax.&lt;/p&gt;
&lt;h4&gt;Highlights&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Column aliases&lt;/strong&gt; — &lt;code&gt;SELECT col AS alias&lt;/code&gt; now works in all clauses&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CASE expressions&lt;/strong&gt; — conditional logic directly in SQL (searched and simple forms)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scalar functions&lt;/strong&gt; — 163 new functions across math, string, datetime, regex, crypto, encoding, and type inspection categories&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aggregate functions&lt;/strong&gt; — statistical (variance, stddev, correlation, regression), bitwise, boolean, and positional aggregates join the existing basic and approximate functions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Complex types&lt;/strong&gt; — query struct fields with bracket notation, use 46 array functions, and extract map keys/values&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Common table expressions (CTEs)&lt;/strong&gt; — use &lt;code&gt;WITH ... AS&lt;/code&gt; to define named temporary result sets. Chained CTEs are supported. All CTEs must reference the same single table.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Full expression support&lt;/strong&gt; — arithmetic, type casting (&lt;code&gt;CAST&lt;/code&gt;, &lt;code&gt;TRY_CAST&lt;/code&gt;, &lt;code&gt;::&lt;/code&gt; shorthand), and &lt;code&gt;EXTRACT&lt;/code&gt; in SELECT, WHERE, GROUP BY, HAVING, and ORDER BY&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Examples&lt;/h4&gt;
&lt;h4&gt;CASE expressions with statistical aggregates&lt;/h4&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;SELECT&lt;/span&gt;&lt;span&gt; source,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;CASE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;WHEN&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AVG&lt;/span&gt;&lt;span&gt;(price) &lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;THEN&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;premium&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;WHEN&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AVG&lt;/span&gt;&lt;span&gt;(price) &lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;THEN&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;mid-tier&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;ELSE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;budget&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;END&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; tier,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;round&lt;/span&gt;&lt;span&gt;(stddev(price), &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; price_volatility,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;approx_percentile_cont&lt;/span&gt;&lt;span&gt;(price, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;95&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; p95_price&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; my_namespace.sales_data&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;GROUP BY&lt;/span&gt;&lt;span&gt; source&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;h4&gt;Struct and array access&lt;/h4&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;SELECT&lt;/span&gt;&lt;span&gt; product_name,&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;pricing[&apos;price&apos;] &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; price,&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;array_to_string(tags, &lt;/span&gt;&lt;span&gt;&apos;, &apos;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; tag_list&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; my_namespace.products&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; array_has(tags, &lt;/span&gt;&lt;span&gt;&apos;Action&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ORDER BY&lt;/span&gt;&lt;span&gt; pricing[&apos;price&apos;] &lt;/span&gt;&lt;span&gt;DESC&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;LIMIT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&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;h4&gt;Chained CTEs with time-series analysis&lt;/h4&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;WITH&lt;/span&gt;&lt;span&gt; monthly &lt;/span&gt;&lt;span&gt;AS&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;SELECT&lt;/span&gt;&lt;span&gt; date_trunc(&lt;/span&gt;&lt;span&gt;&apos;month&apos;&lt;/span&gt;&lt;span&gt;, sale_timestamp) &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;month&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;department,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;COUNT&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; transactions,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;round&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;AVG&lt;/span&gt;&lt;span&gt;(total_amount), &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; avg_amount&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; my_namespace.sales_data&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;WHERE&lt;/span&gt;&lt;span&gt; sale_timestamp &lt;/span&gt;&lt;span&gt;BETWEEN&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;2025-01-01T00:00:00Z&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AND&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;2025-12-31T23:59:59Z&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;GROUP BY&lt;/span&gt;&lt;span&gt; date_trunc(&lt;/span&gt;&lt;span&gt;&apos;month&apos;&lt;/span&gt;&lt;span&gt;, sale_timestamp), department&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;ranked &lt;/span&gt;&lt;span&gt;AS&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;SELECT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;month&lt;/span&gt;&lt;span&gt;, department, transactions, avg_amount,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;CASE&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;WHEN&lt;/span&gt;&lt;span&gt; avg_amount &lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;THEN&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;high-value&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;WHEN&lt;/span&gt;&lt;span&gt; avg_amount &lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;500&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;THEN&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;mid-value&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;ELSE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;standard&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;END&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; tier&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; monthly&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;WHERE&lt;/span&gt;&lt;span&gt; transactions &lt;/span&gt;&lt;span&gt;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; ranked&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ORDER BY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;month&lt;/span&gt;&lt;span&gt;, avg_amount &lt;/span&gt;&lt;span&gt;DESC&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 function reference and syntax details, refer to the &lt;a href=&quot;https://developers.cloudflare.com/r2-sql/sql-reference/&quot;&gt;SQL reference&lt;/a&gt;. For limitations and best practices, refer to &lt;a href=&quot;https://developers.cloudflare.com/r2-sql/reference/limitations-best-practices/&quot;&gt;Limitations and best practices&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate><product>R2 SQL</product><category>R2 SQL</category></item><item><title>WAF - WAF Release - 2026-03-23</title><link>https://developers.cloudflare.com/changelog/post/2026-03-23-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-23-waf-release/</guid><description>&lt;p&gt;This week&apos;s release focuses on new improvements to enhance coverage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Existing rule enhancements have been deployed to improve detection resilience against broad classes of web attacks and strengthen behavioral coverage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;54ad0465c30d4cd2ac7a707197321c6c &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Command Injection - Generic 9 - URI Vector&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;b31c34a7b29b4aaf9be6883d1eb7a999 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Command Injection - Generic 9 - Header Vector&lt;/td&gt;
&lt;td&gt;Log&lt;/td&gt;
&lt;td&gt;Disabled&lt;/td&gt;
&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;155bb67d1061479e995a38510677175f &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Command Injection - Generic 9 - Body Vector&lt;/td&gt;
&lt;td&gt;Log&lt;/td&gt;
&lt;td&gt;Disabled&lt;/td&gt;
&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;55fb1c76f0304f6a9d935d03479da68f &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;PHP, vBulletin, jQuery File Upload - Code Injection, Dangerous File Upload - CVE:CVE-2018-9206, CVE:CVE-2019-17132 (beta)&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This rule has been merged into the original rule &quot;PHP, vBulletin, jQuery File Upload - Code Injection, Dangerous File Upload - CVE:CVE-2018-9206, CVE:CVE-2019-17132&quot; (ID: 0f2da91cec674eb58006929e824b817c )&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Access - Route MCP server portal traffic through Cloudflare Gateway</title><link>https://developers.cloudflare.com/changelog/post/2026-03-20-mcp-portal-gateway-routing/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-20-mcp-portal-gateway-routing/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/ai-controls/mcp-portals/&quot;&gt;MCP server portals&lt;/a&gt; can now route traffic through &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/&quot;&gt;Cloudflare Gateway&lt;/a&gt; for richer HTTP request logging and data loss prevention (DLP) scanning.&lt;/p&gt;
&lt;p&gt;When Gateway routing is turned on, portal traffic appears in your &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/logs/dashboard-logs/gateway-logs/&quot;&gt;Gateway HTTP logs&lt;/a&gt;. You can create &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/&quot;&gt;Gateway HTTP policies&lt;/a&gt; with &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/dlp-profiles/&quot;&gt;DLP profiles&lt;/a&gt; to detect and block sensitive data sent to upstream MCP servers.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;DLP &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/dlp-profiles/predefined-profiles/#ai-prompt&quot;&gt;AI prompt profiles&lt;/a&gt; do not apply to MCP server portal traffic.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;To enable Gateway routing, go to &lt;strong&gt;Access controls&lt;/strong&gt; &gt; &lt;strong&gt;AI controls&lt;/strong&gt;, edit the portal, and turn on &lt;strong&gt;Route traffic through Cloudflare Gateway&lt;/strong&gt; under &lt;strong&gt;Basic information&lt;/strong&gt;.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/portal-route-through-gateway.0KMUAXBm_Z1B5rry.webp&quot; alt=&quot;Route MCP server portal traffic through Cloudflare Gateway&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;For more details, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/ai-controls/mcp-portals/#route-portal-traffic-through-gateway&quot;&gt;Route traffic through Gateway&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>DNS - DNS Analytics for Customer Metadata Boundary set to EU region</title><link>https://developers.cloudflare.com/changelog/post/2026-03-20-dns-analytics-cmb-eu/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-20-dns-analytics-cmb-eu/</guid><description>&lt;p&gt;DNS Analytics is now available for customers with &lt;a href=&quot;https://developers.cloudflare.com/data-localization/metadata-boundary/&quot;&gt;Customer Metadata Boundary&lt;/a&gt; (CMB) set to EU. Query your DNS analytics data while keeping metadata stored in the EU region.&lt;/p&gt;
&lt;p&gt;This update includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DNS Analytics&lt;/strong&gt; — Access the same DNS analytics experience for zones in CMB=EU accounts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;EU data residency&lt;/strong&gt; — Analytics data is stored and queried from the EU region, meeting data localization requirements.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DNS Firewall Analytics&lt;/strong&gt; — DNS Firewall analytics is now supported for CMB=EU customers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Availability&lt;/h4&gt;
&lt;p&gt;Available to customers with the &lt;a href=&quot;https://developers.cloudflare.com/data-localization/&quot;&gt;Data Localization Suite&lt;/a&gt; who have Customer Metadata Boundary configured for the EU region.&lt;/p&gt;
&lt;h4&gt;Where to find it&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Authoritative DNS:&lt;/strong&gt; In the Cloudflare dashboard, select your zone and go to the &lt;strong&gt;Analytics&lt;/strong&gt; page.&lt;/p&gt;
&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/:zone/dns/analytics&quot; target=&quot;_blank&quot;&gt;  Go to &lt;strong&gt;Analytics&lt;/strong&gt;  &lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DNS Firewall:&lt;/strong&gt; In the Cloudflare dashboard, go to the &lt;strong&gt;DNS Firewall Analytics&lt;/strong&gt; page.&lt;/p&gt;
&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/dns-firewall/analytics&quot; target=&quot;_blank&quot;&gt;  Go to &lt;strong&gt;Analytics&lt;/strong&gt;  &lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/dns/additional-options/analytics/&quot;&gt;DNS Analytics&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/dns/dns-firewall/analytics/&quot;&gt;DNS Firewall Analytics&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><product>DNS</product><category>DNS</category></item><item><title>Cloudflare Tunnel, Cloudflare Tunnel for SASE - Stream logs from multiple replicas of Cloudflare Tunnel simultaneously</title><link>https://developers.cloudflare.com/changelog/post/2026-03-20-tunnel-replica-overview-and-multi-log-streaming/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-20-tunnel-replica-overview-and-multi-log-streaming/</guid><description>&lt;p&gt;In the Cloudflare One dashboard, the overview page for a specific Cloudflare Tunnel now shows all &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-availability/&quot;&gt;replicas&lt;/a&gt; of that tunnel and supports streaming logs from multiple replicas at once.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/tunnel-multiconn.DEOEaLlu_ZDxArh.webp&quot; alt=&quot;View replicas and stream logs from multiple connectors&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Previously, you could only stream logs from one replica at a time. With this update:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Replicas on the tunnel overview&lt;/strong&gt; — All active replicas for the selected tunnel now appear on that tunnel&apos;s overview page under &lt;strong&gt;Connectors&lt;/strong&gt;. Select any replica to stream its logs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-connector log streaming&lt;/strong&gt; — Stream logs from multiple replicas simultaneously, making it easier to correlate events across your infrastructure during debugging or incident response. To try it out, log in to &lt;a href=&quot;https://one.dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Cloudflare One&lt;/a&gt; and go to &lt;strong&gt;Networks&lt;/strong&gt; &gt; &lt;strong&gt;Connectors&lt;/strong&gt; &gt; &lt;strong&gt;Cloudflare Tunnels&lt;/strong&gt;. Select &lt;strong&gt;View logs&lt;/strong&gt; next to the tunnel you want to monitor.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/monitor-tunnels/logs/&quot;&gt;Tunnel log streams&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-availability/deploy-replicas/&quot;&gt;Deploy replicas&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><product>Cloudflare Tunnel</product><category>Cloudflare Tunnel</category><category>Cloudflare Tunnel for SASE</category></item><item><title>Workers VPC - Observability for Workers VPC Services</title><link>https://developers.cloudflare.com/changelog/post/2026-03-20-metrics-and-settings-dashboard/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-20-metrics-and-settings-dashboard/</guid><description>&lt;p&gt;Each VPC Service now has a &lt;strong&gt;Metrics&lt;/strong&gt; tab so you can monitor connection health and debug failures without leaving the dashboard.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2026-03-20-metrics-dashboard.6kfnbqQd_1Oc7Ft.webp&quot; alt=&quot;Workers VPC Metrics dashboard showing connections, latency, and errors charts&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Connections&lt;/strong&gt; — See successful and failed connections over time, broken down by what is responsible: your origin (Bad Upstream), your configuration (Client), or Cloudflare (Internal).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Latency&lt;/strong&gt; — Track connection and DNS resolution latency trends.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Errors&lt;/strong&gt; — Drill into specific error codes grouped by category, with filters to isolate upstream, client, or internal failures.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can also view and edit your VPC Service configuration, host details, and port assignments from the &lt;strong&gt;Settings&lt;/strong&gt; tab.&lt;/p&gt;
&lt;p&gt;For a full list of error codes and what they mean, refer to &lt;a href=&quot;https://developers.cloudflare.com/workers-vpc/reference/troubleshooting/&quot;&gt;Troubleshooting&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><product>Workers VPC</product><category>Workers VPC</category></item><item><title>Cloudflare Fundamentals - Service Key authentication deprecated</title><link>https://developers.cloudflare.com/changelog/post/2026-03-19-service-key-authentication-deprecated/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-19-service-key-authentication-deprecated/</guid><description>&lt;p&gt;Service Key authentication for the Cloudflare API is deprecated. Service Keys will stop working on September 30, 2026.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/api/get-started/create-token/&quot;&gt;API Tokens&lt;/a&gt; replace Service Keys with fine-grained permissions, expiration, and revocation.&lt;/p&gt;
&lt;h4&gt;What you need to do&lt;/h4&gt;
&lt;p&gt;Replace any use of the &lt;code&gt;X-Auth-User-Service-Key&lt;/code&gt; header with an &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/api/get-started/create-token/&quot;&gt;API Token&lt;/a&gt; scoped to the permissions your integration requires.&lt;/p&gt;
&lt;p&gt;If you use &lt;code&gt;cloudflared&lt;/code&gt;, update to a version from November 2022 or later. These versions already use API Tokens.&lt;/p&gt;
&lt;p&gt;If you use &lt;a href=&quot;https://github.com/cloudflare/origin-ca-issuer&quot; target=&quot;_blank&quot;&gt;origin-ca-issuer&lt;/a&gt;, update to a version that supports API Token authentication.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/api/reference/deprecations/&quot;&gt;API deprecations&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Hyperdrive - Hyperdrive now supports custom TLS/SSL certificates for MySQL</title><link>https://developers.cloudflare.com/changelog/post/2026-03-19-hyperdrive-mysql-custom-certificate-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-19-hyperdrive-mysql-custom-certificate-support/</guid><description>&lt;p&gt;Hyperdrive now supports custom TLS/SSL certificates for MySQL databases, bringing the same certificate options previously available for PostgreSQL to MySQL connections.&lt;/p&gt;
&lt;p&gt;You can now configure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Server certificate verification&lt;/strong&gt; with &lt;code&gt;VERIFY_CA&lt;/code&gt; or &lt;code&gt;VERIFY_IDENTITY&lt;/code&gt; SSL modes to verify that your MySQL database server&apos;s certificate is signed by the expected certificate authority (CA).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Client certificates&lt;/strong&gt; (mTLS) for Hyperdrive to authenticate itself to your MySQL database with credentials beyond username and password.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Create a Hyperdrive configuration with custom certificates for MySQL:&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;# Upload a CA certificate&lt;/span&gt;&lt;/div&gt;&lt;/div&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;cert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;upload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;certificate-authority&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--ca-cert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;your-ca-cert.pem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;your-custom-ca-name&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;# Create a Hyperdrive with VERIFY_IDENTITY mode&lt;/span&gt;&lt;/div&gt;&lt;/div&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;hyperdrive&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;your-hyperdrive-config&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;--connection-string=&quot;mysql://user:password@hostname:port/database&quot;&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;--ca-certificate-id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;CA_CERT_ID&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;--sslmode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;VERIFY_IDENTITY&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/hyperdrive/configuration/tls-ssl-certificates-for-hyperdrive/&quot;&gt;SSL/TLS certificates for Hyperdrive&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/hyperdrive/examples/connect-to-mysql/&quot;&gt;MySQL TLS/SSL modes&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate><product>Hyperdrive</product><category>Hyperdrive</category></item><item><title>Cloudflare Tunnel, Workers - Manage Cloudflare Tunnels with Wrangler</title><link>https://developers.cloudflare.com/changelog/post/2026-03-19-wrangler-tunnel-commands/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-19-wrangler-tunnel-commands/</guid><description>&lt;p&gt;You can now manage &lt;a href=&quot;https://developers.cloudflare.com/tunnel/&quot;&gt;Cloudflare Tunnels&lt;/a&gt; directly from &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt;, the CLI for the Cloudflare Developer Platform. The new &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/tunnel/&quot;&gt;&lt;code&gt;wrangler tunnel&lt;/code&gt;&lt;/a&gt; commands let you create, run, and manage tunnels without leaving your terminal.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/wrangler-tunnel.DOqrtGGg_7EDX0.webp&quot; alt=&quot;Wrangler tunnel commands demo&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Available commands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;wrangler tunnel create&lt;/code&gt; — Create a new remotely managed tunnel.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wrangler tunnel list&lt;/code&gt; — List all tunnels in your account.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wrangler tunnel info&lt;/code&gt; — Display details about a specific tunnel.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wrangler tunnel delete&lt;/code&gt; — Delete a tunnel.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wrangler tunnel run&lt;/code&gt; — Run a tunnel using the cloudflared daemon.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wrangler tunnel quick-start&lt;/code&gt; — Start a free, temporary tunnel without an account using &lt;a href=&quot;https://developers.cloudflare.com/tunnel/setup/#quick-tunnels-development&quot;&gt;Quick Tunnels&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Wrangler handles downloading and managing the &lt;a href=&quot;https://developers.cloudflare.com/tunnel/downloads/&quot;&gt;cloudflared&lt;/a&gt; binary automatically. On first use, you will be prompted to download &lt;code&gt;cloudflared&lt;/code&gt; to a local cache directory.&lt;/p&gt;
&lt;p&gt;These commands are currently experimental and may change without notice.&lt;/p&gt;
&lt;p&gt;To get started, refer to the &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/tunnel/&quot;&gt;Wrangler tunnel commands documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate><product>Cloudflare Tunnel</product><category>Cloudflare Tunnel</category><category>Workers</category></item><item><title>Workers AI - Moonshot AI Kimi K2.5 now available on Workers AI</title><link>https://developers.cloudflare.com/changelog/post/2026-03-19-kimi-k2-5-workers-ai/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-19-kimi-k2-5-workers-ai/</guid><description>&lt;p&gt;Workers AI is officially in the big models game. &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/kimi-k2.5/&quot;&gt;&lt;code&gt;@cf/moonshotai/kimi-k2.5&lt;/code&gt;&lt;/a&gt; is the first frontier-scale open-source model on our AI inference platform — a large model with a full 256k context window, multi-turn tool calling, vision inputs, and structured outputs. By bringing a frontier-scale model directly onto the Cloudflare Developer Platform, you can now run the entire agent lifecycle on a single, unified platform.&lt;/p&gt;
&lt;p&gt;The model has proven to be a fast, efficient alternative to larger proprietary models without sacrificing quality. As AI adoption increases, the volume of inference is skyrocketing — now you can access frontier intelligence at a fraction of the cost.&lt;/p&gt;
&lt;h4&gt;Key capabilities&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;256,000 token context window&lt;/strong&gt; for retaining full conversation history, tool definitions, and entire codebases across long-running agent sessions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-turn tool calling&lt;/strong&gt; for building agents that invoke tools across multiple conversation turns&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vision inputs&lt;/strong&gt; for processing images alongside text&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Structured outputs&lt;/strong&gt; with JSON mode and JSON Schema support for reliable downstream parsing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Function calling&lt;/strong&gt; for integrating external tools and APIs into agent workflows&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Prefix caching and session affinity&lt;/h4&gt;
&lt;p&gt;When an agent sends a new prompt, it resends all previous prompts, tools, and context from the session. The delta between consecutive requests is usually just a few new lines of input. Prefix caching avoids reprocessing the shared context, saving time and compute from the prefill stage. This means faster Time to First Token (TTFT) and higher Tokens Per Second (TPS) throughput.&lt;/p&gt;
&lt;p&gt;Workers AI has done prefix caching, but we are now surfacing cached tokens as a usage metric and offering a discount on cached tokens compared to input tokens (pricing is listed on the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/kimi-k2.5/&quot;&gt;model page&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&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;&quot;https://api.cloudflare.com/client/v4/accounts/{account_id}/ai/run/@cf/moonshotai/kimi-k2.5&quot;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Authorization: Bearer {api_token}&quot;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Content-Type: application/json&quot;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;x-session-affinity: ses_12345678&quot;&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;-d&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;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;messages&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;role&quot;: &quot;system&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;content&quot;: &quot;You are a helpful assistant.&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;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;role&quot;: &quot;user&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;content&quot;: &quot;What is prefix caching and why does it matter?&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;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;max_tokens&quot;: 2400,&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;stream&quot;: true&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;}&apos;&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;Some clients like &lt;a href=&quot;https://opencode.ai&quot; target=&quot;_blank&quot;&gt;OpenCode&lt;/a&gt; implement session affinity automatically. The &lt;a href=&quot;https://github.com/cloudflare/agents&quot; target=&quot;_blank&quot;&gt;Agents SDK&lt;/a&gt; starter also sets up the wiring for you.&lt;/p&gt;
&lt;h4&gt;Redesigned asynchronous API&lt;/h4&gt;
&lt;p&gt;For volumes of requests that exceed synchronous rate limits, you can submit batches of inferences to be completed asynchronously. We have revamped the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/features/batch-api/&quot;&gt;Asynchronous Batch API&lt;/a&gt; with a pull-based system that processes queued requests as soon as capacity is available. With internal testing, async requests usually execute within 5 minutes, but this depends on live traffic.&lt;/p&gt;
&lt;p&gt;The async API is the best way to avoid capacity errors in durable workflows. It is ideal for use cases that are not real-time, such as code scanning agents or research agents.&lt;/p&gt;
&lt;p&gt;To use the asynchronous API, pass &lt;code&gt;queueRequest: true&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// 1. Push a batch of requests into the queue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;run&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;&quot;@cf/moonshotai/kimi-k2.5&quot;&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;requests&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;/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;messages&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; role&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Tell me a joke&quot;&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;/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;messages&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; role&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Explain the Pythagoras theorem&quot;&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;/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;/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; queueRequest&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// 2. Grab the request ID&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;requestId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;request_id&lt;/span&gt;&lt;span&gt;;&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;// 3. Poll for the result&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;@cf/moonshotai/kimi-k2.5&quot;&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;request_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;requestId&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;queued&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;||&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;running&quot;&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;// Retry by polling again&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;else&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;json&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&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;You can also set up &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/platform/event-subscriptions/&quot;&gt;event notifications&lt;/a&gt; to know when inference is complete instead of polling.&lt;/p&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;Use Kimi K2.5 through the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/configuration/bindings/&quot;&gt;Workers AI binding&lt;/a&gt; (&lt;code&gt;env.AI.run()&lt;/code&gt;), the REST API at &lt;code&gt;/run&lt;/code&gt; or &lt;code&gt;/v1/chat/completions&lt;/code&gt;, &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot;&gt;AI Gateway&lt;/a&gt;, or via the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/configuration/open-ai-compatibility/&quot;&gt;OpenAI-compatible endpoint&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/kimi-k2.5/&quot;&gt;Kimi K2.5 model page&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/platform/pricing/&quot;&gt;pricing&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/features/prompt-caching/&quot;&gt;prompt caching&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>Cloudflare Fundamentals - SCIM provisioning for Authentik is now Generally Available</title><link>https://developers.cloudflare.com/changelog/post/2026-03-17-scim-authentik-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-17-scim-authentik-support/</guid><description>&lt;p&gt;Cloudflare dashboard SCIM provisioning now supports &lt;a href=&quot;https://goauthentik.io/&quot; target=&quot;_blank&quot;&gt;Authentik&lt;/a&gt; as an identity provider, joining Okta and Microsoft Entra ID as explicitly supported providers.&lt;/p&gt;
&lt;p&gt;Customers can now sync users and group information from Authentik to Cloudflare, apply Permission Policies to those groups, and manage the lifecycle of users &amp;#x26; groups directly from your Authentik Identity Provider.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;SCIM provisioning for the Cloudflare dashboard is available to Enterprise customers. You must be a Super Administrator to complete the initial setup.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;For more information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/account/account-security/scim-setup/&quot;&gt;SCIM provisioning overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/account/account-security/scim-setup/authentik/&quot;&gt;Provision with Authentik&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Cloudflare Fundamentals - SCIM audit logging Support</title><link>https://developers.cloudflare.com/changelog/post/2026-03-18-scim-audit-logging/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-18-scim-audit-logging/</guid><description>&lt;p&gt;Cloudflare dashboard SCIM provisioning operations are now captured in &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/account/account-security/audit-logs/&quot;&gt;Audit Logs v2&lt;/a&gt;, giving you visibility into user and group changes made by your identity provider.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2026-03-18-scim-audit-logging.DPKMiE8X_ZojL4c.webp&quot; alt=&quot;SCIM audit logging&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;strong&gt;Logged actions:&lt;/strong&gt;&lt;/p&gt;





































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Action Type&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Create SCIM User&lt;/td&gt;&lt;td&gt;User provisioned from IdP&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Replace SCIM User&lt;/td&gt;&lt;td&gt;User fully replaced (PUT)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Update SCIM User&lt;/td&gt;&lt;td&gt;User attributes modified (PATCH)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Delete SCIM User&lt;/td&gt;&lt;td&gt;Member deprovisioned&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Create SCIM Group&lt;/td&gt;&lt;td&gt;Group provisioned from IdP&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Update SCIM Group&lt;/td&gt;&lt;td&gt;Group membership or attributes modified&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Delete SCIM Group&lt;/td&gt;&lt;td&gt;Group deprovisioned&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;For more details, refer to the &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/account/account-security/audit-logs/&quot;&gt;Audit Logs v2 documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Rules - Worker execution timing field now available in Rules</title><link>https://developers.cloudflare.com/changelog/post/2026-03-18-worker-timing-field/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-18-worker-timing-field/</guid><description>&lt;p&gt;The &lt;code&gt;cf.timings.worker_msec&lt;/code&gt; field is now available in the Ruleset Engine. This field reports the wall-clock time that a Cloudflare Worker spent handling a request, measured in milliseconds.&lt;/p&gt;
&lt;p&gt;You can use this field to identify slow Worker executions, detect performance regressions, or build rules that respond differently based on Worker processing time, such as logging requests that exceed a latency threshold.&lt;/p&gt;
&lt;h4&gt;Field details&lt;/h4&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Field&lt;/th&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;cf.timings.worker_msec&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Integer&lt;/td&gt;&lt;td&gt;The time spent executing a Cloudflare Worker in milliseconds. Returns &lt;code&gt;0&lt;/code&gt; if no Worker was invoked.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Example filter expression:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cf.timings.worker_msec &gt; 500&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 the &lt;a href=&quot;https://developers.cloudflare.com/ruleset-engine/rules-language/fields/reference/cf.timings.worker_msec/&quot;&gt;Fields reference&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Security Center - Real-time logo match preview</title><link>https://developers.cloudflare.com/changelog/post/2026-03-18-brand-protection-logo-match-preview/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-18-brand-protection-logo-match-preview/</guid><description>&lt;p&gt;We are introducing &lt;strong&gt;Logo Match Preview&lt;/strong&gt;, bringing the same pre-save visibility to visual assets that was previously only available for string-based queries. This update allows you to fine-tune your brand detection strategy before committing to a live monitor.&lt;/p&gt;
&lt;h4&gt;What’s new:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Upload your brand logo and immediately see a sample of potential matches from recently detected sites before finalizing the query&lt;/li&gt;
&lt;li&gt;Adjust your similarity score (from 75% to 100%) and watch the results refresh in real-time to find the balance between broad detection and noise reduction&lt;/li&gt;
&lt;li&gt;Review the specific logos triggered by your current settings to ensure your query is capturing the right level of brand infringement&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are ready to test your brand assets, go to the &lt;a href=&quot;https://developers.cloudflare.com/security-center/brand-protection/&quot; target=&quot;_blank&quot;&gt;Brand Protection dashboard&lt;/a&gt; to try the new preview tool.&lt;/p&gt;</description><pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>Stream - Media Transformations binding for Workers</title><link>https://developers.cloudflare.com/changelog/post/2026-03-18-media-transformations-workers-binding/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-18-media-transformations-workers-binding/</guid><description>&lt;p&gt;You can now use a Workers binding to transform videos with Media Transformations. This allows you to resize, crop, extract frames, and extract audio from videos stored anywhere, even in private locations like R2 buckets.&lt;/p&gt;
&lt;p&gt;The Media Transformations binding is useful when you want to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Transform videos stored in private or protected sources&lt;/li&gt;
&lt;li&gt;Optimize videos and store the output directly back to R2 for re-use&lt;/li&gt;
&lt;li&gt;Extract still frames for classification or description with Workers AI&lt;/li&gt;
&lt;li&gt;Extract audio tracks for transcription using Workers AI&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get started, add the Media binding to your Wrangler configuration:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;$schema&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./node_modules/wrangler/config-schema.json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;media&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MEDIA&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;media&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MEDIA&quot;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Then use the binding in your Worker to transform videos:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;video&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;R2_BUCKET&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;input.mp4&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;MEDIA&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;video&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&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;transform&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; width&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;480&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; height&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;270&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;output&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; mode&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;video&quot;&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; &lt;/span&gt;&lt;span&gt;&quot;5s&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;response&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;video&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;R2_BUCKET&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;input.mp4&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;MEDIA&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;video&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&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;transform&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; width&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;480&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; height&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;270&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;output&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; mode&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;video&quot;&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; &lt;/span&gt;&lt;span&gt;&quot;5s&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;response&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;/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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Output modes include &lt;code&gt;video&lt;/code&gt; for optimized MP4 clips, &lt;code&gt;frame&lt;/code&gt; for still images, &lt;code&gt;spritesheet&lt;/code&gt; for multiple frames, and &lt;code&gt;audio&lt;/code&gt; for M4A extraction.&lt;/p&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/stream/transform-videos/bindings/&quot;&gt;Media Transformations binding documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate><product>Stream</product><category>Stream</category></item><item><title>Agents, Workers - @cloudflare/codemode v0.2.1: MCP barrel export, zero-dependency main entry point, and custom sandbox modules</title><link>https://developers.cloudflare.com/changelog/post/2026-03-17-codemode-sdk-v021/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-17-codemode-sdk-v021/</guid><description>&lt;p&gt;The latest releases of &lt;a href=&quot;https://www.npmjs.com/package/@cloudflare/codemode&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;@cloudflare/codemode&lt;/code&gt;&lt;/a&gt; add a new MCP barrel export, remove &lt;code&gt;ai&lt;/code&gt; and &lt;code&gt;zod&lt;/code&gt; as required peer dependencies from the main entry point, and give you more control over the sandbox.&lt;/p&gt;
&lt;h4&gt;New &lt;code&gt;@cloudflare/codemode/mcp&lt;/code&gt; export&lt;/h4&gt;
&lt;p&gt;A new &lt;code&gt;@cloudflare/codemode/mcp&lt;/code&gt; entry point provides two functions that wrap MCP servers with Code Mode:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;codeMcpServer({ server, executor })&lt;/code&gt;&lt;/strong&gt; — wraps an existing MCP server with a single &lt;code&gt;code&lt;/code&gt; tool where each upstream tool becomes a typed &lt;code&gt;codemode.*&lt;/code&gt; method.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;openApiMcpServer({ spec, executor, request })&lt;/code&gt;&lt;/strong&gt; — creates &lt;code&gt;search&lt;/code&gt; and &lt;code&gt;execute&lt;/code&gt; MCP tools from an OpenAPI spec with host-side request proxying and automatic &lt;code&gt;$ref&lt;/code&gt; resolution.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;codeMcpServer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/codemode/mcp&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DynamicWorkerExecutor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/codemode&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;executor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DynamicWorkerExecutor&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; loader&lt;/span&gt;&lt;span&gt;:&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;LOADER&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Wrap an existing MCP server — all its tools become&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// typed methods the LLM can call from generated code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;server&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;codeMcpServer&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; server&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;upstreamMcp&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;executor&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;codeMcpServer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/codemode/mcp&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DynamicWorkerExecutor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/codemode&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;executor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DynamicWorkerExecutor&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; loader&lt;/span&gt;&lt;span&gt;:&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;LOADER&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Wrap an existing MCP server — all its tools become&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// typed methods the LLM can call from generated code&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;server&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;codeMcpServer&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; server&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;upstreamMcp&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;executor&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;Zero-dependency main entry point&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Breaking change in v0.2.0:&lt;/strong&gt; &lt;code&gt;generateTypes&lt;/code&gt; and the &lt;code&gt;ToolDescriptor&lt;/code&gt; / &lt;code&gt;ToolDescriptors&lt;/code&gt; types have moved to &lt;code&gt;@cloudflare/codemode/ai&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Before&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generateTypes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/codemode&quot;&lt;/span&gt;&lt;span&gt;;&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;// After&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generateTypes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/codemode/ai&quot;&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;// Before&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generateTypes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/codemode&quot;&lt;/span&gt;&lt;span&gt;;&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;// After&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generateTypes&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/codemode/ai&quot;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;The main entry point (&lt;code&gt;@cloudflare/codemode&lt;/code&gt;) no longer requires the &lt;code&gt;ai&lt;/code&gt; or &lt;code&gt;zod&lt;/code&gt; peer dependencies. It now exports:&lt;/p&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Export&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;sanitizeToolName&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Sanitize tool names into valid JS identifiers&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;normalizeCode&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Normalize LLM-generated code into async arrow functions&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;generateTypesFromJsonSchema&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Generate TypeScript type definitions from plain JSON Schema&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;jsonSchemaToType&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Convert a single JSON Schema to a TypeScript type string&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;DynamicWorkerExecutor&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Sandboxed code execution via Dynamic Worker Loader&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;ToolDispatcher&lt;/code&gt;&lt;/td&gt;&lt;td&gt;RPC target for dispatching tool calls from sandbox to host&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The &lt;code&gt;ai&lt;/code&gt; and &lt;code&gt;zod&lt;/code&gt; peer dependencies are now optional — only required when importing from &lt;code&gt;@cloudflare/codemode/ai&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Custom sandbox modules&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;DynamicWorkerExecutor&lt;/code&gt; now accepts an optional &lt;code&gt;modules&lt;/code&gt; option to inject custom ES modules into the sandbox:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;executor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DynamicWorkerExecutor&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;loader&lt;/span&gt;&lt;span&gt;:&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;LOADER&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;modules&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;&quot;utils.js&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`export function add(a, b) { return a + b; }`&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;;&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;// Sandbox code can then: import { add } from &quot;utils.js&quot;&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;executor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DynamicWorkerExecutor&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;loader&lt;/span&gt;&lt;span&gt;:&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;LOADER&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;modules&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;&quot;utils.js&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`export function add(a, b) { return a + b; }`&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;;&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;// Sandbox code can then: import { add } from &quot;utils.js&quot;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;Internal normalization and sanitization&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;DynamicWorkerExecutor&lt;/code&gt; now normalizes code and sanitizes tool names internally. You no longer need to call &lt;code&gt;normalizeCode()&lt;/code&gt; or &lt;code&gt;sanitizeToolName()&lt;/code&gt; before passing code and functions to &lt;code&gt;execute()&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Upgrade&lt;/h4&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@cloudflare/codemode@latest&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;See the &lt;a href=&quot;https://developers.cloudflare.com/agents/api-reference/codemode/&quot;&gt;Code Mode documentation&lt;/a&gt; for the full API reference.&lt;/p&gt;</description><pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>AI Gateway - Log AI Gateway request metadata without storing payloads</title><link>https://developers.cloudflare.com/changelog/post/2026-03-17-collect-log-payload-header/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-17-collect-log-payload-header/</guid><description>&lt;p&gt;AI Gateway now supports the &lt;code&gt;cf-aig-collect-log-payload&lt;/code&gt; header, which controls whether request and response bodies are stored in logs. By default, this header is set to &lt;code&gt;true&lt;/code&gt; and payloads are stored alongside metadata. Set this header to &lt;code&gt;false&lt;/code&gt; to skip payload storage while still logging metadata such as token counts, model, provider, status code, cost, and duration.&lt;/p&gt;
&lt;p&gt;This is useful when you need usage metrics but do not want to persist sensitive prompt or response data.&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://gateway.ai.cloudflare.com/v1/&lt;/span&gt;&lt;span&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;$GATEWAY_ID&lt;/span&gt;&lt;span&gt;/openai/chat/completions&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Authorization: Bearer &lt;/span&gt;&lt;span&gt;$TOKEN&lt;/span&gt;&lt;span&gt;&quot;&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Content-Type: application/json&apos;&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;cf-aig-collect-log-payload: false&apos;&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;--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;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;model&quot;: &quot;gpt-4o-mini&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;messages&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;role&quot;: &quot;user&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;content&quot;: &quot;What is the email address and phone number of user123?&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;/span&gt;&lt;/span&gt;&lt;span&gt;}&apos;&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/ai-gateway/observability/logging/#collect-log-payload-cf-aig-collect-log-payload&quot;&gt;Logging&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate><product>AI Gateway</product><category>AI Gateway</category></item><item><title>Security Overview - New Security Overview UI</title><link>https://developers.cloudflare.com/changelog/post/2026-03-17-new-security-overview-ui/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-17-new-security-overview-ui/</guid><description>&lt;p&gt;The Security Overview has been updated to provide Application Security customers with more actionable insights and a clearer view of their security posture.&lt;/p&gt;
&lt;p&gt;Key improvements include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Criticality for all Insights&lt;/strong&gt;: Every insight now includes a criticality rating, allowing you to prioritize the most impactful security action items first.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Detection Tools Section&lt;/strong&gt;: A new section displays the security detection tools available to you, indicating which are currently enabled and which can be activated to strengthen your defenses.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Industry Peer Comparison&lt;/strong&gt; (Enterprise customers): A new module from Security Reports benchmarks your security posture against industry peers, highlighting relative strengths and areas for improvement.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/overview-ui.D7FzaCLm_Ze702A.webp&quot; alt=&quot;New Security Overview UI&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/security/overview/&quot;&gt;Security Overview&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate><product>Security Overview</product><category>Security Overview</category></item><item><title>Vectorize - Return up to 50 query results with values or metadata</title><link>https://developers.cloudflare.com/changelog/post/2026-03-16-topk-limit-increased-to-50/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-16-topk-limit-increased-to-50/</guid><description>&lt;p&gt;You can now set &lt;code&gt;topK&lt;/code&gt; up to &lt;code&gt;50&lt;/code&gt; when a Vectorize query returns values or full metadata. This raises the previous limit of &lt;code&gt;20&lt;/code&gt; for queries that use &lt;code&gt;returnValues: true&lt;/code&gt; or &lt;code&gt;returnMetadata: &quot;all&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Use the higher limit when you need more matches in a single query response without dropping values or metadata. Refer to the &lt;a href=&quot;https://developers.cloudflare.com/vectorize/reference/client-api/&quot;&gt;Vectorize API reference&lt;/a&gt; for query options and current &lt;code&gt;topK&lt;/code&gt; limits.&lt;/p&gt;</description><pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate><product>Vectorize</product><category>Vectorize</category></item><item><title>Containers - SSH into running Container instances</title><link>https://developers.cloudflare.com/changelog/post/2026-03-12-ssh-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-12-ssh-support/</guid><description>&lt;p&gt;You can now SSH into running Container instances using Wrangler. This is useful for debugging, inspecting running processes, or executing one-off commands inside a Container.&lt;/p&gt;
&lt;p&gt;To connect, enable &lt;code&gt;wrangler_ssh&lt;/code&gt; in your Container configuration and add your &lt;code&gt;ssh-ed25519&lt;/code&gt; public key to &lt;code&gt;authorized_keys&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;containers&lt;/span&gt;&lt;span&gt;&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;wrangler_ssh&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;enabled&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;&quot;&lt;/span&gt;&lt;span&gt;authorized_keys&lt;/span&gt;&lt;span&gt;&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;#x3C;NAME&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;public_key&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;#x3C;YOUR_PUBLIC_KEY_HERE&gt;&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[[&lt;/span&gt;&lt;span&gt;containers&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;containers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;wrangler_ssh&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;enabled&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;containers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;authorized_keys&lt;/span&gt;&lt;span&gt;]]&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;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;#x3C;NAME&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;public_key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;#x3C;YOUR_PUBLIC_KEY_HERE&gt;&quot;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Then connect with:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;containers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ssh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;INSTANCE_ID&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;You can also run a single command without opening an interactive shell:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;containers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ssh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;INSTANCE_ID&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;ls&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-al&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;Use &lt;code&gt;wrangler containers instances &amp;#x3C;APPLICATION&gt;&lt;/code&gt; to find the instance ID for a running Container.&lt;/p&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/containers/ssh/&quot;&gt;SSH documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate><product>Containers</product><category>Containers</category></item><item><title>Containers - List Container instances with `wrangler containers instances`</title><link>https://developers.cloudflare.com/changelog/post/2026-03-12-wrangler-containers-instances/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-12-wrangler-containers-instances/</guid><description>&lt;p&gt;A new &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/containers/#containers-instances&quot;&gt;&lt;code&gt;wrangler containers instances&lt;/code&gt;&lt;/a&gt; command lists all instances for a given Container application. This mirrors the instances view in the Cloudflare dashboard.&lt;/p&gt;
&lt;p&gt;The command displays each instance&apos;s ID, name, state, location, version, and creation time:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;containers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;APPLICATION_ID&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;Use the &lt;code&gt;--json&lt;/code&gt; flag for machine-readable output, which is also the default format in non-interactive environments such as CI pipelines.&lt;/p&gt;
&lt;p&gt;For the full list of options, refer to the &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/containers/#containers-instances&quot;&gt;&lt;code&gt;containers instances&lt;/code&gt; command reference&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate><product>Containers</product><category>Containers</category></item><item><title>Cloudflare Fundamentals - Retry-After HTTP header for retryable 1xxx errors</title><link>https://developers.cloudflare.com/changelog/post/2026-03-12-retry-after-header-for-1xxx-errors/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-12-retry-after-header-for-1xxx-errors/</guid><description>&lt;p&gt;Cloudflare-generated 1xxx error responses now include a standard &lt;code&gt;Retry-After&lt;/code&gt; HTTP header when the error is retryable. Agents and HTTP clients can read the recommended wait time from response headers alone — no body parsing required.&lt;/p&gt;
&lt;h4&gt;Changes&lt;/h4&gt;
&lt;p&gt;Seven retryable error codes now emit &lt;code&gt;Retry-After&lt;/code&gt;:&lt;/p&gt;













































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Error code&lt;/th&gt;&lt;th&gt;Retry-After (seconds)&lt;/th&gt;&lt;th&gt;Error name&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1004&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;td&gt;DNS resolution error&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1005&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;td&gt;Banned zone&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1015&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;Rate limited&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1033&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;td&gt;Argo Tunnel error&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1038&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;HTTP headers limit exceeded&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1200&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;Cache connection limit&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1205&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;Too many redirects&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The header value matches the existing &lt;code&gt;retry_after&lt;/code&gt; body field in JSON and Markdown responses.&lt;/p&gt;
&lt;p&gt;If a WAF rate limiting rule has already set a dynamic &lt;code&gt;Retry-After&lt;/code&gt; value on the response, that value takes precedence.&lt;/p&gt;
&lt;h4&gt;Availability&lt;/h4&gt;
&lt;p&gt;Available for all zones on all plans.&lt;/p&gt;
&lt;h4&gt;Verify&lt;/h4&gt;
&lt;p&gt;Check for the header on any retryable error:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-s&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--compressed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-D&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-o&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/dev/null&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Accept: application/json&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-A&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;TestAgent/1.0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Accept-Encoding: gzip, deflate&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;#x3C;YOUR_DOMAIN&gt;/cdn-cgi/error/1015&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;grep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;retry-after&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;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9110#section-10.2.3&quot; target=&quot;_blank&quot;&gt;RFC 9110 section 10.2.3 - Retry-After&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/support/troubleshooting/http-status-codes/cloudflare-1xxx-errors/&quot;&gt;Cloudflare 1xxx error documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>WAF - WAF Release - 2026-03-12 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2026-03-12-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-12-emergency-waf-release/</guid><description>&lt;p&gt;This week&apos;s release introduces new detections for vulnerabilities in Ivanti Endpoint Manager Mobile (CVE-2026-1281 and CVE-2026-1340), alongside a new generic detection rule designed to identify and block Cross-Site Scripting (XSS) injection attempts within the &lt;code&gt;Content-Security-Policy&lt;/code&gt; (CSP) HTTP request header.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CVE-2026-1281 &amp;#x26; CVE-2026-1340: Ivanti Endpoint Manager Mobile processes HTTP requests through Apache RevwriteMap directives that pass user-controlled input to Bash scripts (&lt;code&gt;/mi/bin/map-appstore-url&lt;/code&gt; and &lt;code&gt;/mi/bin/map-aft-store-url&lt;/code&gt;). Bash scripts do not sanitize user input and are vulnerable to shell arithmetic expansion thereby allowing attackers to achieve unauthenticated remote code execution.&lt;/li&gt;
&lt;li&gt;Generic XSS in CSP Header: This rule identifies malicious payloads embedded within the request&apos;s &lt;code&gt;Content-Security-Policy&lt;/code&gt; header. It specifically targets scenarios where web frameworks or applications trust and extract values directly from the CSP header in the incoming request without sufficient validation. Attackers can provide crafted header values to inject scripts or malicious directives that are subsequently processed by the server.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Successful exploitation of Ivanti EPMM vulnerability allows unauthenticated remote code execution and generic XSS in CSP header allows attackers to inject malicious scripts during page rendering. In environments using server-side caching, this poisoned XSS content can subsequently be cached and automatically served to all visitors.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5ae86a9bda0c41dbb905132f796ea2f6 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Ivanti EPMM - Code Injection - CVE:CVE-2026-1281 CVE:CVE-2026-1340&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;35978af68e374a059e397bf5ee964a8c &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Anomaly:Header:Content-Security-Policy&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Cloudflare Fundamentals - JSON responses and RFC 9457 support for Cloudflare 1xxx errors</title><link>https://developers.cloudflare.com/changelog/post/2026-03-11-json-rfc9457-responses-for-1xxx-errors/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-11-json-rfc9457-responses-for-1xxx-errors/</guid><description>&lt;p&gt;Cloudflare-generated 1xxx errors now return structured JSON when clients send &lt;code&gt;Accept: application/json&lt;/code&gt; or &lt;code&gt;Accept: application/problem+json&lt;/code&gt;. JSON responses follow &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9457&quot; target=&quot;_blank&quot;&gt;RFC 9457 (Problem Details for HTTP APIs)&lt;/a&gt;, so any HTTP client that understands Problem Details can parse the base members without Cloudflare-specific code.&lt;/p&gt;
&lt;h4&gt;Breaking change&lt;/h4&gt;
&lt;p&gt;The Markdown frontmatter field &lt;code&gt;http_status&lt;/code&gt; has been renamed to &lt;code&gt;status&lt;/code&gt;. Agents consuming Markdown frontmatter should update parsers accordingly.&lt;/p&gt;
&lt;h4&gt;Changes&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;JSON format.&lt;/strong&gt; Clients sending &lt;code&gt;Accept: application/json&lt;/code&gt; or &lt;code&gt;Accept: application/problem+json&lt;/code&gt; now receive a structured JSON object with the same operational fields as Markdown frontmatter, plus RFC 9457 standard members.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RFC 9457 standard members (JSON only):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;type&lt;/code&gt; — URI pointing to Cloudflare documentation for the specific error code&lt;/li&gt;
&lt;li&gt;&lt;code&gt;status&lt;/code&gt; — HTTP status code (matching the response status)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt; — short, human-readable summary&lt;/li&gt;
&lt;li&gt;&lt;code&gt;detail&lt;/code&gt; — human-readable explanation specific to this occurrence&lt;/li&gt;
&lt;li&gt;&lt;code&gt;instance&lt;/code&gt; — Ray ID identifying this specific error occurrence&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Field renames:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;http_status&lt;/code&gt; -&gt; &lt;code&gt;status&lt;/code&gt; (JSON and Markdown)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;what_happened&lt;/code&gt; -&gt; &lt;code&gt;detail&lt;/code&gt; (JSON only — Markdown prose sections are unchanged)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Content-Type mirroring.&lt;/strong&gt; Clients sending &lt;code&gt;Accept: application/problem+json&lt;/code&gt; receive &lt;code&gt;Content-Type: application/problem+json; charset=utf-8&lt;/code&gt; back; &lt;code&gt;Accept: application/json&lt;/code&gt; receives &lt;code&gt;application/json; charset=utf-8&lt;/code&gt;. Same body in both cases.&lt;/p&gt;
&lt;h4&gt;Negotiation behavior&lt;/h4&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Request header sent&lt;/th&gt;&lt;th&gt;Response format&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Accept: application/json&lt;/code&gt;&lt;/td&gt;&lt;td&gt;JSON (&lt;code&gt;application/json&lt;/code&gt; content type)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Accept: application/problem+json&lt;/code&gt;&lt;/td&gt;&lt;td&gt;JSON (&lt;code&gt;application/problem+json&lt;/code&gt; content type)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Accept: application/json, text/markdown;q=0.9&lt;/code&gt;&lt;/td&gt;&lt;td&gt;JSON&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Accept: text/markdown&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Markdown&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Accept: text/markdown, application/json&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Markdown (equal &lt;code&gt;q&lt;/code&gt;, first-listed wins)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;Accept: */*&lt;/code&gt;&lt;/td&gt;&lt;td&gt;HTML (default)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;Availability&lt;/h4&gt;
&lt;p&gt;Available now for Cloudflare-generated 1xxx errors.&lt;/p&gt;
&lt;h4&gt;Get started&lt;/h4&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-s&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--compressed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Accept: application/json&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-A&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;TestAgent/1.0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Accept-Encoding: gzip, deflate&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;#x3C;YOUR_DOMAIN&gt;/cdn-cgi/error/1015&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jq&lt;/span&gt;&lt;span&gt; &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;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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-s&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--compressed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Accept: application/problem+json&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-A&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;TestAgent/1.0&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Accept-Encoding: gzip, deflate&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;#x3C;YOUR_DOMAIN&gt;/cdn-cgi/error/1015&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jq&lt;/span&gt;&lt;span&gt; &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;References:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc9457&quot; target=&quot;_blank&quot;&gt;RFC 9457 — Problem Details for HTTP APIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/support/troubleshooting/http-status-codes/cloudflare-1xxx-errors/&quot;&gt;Cloudflare 1xxx error documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Log Explorer - Ingest field selection for Log Explorer</title><link>https://developers.cloudflare.com/changelog/post/2026-03-11-ingest-field-selection/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-11-ingest-field-selection/</guid><description>&lt;p&gt;Cloudflare Log Explorer now allows you to customize exactly which data fields are ingested and stored when enabling or managing log datasets.&lt;/p&gt;
&lt;p&gt;Previously, ingesting logs often meant taking an &quot;all or nothing&quot; approach to data fields. With &lt;strong&gt;Ingest Field Selection&lt;/strong&gt;, you can now choose from a list of available and recommended fields for each dataset. This allows you to reduce noise, focus on the metrics that matter most to your security and performance analysis, and manage your data footprint more effectively.&lt;/p&gt;
&lt;h4&gt;Key capabilities&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Granular control:&lt;/strong&gt; Select only the specific fields you need when enabling a new dataset.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic updates:&lt;/strong&gt; Update fields for existing, already enabled logstreams at any time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Historical consistency:&lt;/strong&gt; Even if you disable a field later, you can still query and receive results for that field for the period it was captured.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data integrity:&lt;/strong&gt; Core fields, such as &lt;code&gt;Timestamp&lt;/code&gt;, are automatically retained to ensure your logs remain searchable and chronologically accurate.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Example configuration&lt;/h4&gt;
&lt;p&gt;When configuring a dataset via the dashboard or API, you can define a specific set of fields. The &lt;code&gt;Timestamp&lt;/code&gt; field remains mandatory to ensure data indexability.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;dataset&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;firewall_events&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;enabled&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;&quot;&lt;/span&gt;&lt;span&gt;fields&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;Timestamp&quot;&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;&quot;ClientRequestHost&quot;&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;&quot;ClientIP&quot;&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;&quot;Action&quot;&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;&quot;EdgeResponseStatus&quot;&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;&quot;OriginResponseStatus&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;/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 the &lt;a href=&quot;https://developers.cloudflare.com/log-explorer/&quot;&gt;Log Explorer documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate><product>Log Explorer</product><category>Log Explorer</category></item><item><title>Workers AI - NVIDIA Nemotron 3 Super now available on Workers AI</title><link>https://developers.cloudflare.com/changelog/post/2026-03-11-nemotron-3-super-workers-ai/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-11-nemotron-3-super-workers-ai/</guid><description>&lt;p&gt;We&apos;re excited to partner with NVIDIA to bring &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/nemotron-3-120b-a12b/&quot;&gt;&lt;code&gt;@cf/nvidia/nemotron-3-120b-a12b&lt;/code&gt;&lt;/a&gt; to Workers AI. NVIDIA Nemotron 3 Super is a Mixture-of-Experts (MoE) model with a hybrid Mamba-transformer architecture, 120B total parameters, and 12B active parameters per forward pass.&lt;/p&gt;
&lt;p&gt;The model is optimized for running many collaborating agents per application. It delivers high accuracy for reasoning, tool calling, and instruction following across complex multi-step tasks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key capabilities:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hybrid Mamba-transformer architecture&lt;/strong&gt; delivers over 50% higher token generation throughput compared to leading open models, reducing latency for real-world applications&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tool calling&lt;/strong&gt; support for building AI agents that invoke tools across multiple conversation turns&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-Token Prediction (MTP)&lt;/strong&gt; accelerates long-form text generation by predicting several future tokens simultaneously in a single forward pass&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;32,000 token context window&lt;/strong&gt; for retaining conversation history and plan states across multi-step agent workflows&lt;/li&gt;
&lt;/ul&gt;
&lt;aside&gt;&lt;p&gt;Prompt caching&lt;/p&gt;&lt;div&gt;&lt;p&gt;For optimal performance with multi-turn conversations, send the &lt;code&gt;x-session-affinity&lt;/code&gt; header with a unique session identifier to enable prompt caching. This routes requests to the same model instance, reducing latency and inference costs. For details, refer to &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/features/prompt-caching/&quot;&gt;Prompt caching&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;Use Nemotron 3 Super through the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/configuration/bindings/&quot;&gt;Workers AI binding&lt;/a&gt; (&lt;code&gt;env.AI.run()&lt;/code&gt;), the REST API at &lt;code&gt;/run&lt;/code&gt; or &lt;code&gt;/v1/chat/completions&lt;/code&gt;, or the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/configuration/open-ai-compatibility/&quot;&gt;OpenAI-compatible endpoint&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/nemotron-3-120b-a12b/&quot;&gt;Nemotron 3 Super model page&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2026.3.566.1)</title><link>https://developers.cloudflare.com/changelog/post/2026-03-10-warp-macos-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-10-warp-macos-beta/</guid><description>&lt;p&gt;A new Beta release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and introduces a brand new visual style for the client interface. The new Cloudflare One Client interface changes connectivity management from a toggle to a button and brings useful connectivity settings to the home screen. The redesign also introduces a collapsible navigation bar. When expanded, more client information can be accessed including connectivity, settings, and device profile information. If you have any feedback or questions, visit the &lt;a href=&quot;https://community.cloudflare.com/t/introducing-the-new-cloudflare-one-client-interface/901362&quot;&gt;Cloudflare Community forum&lt;/a&gt; and let us know.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Empty MDM files are now rejected instead of being incorrectly accepted as a single MDM config.&lt;/li&gt;
&lt;li&gt;Fixed an issue in proxy mode where the client could become unresponsive due to upstream connection timeouts.&lt;/li&gt;
&lt;li&gt;Fixed emergency disconnect state from a previous organization incorrectly persisting after switching organizations.&lt;/li&gt;
&lt;li&gt;Consumer-only CLI commands are now clearly distinguished from Zero Trust commands.&lt;/li&gt;
&lt;li&gt;Added detailed QUIC connection metrics to diagnostic logs for better troubleshooting.&lt;/li&gt;
&lt;li&gt;Added monitoring for tunnel statistics collection timeouts.&lt;/li&gt;
&lt;li&gt;Switched tunnel congestion control algorithm to Cubic for improved reliability across platforms.&lt;/li&gt;
&lt;li&gt;Fixed initiating managed network detection checks when no network is available, which caused device profile flapping.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The client may become stuck in a &lt;code&gt;Connecting&lt;/code&gt; state. To resolve this issue, reconnect the client by selecting &lt;strong&gt;Disconnect&lt;/strong&gt; and then &lt;strong&gt;Connect&lt;/strong&gt; in the client user interface. Alternatively, change the client&apos;s operation mode.&lt;/li&gt;
&lt;li&gt;The client may display an empty white screen upon the device waking from sleep. To resolve this issue, exit and then open the client to re-launch it.&lt;/li&gt;
&lt;li&gt;Canceling login during a single MDM configuration setup results in an empty page with no way to resume authentication. To work around this issue, exit and relaunch the client.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 10 Mar 2026 17:10:39 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2026.3.566.1)</title><link>https://developers.cloudflare.com/changelog/post/2026-03-10-warp-windows-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-10-warp-windows-beta/</guid><description>&lt;p&gt;A new Beta release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and introduces a brand new visual style for the client interface. The new Cloudflare One Client interface changes connectivity management from a toggle to a button and brings useful connectivity settings to the home screen. The redesign also introduces a collapsible navigation bar. When expanded, more client information can be accessed including connectivity, settings, and device profile information. If you have any feedback or questions, visit the &lt;a href=&quot;https://community.cloudflare.com/t/introducing-the-new-cloudflare-one-client-interface/901362&quot;&gt;Cloudflare Community forum&lt;/a&gt; and let us know.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Consumer-only CLI commands are now clearly distinguished from Zero Trust commands.&lt;/li&gt;
&lt;li&gt;Added detailed QUIC connection metrics to diagnostic logs for better troubleshooting.&lt;/li&gt;
&lt;li&gt;Added monitoring for tunnel statistics collection timeouts.&lt;/li&gt;
&lt;li&gt;Switched tunnel congestion control algorithm to Cubic for improved reliability across platforms.&lt;/li&gt;
&lt;li&gt;Fixed packet capture failing on tunnel interface when the tunnel interface is renamed by SCCM VPN boundary support.&lt;/li&gt;
&lt;li&gt;Fixed unnecessary registration deletion caused by RDP connections in multi-user mode.&lt;/li&gt;
&lt;li&gt;Fixed increased tunnel interface start-up time due to a race between duplicate address detection (DAD) and disabling NetBT.&lt;/li&gt;
&lt;li&gt;Fixed tunnel failing to connect when the system DNS search list contains unexpected characters.&lt;/li&gt;
&lt;li&gt;Empty MDM files are now rejected instead of being incorrectly accepted as a single MDM config.&lt;/li&gt;
&lt;li&gt;Fixed an issue in proxy mode where the client could become unresponsive due to upstream connection timeouts.&lt;/li&gt;
&lt;li&gt;Fixed emergency disconnect state from a previous organization incorrectly persisting after switching organizations.&lt;/li&gt;
&lt;li&gt;Fixed initiating managed network detection checks when no network is available, which caused device profile flapping.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The client may unexpectedly terminate during captive portal login. To work around this issue, use a web browser to authenticate with the captive portal and then re-launch the client.&lt;/li&gt;
&lt;li&gt;An error indicating that Microsoft Edge can&apos;t read and write to its data directory may be displayed during captive portal login; this error is benign and can be dismissed.&lt;/li&gt;
&lt;li&gt;The client may become stuck in a &lt;code&gt;Connecting&lt;/code&gt; state. To resolve this issue, reconnect the client by selecting &lt;strong&gt;Disconnect&lt;/strong&gt; and then &lt;strong&gt;Connect&lt;/strong&gt; in the client user interface. Alternatively, change the client&apos;s operation mode.&lt;/li&gt;
&lt;li&gt;The client may display an empty white screen upon the device waking from sleep. To resolve this issue, exit and then open the client to re-launch it.&lt;/li&gt;
&lt;li&gt;Canceling login during a single MDM configuration setup results in an empty page with no way to resume authentication. To work around this issue, exit and relaunch the client.&lt;/li&gt;
&lt;li&gt;For Windows 11 24H2 users, Microsoft has confirmed a regression that may lead to performance issues like mouse lag, audio cracking, or other slowdowns. Cloudflare recommends users experiencing these issues upgrade to a minimum &lt;a href=&quot;https://support.microsoft.com/en-us/topic/july-8-2025-kb5062553-os-build-26100-4652-523e69cb-051b-43c6-8376-6a76d6caeefd&quot;&gt;Windows 11 24H2 version KB5062553&lt;/a&gt; or higher for resolution.&lt;/li&gt;
&lt;li&gt;Devices with KB5055523 installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later. This warning will be omitted from future release notes. This Microsoft Security Intelligence update was released in May 2025.&lt;/li&gt;
&lt;li&gt;DNS resolution may be broken when the following conditions are all true:&lt;ul&gt;
&lt;li&gt;The client is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while the client is connected.
To work around this issue, reconnect the client by selecting &lt;strong&gt;Disconnect&lt;/strong&gt; and then &lt;strong&gt;Connect&lt;/strong&gt; in the client user interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 10 Mar 2026 17:10:37 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Audit Logs - Audit logs (version 2) - General Availability</title><link>https://developers.cloudflare.com/changelog/post/2026-03-10-audit-logs-v2-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-10-audit-logs-v2-ga/</guid><description>&lt;p&gt;Audit Logs v2 is now generally available to all Cloudflare customers.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/auditlogsv2.C3pqAR33_1qYU5j.webp&quot; alt=&quot;Audit Logs v2 GA&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Audit Logs v2 provides a unified and standardized system for tracking and recording all user and system actions across Cloudflare products. Built on Cloudflare&apos;s API Shield / OpenAPI gateway, logs are generated automatically without requiring manual instrumentation from individual product teams, ensuring consistency across ~95% of Cloudflare products.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What&apos;s available at GA:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Standardized logging&lt;/strong&gt; — Audit logs follow a consistent format across all Cloudflare products, making it easier to search, filter, and investigate activity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expanded product coverage&lt;/strong&gt; — ~95% of Cloudflare products covered, up from ~75% in v1.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Granular filtering&lt;/strong&gt; — Filter by actor, action type, action result, resource, raw HTTP method, zone, and more. Over 20 filter parameters available via the API.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced context&lt;/strong&gt; — Each log entry includes authentication method, interface (API or dashboard), Cloudflare Ray ID, and actor token details.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;18-month retention&lt;/strong&gt; — Logs are retained for 18 months. Full history is accessible via the API or Logpush.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Access:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dashboard&lt;/strong&gt;: Go to &lt;strong&gt;Manage Account&lt;/strong&gt; &gt; &lt;strong&gt;Audit Logs&lt;/strong&gt;. Audit Logs v2 is shown by default.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API&lt;/strong&gt;: &lt;code&gt;GET https://api.cloudflare.com/client/v4/accounts/{account_id}/logs/audit&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Logpush&lt;/strong&gt;: Available via the &lt;code&gt;audit_logs_v2&lt;/code&gt; account-scoped dataset.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Important notes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Approximately 30 days of logs from the Beta period (back to ~February 8, 2026) are available at GA. These Beta logs will expire on ~April 9, 2026. Logs generated after GA will be retained for the full 18 months. Older logs remain available in Audit Logs v1.&lt;/li&gt;
&lt;li&gt;The UI query window is limited to 90 days for performance reasons. Use the API or Logpush for access to the full 18-month history.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET&lt;/code&gt; requests (view actions) and &lt;code&gt;4xx&lt;/code&gt; error responses are not logged at GA. &lt;code&gt;GET&lt;/code&gt; logging will be selectively re-enabled for sensitive read operations in a future release.&lt;/li&gt;
&lt;li&gt;Audit Logs v1 continues to run in parallel. A deprecation timeline will be communicated separately.&lt;/li&gt;
&lt;li&gt;Before and after values — the ability to see what a value changed from and to — is a highly requested feature and is on our roadmap for a post-GA release. In the meantime, we recommend using Audit Logs v1 for before and after values. Audit Logs v1 will continue to run in parallel until this feature is available in v2.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more details, refer to the &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/account/account-security/audit-logs/&quot;&gt;Audit Logs v2 documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate><product>Audit Logs</product><category>Audit Logs</category></item><item><title>Browser Rendering - Crawl entire websites with a single API call using Browser Rendering</title><link>https://developers.cloudflare.com/changelog/post/2026-03-10-br-crawl-endpoint/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-10-br-crawl-endpoint/</guid><description>&lt;p&gt;&lt;em&gt;Edit: this post has been edited to clarify crawling behavior with respect to site guidance.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You can now crawl an entire website with a single API call using &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/&quot;&gt;Browser Rendering&lt;/a&gt;&apos;s new &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/rest-api/crawl-endpoint/&quot;&gt;&lt;code&gt;/crawl&lt;/code&gt; endpoint&lt;/a&gt;, available in open beta. Submit a starting URL, and pages are automatically discovered, rendered in a headless browser, and returned in multiple formats, including HTML, Markdown, and structured JSON. The endpoint is a &lt;a href=&quot;https://developers.cloudflare.com/bots/concepts/bot/signed-agents/&quot; target=&quot;_blank&quot;&gt;signed-agent&lt;/a&gt; that respects robots.txt and &lt;a href=&quot;https://www.cloudflare.com/ai-crawl-control/&quot; target=&quot;_blank&quot;&gt;AI Crawl Control&lt;/a&gt; by default, making it easy for developers to comply with website rules, and making it less likely for crawlers to ignore web-owner guidance. This is great for training models, building RAG pipelines, and researching or monitoring content across a site.&lt;/p&gt;
&lt;p&gt;Crawl jobs run asynchronously. You submit a URL, receive a job ID, and check back for results as pages are processed.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Initiate a crawl&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://api.cloudflare.com/client/v4/accounts/{account_id}/browser-rendering/crawl&apos;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Authorization: Bearer &amp;#x3C;apiToken&gt;&apos;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Content-Type: application/json&apos;&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;-d&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;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;url&quot;: &quot;https://blog.cloudflare.com/&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;}&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;# Check results&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GET&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://api.cloudflare.com/client/v4/accounts/{account_id}/browser-rendering/crawl/{job_id}&apos;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Authorization: Bearer &amp;#x3C;apiToken&gt;&apos;&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;Key features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multiple output formats&lt;/strong&gt; - Return crawled content as HTML, Markdown, and structured JSON (powered by &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/&quot;&gt;Workers AI&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Crawl scope controls&lt;/strong&gt; - Configure crawl depth, page limits, and wildcard patterns to include or exclude specific URL paths&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic page discovery&lt;/strong&gt; - Discovers URLs from sitemaps, page links, or both&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Incremental crawling&lt;/strong&gt; - Use &lt;code&gt;modifiedSince&lt;/code&gt; and &lt;code&gt;maxAge&lt;/code&gt; to skip pages that haven&apos;t changed or were recently fetched, saving time and cost on repeated crawls&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Static mode&lt;/strong&gt; - Set &lt;code&gt;render: false&lt;/code&gt; to fetch static HTML without spinning up a browser, for faster crawling of static sites&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Well-behaved bot&lt;/strong&gt; - Honors &lt;code&gt;robots.txt&lt;/code&gt; directives, including &lt;code&gt;crawl-delay&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Available on both the Workers Free and Paid plans.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: the /crawl endpoint cannot bypass Cloudflare bot detection or captchas, and self-identifies as a bot.&lt;/p&gt;
&lt;p&gt;To get started, refer to the &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/rest-api/crawl-endpoint/&quot;&gt;crawl endpoint documentation&lt;/a&gt;.
If you are setting up your own site to be crawled, review the &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/reference/robots-txt/&quot;&gt;robots.txt and sitemaps best practices&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate><product>Browser Rendering</product><category>Browser Rendering</category></item><item><title>API Shield - New Vulnerability Scanner for API Shield</title><link>https://developers.cloudflare.com/changelog/post/2026-03-09-vulnerability-scanner/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-09-vulnerability-scanner/</guid><description>&lt;p&gt;Introducing Cloudflare&apos;s Web and API Vulnerability Scanner (Open Beta)&lt;/p&gt;
&lt;p&gt;Cloudflare is launching the &lt;a href=&quot;https://blog.cloudflare.com/vulnerability-scanner&quot; target=&quot;_blank&quot;&gt;Open Beta of the &lt;strong&gt;Web and API Vulnerability Scanner&lt;/strong&gt;&lt;/a&gt; for all &lt;a href=&quot;https://developers.cloudflare.com/api-shield/&quot;&gt;API Shield&lt;/a&gt; customers. This new, stateful Dynamic Application Security Testing (DAST) platform helps teams proactively find logic flaws in their APIs.&lt;/p&gt;
&lt;p&gt;The initial release focuses on detecting Broken Object Level Authorization (BOLA) vulnerabilities by building API call graphs to simulate attacker and owner contexts, then testing these contexts by sending real HTTP requests to your APIs.&lt;/p&gt;
&lt;p&gt;The scanner is now available via the Cloudflare API. To scan, set up your target environment, owner and attacker credentials, and upload your OpenAPI file with response schemas. The scanner will be available in the Cloudflare dashboard in a future release.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Access&lt;/strong&gt;: This feature is only available to API Shield subscribers via the Cloudflare API. We hope you will use the API for programmatic integration into your CI/CD pipelines and security dashboards.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Documentation&lt;/strong&gt;: Refer to the &lt;a href=&quot;https://developers.cloudflare.com/api-shield/security/vulnerability-scanner/&quot;&gt;developer documentation&lt;/a&gt; to start scanning your endpoints today.&lt;/p&gt;</description><pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate><product>API Shield</product><category>API Shield</category></item><item><title>Logs - New MCP Portal Logs dataset and new fields across multiple Logpush datasets in Cloudflare Logs</title><link>https://developers.cloudflare.com/changelog/post/2026-03-09-log-fields-updated/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-09-log-fields-updated/</guid><description>&lt;p&gt;Cloudflare has added new fields across multiple &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/datasets/&quot;&gt;Logpush datasets&lt;/a&gt;:&lt;/p&gt;
&lt;h4&gt;New dataset&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MCP Portal Logs&lt;/strong&gt;: A new dataset with fields including &lt;code&gt;ClientCountry&lt;/code&gt;, &lt;code&gt;ClientIP&lt;/code&gt;, &lt;code&gt;ColoCode&lt;/code&gt;, &lt;code&gt;Datetime&lt;/code&gt;, &lt;code&gt;Error&lt;/code&gt;, &lt;code&gt;Method&lt;/code&gt;, &lt;code&gt;PortalAUD&lt;/code&gt;, &lt;code&gt;PortalID&lt;/code&gt;, &lt;code&gt;PromptGetName&lt;/code&gt;, &lt;code&gt;ResourceReadURI&lt;/code&gt;, &lt;code&gt;ServerAUD&lt;/code&gt;, &lt;code&gt;ServerID&lt;/code&gt;, &lt;code&gt;ServerResponseDurationMs&lt;/code&gt;, &lt;code&gt;ServerURL&lt;/code&gt;, &lt;code&gt;SessionID&lt;/code&gt;, &lt;code&gt;Success&lt;/code&gt;, &lt;code&gt;ToolCallName&lt;/code&gt;, &lt;code&gt;UserEmail&lt;/code&gt;, and &lt;code&gt;UserID&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;New fields in existing datasets&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DEX Application Tests&lt;/strong&gt;: &lt;code&gt;HTTPRedirectEndMs&lt;/code&gt;, &lt;code&gt;HTTPRedirectStartMs&lt;/code&gt;, &lt;code&gt;HTTPResponseBody&lt;/code&gt;, and &lt;code&gt;HTTPResponseHeaders&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DEX Device State Events&lt;/strong&gt;: &lt;code&gt;ExperimentalExtra&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Firewall Events&lt;/strong&gt;: &lt;code&gt;FraudUserID&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gateway HTTP&lt;/strong&gt;: &lt;code&gt;AppControlInfo&lt;/code&gt; and &lt;code&gt;ApplicationStatuses&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gateway DNS&lt;/strong&gt;: &lt;code&gt;InternalDNSDurationMs&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTP Requests&lt;/strong&gt;: &lt;code&gt;FraudEmailRisk&lt;/code&gt;, &lt;code&gt;FraudUserID&lt;/code&gt;, and &lt;code&gt;PayPerCrawlStatus&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network Analytics Logs&lt;/strong&gt;: &lt;code&gt;DNSQueryName&lt;/code&gt;, &lt;code&gt;DNSQueryType&lt;/code&gt;, and &lt;code&gt;PFPCustomTag&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WARP Toggle Changes&lt;/strong&gt;: &lt;code&gt;UserEmail&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WARP Config Changes&lt;/strong&gt;: &lt;code&gt;UserEmail&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zero Trust Network Session Logs&lt;/strong&gt;: &lt;code&gt;SNI&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the complete field definitions for each dataset, refer to &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/datasets/&quot;&gt;Logpush datasets&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>Workflows, Workers - Workflow steps now expose retry attempt number via step context</title><link>https://developers.cloudflare.com/changelog/post/2026-03-06-step-context-available/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-06-step-context-available/</guid><description>&lt;p&gt;Cloudflare Workflows allows you to configure specific retry logic for each step in your workflow execution. Now, you can access &lt;strong&gt;which&lt;/strong&gt; retry attempt is currently executing for calls to &lt;code&gt;step.do()&lt;/code&gt;:&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;step&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;my-step&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;// ctx.attempt is 1 on first try, 2 on first retry, etc.&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Attempt &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;attempt&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;;&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;You can use the step context for improved logging &amp;#x26; observability, progressive backoff, or conditional logic in your workflow definition.&lt;/p&gt;
&lt;p&gt;Note that the current attempt number is 1-indexed. For more information on retry behavior, refer to &lt;a href=&quot;https://developers.cloudflare.com/workflows/build/sleeping-and-retrying/&quot;&gt;Sleeping and Retrying&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 06 Mar 2026 12:00:00 GMT</pubDate><product>Workflows</product><category>Workflows</category><category>Workers</category></item><item><title>Radar - Region Filtering, AS Traffic Volume, and Navigation Improvements on Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2026-03-06-radar-region-filtering-traffic-volume-navigation/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-06-radar-region-filtering-traffic-volume-navigation/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; ships several new features that improve the flexibility and usability of the platform, as well as visibility into what is happening on the Internet.&lt;/p&gt;
&lt;h4&gt;Region filtering&lt;/h4&gt;
&lt;p&gt;All location-aware pages now support filtering by region, including continents, geographic subregions (&lt;a href=&quot;https://radar.cloudflare.com/middle-east&quot; target=&quot;_blank&quot;&gt;Middle East&lt;/a&gt;, &lt;a href=&quot;https://radar.cloudflare.com/eastern-asia&quot; target=&quot;_blank&quot;&gt;Eastern Asia&lt;/a&gt;, etc.), political regions (&lt;a href=&quot;https://radar.cloudflare.com/european-union&quot; target=&quot;_blank&quot;&gt;EU&lt;/a&gt;, &lt;a href=&quot;https://radar.cloudflare.com/african-union&quot; target=&quot;_blank&quot;&gt;African Union&lt;/a&gt;), and US Census regions/divisions (for example, &lt;a href=&quot;https://radar.cloudflare.com/traffic/us-new-england&quot; target=&quot;_blank&quot;&gt;New England&lt;/a&gt;, &lt;a href=&quot;https://radar.cloudflare.com/traffic/us-northeast&quot; target=&quot;_blank&quot;&gt;US Northeast&lt;/a&gt;).&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/region-filtering-middle-east.D__dYNBw_i7aR.webp&quot; alt=&quot;Screenshot of region filtering on Radar - Middle east&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;Traffic volume by top autonomous systems and locations&lt;/h4&gt;
&lt;p&gt;A new traffic volume view shows the top autonomous systems and countries/territories for a given location. This is useful for quickly determining which network providers in a location may be experiencing connectivity issues, or how traffic is distributed across a region.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/traffic-volume-top-as-us.DhnbB8gy_ZyvEEM.webp&quot; alt=&quot;Screenshot of traffic volume by top autonomous systems in US&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;The new AS and location dimensions have also been added to the &lt;a href=&quot;https://radar.cloudflare.com/explorer&quot; target=&quot;_blank&quot;&gt;Data Explorer&lt;/a&gt; for the HTTP, DNS, and NetFlows datasets. Combined with other available filters, this provides a powerful tool for generating unique insights.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/data-explorer-top-as-pt.DAWOCd_b_1riM1l.webp&quot; alt=&quot;Screenshot of AS and location dimensions in Data Explorer&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Finally, breadcrumb navigation is now available on most pages, allowing easier navigation between parent and related pages.&lt;/p&gt;
&lt;p&gt;Check out these features on &lt;a href=&quot;https://radar.cloudflare.com&quot; target=&quot;_blank&quot;&gt;Cloudflare Radar&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>Workers AI, Realtime - Real-time transcription in RealtimeKit now supports 10 languages with regional variants</title><link>https://developers.cloudflare.com/changelog/post/2026-03-06-realtimekit-multilingual-transcription/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-06-realtimekit-multilingual-transcription/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/realtime/realtimekit/ai/transcription/&quot;&gt;Real-time transcription&lt;/a&gt; in RealtimeKit now supports 10 languages with regional variants, powered by &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/nova-3/&quot;&gt;Deepgram Nova-3&lt;/a&gt; running on &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/&quot;&gt;Workers AI&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;During a meeting, participant audio is routed through &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot;&gt;AI Gateway&lt;/a&gt; to Nova-3 on Workers AI — so transcription runs on Cloudflare&apos;s network end-to-end, reducing latency compared to routing through external speech-to-text services.&lt;/p&gt;
&lt;p&gt;Set the language when &lt;a href=&quot;https://developers.cloudflare.com/realtime/realtimekit/concepts/meeting/&quot;&gt;creating a meeting&lt;/a&gt; via &lt;code&gt;ai_config.transcription.language&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;ai_config&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;transcription&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;language&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;fr&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;/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;Supported languages include English, Spanish, French, German, Hindi, Russian, Portuguese, Japanese, Italian, and Dutch — with regional variants like &lt;code&gt;en-AU&lt;/code&gt;, &lt;code&gt;en-GB&lt;/code&gt;, &lt;code&gt;en-IN&lt;/code&gt;, &lt;code&gt;en-NZ&lt;/code&gt;, &lt;code&gt;es-419&lt;/code&gt;, &lt;code&gt;fr-CA&lt;/code&gt;, &lt;code&gt;de-CH&lt;/code&gt;, &lt;code&gt;pt-BR&lt;/code&gt;, and &lt;code&gt;pt-PT&lt;/code&gt;. Use &lt;code&gt;multi&lt;/code&gt; for automatic multilingual detection.&lt;/p&gt;
&lt;p&gt;If you are building voice agents or real-time translation workflows, your agent can now transcribe in the caller&apos;s language natively — no extra services or routing logic needed.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/realtime/realtimekit/ai/transcription/&quot;&gt;Transcription docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/nova-3/&quot;&gt;Nova-3 model page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/&quot;&gt;Workers AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot;&gt;AI Gateway&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category><category>Realtime</category></item><item><title>Security Center - Dismiss and filter matches in Brand Protection</title><link>https://developers.cloudflare.com/changelog/post/2026-03-06-brand-protection-dismiss-match/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-06-brand-protection-dismiss-match/</guid><description>&lt;p&gt;We have introduced new triage controls to help you manage your Brand Protection results more efficiently. You can now clear out the noise by dismissing matches while maintaining full visibility into your historical decisions.&lt;/p&gt;
&lt;h4&gt;What&apos;s new&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dismiss matches&lt;/strong&gt;: Users can now mark specific results as dismissed if they are determined to be benign or false positives, removing them from the primary triage view.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Show/Hide toggle&lt;/strong&gt;: A new visibility control allows you to instantly switch between viewing only active matches and including previously dismissed ones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Persistent review states&lt;/strong&gt;: Dismissed status is saved across sessions, ensuring that your workspace remains organized and focused on new or high-priority threats.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Key benefits of the dismiss match functionality:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Reduce alert fatigue by hiding known-safe results, allowing your team to focus exclusively on unreviewed or high-risk infringements.&lt;/li&gt;
&lt;li&gt;Auditability and recovery through the visibility toggle, ensuring that no match is ever truly &quot;lost&quot; and can be re-evaluated if a site&apos;s content changes.&lt;/li&gt;
&lt;li&gt;Improved collaboration as your team members can see which matches have already been vetted and dismissed by others.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ready to clean up your match queue? Learn more in our &lt;a href=&quot;https://developers.cloudflare.com/security-center/brand-protection/&quot;&gt;Brand Protection documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 06 Mar 2026 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>Browser Rendering - Browser Rendering: 3x higher REST API request rate</title><link>https://developers.cloudflare.com/changelog/post/2026-03-04-br-rest-api-limit-increase/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-04-br-rest-api-limit-increase/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/&quot;&gt;Browser Rendering&lt;/a&gt; REST API rate limits for Workers Paid plans have been increased from 3 requests per second (180/min) to &lt;strong&gt;10 requests per second (600/min)&lt;/strong&gt;. No action is needed to benefit from the higher limit.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/rest-api-limit-increase.DJHY7xYF_1U7IJn.webp&quot; alt=&quot;Browser Rendering REST API rate limit increased from 3 to 10 requests per second&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;The &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/rest-api/&quot;&gt;REST API&lt;/a&gt; lets you perform common browser tasks with a single API call, and you can now do it at a higher rate.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/rest-api/content-endpoint/&quot;&gt;/content - Fetch HTML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/rest-api/screenshot-endpoint/&quot;&gt;/screenshot - Capture screenshot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/rest-api/pdf-endpoint/&quot;&gt;/pdf - Render PDF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/rest-api/markdown-endpoint/&quot;&gt;/markdown - Extract Markdown from a webpage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/rest-api/snapshot/&quot;&gt;/snapshot - Take a webpage snapshot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/rest-api/scrape-endpoint/&quot;&gt;/scrape - Scrape HTML elements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/rest-api/json-endpoint/&quot;&gt;/json - Capture structured data using AI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/rest-api/links-endpoint/&quot;&gt;/links - Retrieve links from a webpage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you use the &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/workers-bindings/&quot;&gt;Workers Bindings&lt;/a&gt; method, increases to concurrent browser and new browser limits are coming soon. Stay tuned.&lt;/p&gt;
&lt;p&gt;For full details, refer to the &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/limits/&quot;&gt;Browser Rendering limits page&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate><product>Browser Rendering</product><category>Browser Rendering</category></item><item><title>Cloudflare One, Access - User risk score selector in Access policies</title><link>https://developers.cloudflare.com/changelog/post/2026-03-04-user-risk-score-access-policies/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-04-user-risk-score-access-policies/</guid><description>&lt;p&gt;You can now use &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/users/risk-score/&quot;&gt;user risk scores&lt;/a&gt; in your &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/policies/&quot;&gt;Access policies&lt;/a&gt;. The new &lt;strong&gt;User Risk Score&lt;/strong&gt; selector allows you to create Access policies that respond to user behavior patterns detected by Cloudflare&apos;s risk scoring system, including impossible travel, high DLP policy matches, and more.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/users/risk-score/#use-risk-scores-in-access-policies&quot;&gt;Use risk scores in Access policies&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category><category>Access</category></item><item><title>Gateway - Gateway Authorization Proxy and hosted PAC files (open beta)</title><link>https://developers.cloudflare.com/changelog/post/2026-03-04-gateway-authorization-proxy-open-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-04-gateway-authorization-proxy-open-beta/</guid><description>&lt;p&gt;The &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/resolvers-and-proxies/proxy-endpoints/#authorization-endpoint&quot;&gt;Gateway Authorization Proxy&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/resolvers-and-proxies/proxy-endpoints/#create-a-hosted-pac-file&quot;&gt;PAC file hosting&lt;/a&gt; are now in open beta for all plan types.&lt;/p&gt;
&lt;p&gt;Previously, &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/resolvers-and-proxies/proxy-endpoints/#source-ip-endpoint&quot;&gt;proxy endpoints&lt;/a&gt; relied on static source IP addresses to authorize traffic, providing no user-level identity in logs or policies. The new authorization proxy replaces IP-based authorization with &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/policies/&quot;&gt;Cloudflare Access&lt;/a&gt; authentication, verifying who a user is before applying Gateway filtering without installing the WARP client.&lt;/p&gt;
&lt;p&gt;This is ideal for environments where you cannot deploy a device client, such as virtual desktops (VDI), mergers and acquisitions, or compliance-restricted endpoints.&lt;/p&gt;
&lt;h4&gt;Key capabilities&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Identity-aware proxy traffic&lt;/strong&gt; — Users authenticate through your identity provider (Okta, Microsoft Entra ID, Google Workspace, and others) via Cloudflare Access. Logs now show exactly which user accessed which site, and you can write &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/identity-selectors/&quot;&gt;identity-based policies&lt;/a&gt; like &quot;only the Finance team can access this accounting tool.&quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiple identity providers&lt;/strong&gt; — Display one or multiple login methods simultaneously, giving flexibility for organizations managing users across different identity systems.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare-hosted PAC files&lt;/strong&gt; — Create and host &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/resolvers-and-proxies/proxy-endpoints/#create-a-hosted-pac-file&quot;&gt;PAC files&lt;/a&gt; directly in Cloudflare One with pre-configured templates for Okta and Azure, hosted at &lt;code&gt;https://pac.cloudflare-gateway.com/&amp;#x3C;account-id&gt;/&amp;#x3C;slug&gt;&lt;/code&gt; on Cloudflare&apos;s global network.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simplified billing&lt;/strong&gt; — Each user occupies a seat, exactly like they do with the Cloudflare One Client. No new metrics to track.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;a href=&quot;https://one.dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Cloudflare One&lt;/a&gt;, go to &lt;strong&gt;Networks&lt;/strong&gt; &gt; &lt;strong&gt;Resolvers &amp;#x26; Proxies&lt;/strong&gt; &gt; &lt;strong&gt;Proxy endpoints&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/resolvers-and-proxies/proxy-endpoints/#authorization-endpoint&quot;&gt;Create an authorization proxy endpoint&lt;/a&gt; and configure Access policies.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/resolvers-and-proxies/proxy-endpoints/#create-a-hosted-pac-file&quot;&gt;Create a hosted PAC file&lt;/a&gt; or write your own.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/resolvers-and-proxies/proxy-endpoints/#3b-configure-browser-to-use-pac-file&quot;&gt;Configure browsers&lt;/a&gt; to use the PAC file URL.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/user-side-certificates/&quot;&gt;Install the Cloudflare certificate&lt;/a&gt; for HTTPS inspection.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For more details, refer to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/resolvers-and-proxies/proxy-endpoints/&quot;&gt;proxy endpoints documentation&lt;/a&gt; and the &lt;a href=&quot;https://blog.cloudflare.com/gateway-authorization-proxy-identity-aware-policies/&quot; target=&quot;_blank&quot;&gt;announcement blog post&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>Workers AI - New conversion options for Markdown Conversion</title><link>https://developers.cloudflare.com/changelog/post/2026-03-04-new-markdown-conversion-options/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-04-new-markdown-conversion-options/</guid><description>&lt;p&gt;You can now customize how the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/features/markdown-conversion/&quot;&gt;Markdown Conversion&lt;/a&gt; service processes different file types by passing a &lt;code&gt;conversionOptions&lt;/code&gt; object.&lt;/p&gt;
&lt;p&gt;Available options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Images&lt;/strong&gt;: Set the language for AI-generated image descriptions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTML&lt;/strong&gt;: Use CSS selectors to extract specific content, or provide a hostname to resolve relative links&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PDF&lt;/strong&gt;: Exclude metadata from the output&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/features/markdown-conversion/usage/binding/&quot;&gt;&lt;code&gt;env.AI&lt;/code&gt;&lt;/a&gt; binding:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toMarkdown&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; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;page.html&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; blob&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Blob&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;html&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;/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;conversionOptions&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;html&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; cssSelector&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;article.content&quot;&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;image&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; descriptionLanguage&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;es&quot;&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;/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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toMarkdown&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; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;page.html&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; blob&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Blob&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;html&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;/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;conversionOptions&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;html&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; cssSelector&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;article.content&quot;&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;image&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; descriptionLanguage&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;es&quot;&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;/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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Or call the REST API:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/tomarkdown&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Authorization: Bearer {API_TOKEN}&apos;&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;-F&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;files=@index.html&apos;&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;-F&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;conversionOptions={&quot;html&quot;: {&quot;cssSelector&quot;: &quot;article.content&quot;}}&apos;&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 details, refer to &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/features/markdown-conversion/conversion-options/&quot;&gt;Conversion Options&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>Workflows, Workers - Workflows step limit increased to 25,000 steps per instance</title><link>https://developers.cloudflare.com/changelog/post/2026-03-03-step-limits-to-25k/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-03-step-limits-to-25k/</guid><description>&lt;p&gt;Each Workflow on Workers Paid now supports 10,000 steps by default, configurable up to 25,000 steps in your &lt;code&gt;wrangler.jsonc&lt;/code&gt; file:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;workflows&lt;/span&gt;&lt;span&gt;&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-workflow&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MY_WORKFLOW&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;class_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MyWorkflow&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;limits&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;steps&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;25000&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;Previously, each instance was limited to 1,024 steps. Now, Workflows can support more complex, long-running executions without the additional complexity of recursive or child workflow calls.&lt;/p&gt;
&lt;p&gt;Note that the maximum persisted state limit per Workflow instance remains &lt;strong&gt;100 MB&lt;/strong&gt; for Workers Free and &lt;strong&gt;1 GB&lt;/strong&gt; for Workers Paid. Refer to &lt;a href=&quot;https://developers.cloudflare.com/workflows/reference/limits/&quot;&gt;Workflows limits&lt;/a&gt; for more information.&lt;/p&gt;</description><pubDate>Tue, 03 Mar 2026 12:00:00 GMT</pubDate><product>Workflows</product><category>Workflows</category><category>Workers</category></item><item><title>Agents - Real-time file watching in Sandboxes</title><link>https://developers.cloudflare.com/changelog/post/2026-03-03-sandbox-watch-file-events/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-03-sandbox-watch-file-events/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/sandbox/&quot;&gt;Sandboxes&lt;/a&gt; now support real-time filesystem watching via &lt;code&gt;sandbox.watch()&lt;/code&gt;. The method returns a &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events&quot; target=&quot;_blank&quot;&gt;Server-Sent Events&lt;/a&gt; stream backed by native inotify, so your Worker receives &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;modify&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, and &lt;code&gt;move&lt;/code&gt; events as they happen inside the container.&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;sandbox.watch(path, options)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Pass a directory path and optional filters. The returned stream is a standard &lt;code&gt;ReadableStream&lt;/code&gt; you can proxy directly to a browser client or consume server-side.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Stream events to a browser client&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&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; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;watch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/workspace/src&quot;&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;recursive&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&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;include&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;*.ts&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;*.js&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&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;{&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;headers&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;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;text/event-stream&quot;&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;// Stream events to a browser client&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&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; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;watch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/workspace/src&quot;&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;recursive&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&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;include&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;*.ts&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;*.js&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&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;{&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;headers&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;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;text/event-stream&quot;&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;Server-side consumption with &lt;code&gt;parseSSEStream&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Use &lt;code&gt;parseSSEStream&lt;/code&gt; to iterate over events inside a Worker without forwarding them to a client.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;parseSSEStream&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/sandbox&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&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; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;watch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/workspace/src&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; recursive&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;const&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;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;parseSSEStream&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;/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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&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;type&lt;/span&gt;&lt;span&gt;,&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;path&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;parseSSEStream&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/sandbox&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import type &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FileWatchSSEEvent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/sandbox&quot;&lt;/span&gt;&lt;span&gt;;&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;const&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; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;watch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/workspace/src&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; recursive&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true &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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;const&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;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;parseSSEStream&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;FileWatchSSEEvent&lt;/span&gt;&lt;span&gt;&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;/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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&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;type&lt;/span&gt;&lt;span&gt;,&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;path&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Each event includes a &lt;code&gt;type&lt;/code&gt; field (&lt;code&gt;create&lt;/code&gt;, &lt;code&gt;modify&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, or &lt;code&gt;move&lt;/code&gt;) and the affected &lt;code&gt;path&lt;/code&gt;. Move events also include a &lt;code&gt;from&lt;/code&gt; field with the original path.&lt;/p&gt;
&lt;h4&gt;Options&lt;/h4&gt;




















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Option&lt;/th&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;recursive&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;boolean&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Watch subdirectories. Defaults to &lt;code&gt;false&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;include&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;string[]&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Glob patterns to filter events. Omit to receive all events.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;Upgrade&lt;/h4&gt;
&lt;p&gt;To update to the latest version:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@cloudflare/sandbox@latest&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 full API details, refer to the &lt;a href=&quot;https://developers.cloudflare.com/sandbox/api/file-watching/&quot;&gt;Sandbox file watching reference&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category></item><item><title>Radar - Network Quality Test on Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2026-03-03-radar-network-quality-test/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-03-radar-network-quality-test/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; now includes a &lt;a href=&quot;https://radar.cloudflare.com/speedtest&quot; target=&quot;_blank&quot;&gt;Network Quality Test&lt;/a&gt; page. The tool measures Internet connection quality and performance, showing connection details such as IP address, server location, network (ASN), and IP version. For more detailed speed test results, the page links to &lt;a href=&quot;https://speed.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;speed.cloudflare.com&lt;/a&gt;.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/network-quality-test.BwQ-CoTH_Z90pOd.webp&quot; alt=&quot;Screenshot of the Network Quality Test page on Radar&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>Agents, Workers - Agents SDK v0.7.0: Observability rewrite, keepAlive, and waitForMcpConnections</title><link>https://developers.cloudflare.com/changelog/post/2026-03-02-agents-sdk-v070/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-02-agents-sdk-v070/</guid><description>&lt;p&gt;The latest release of the &lt;a href=&quot;https://github.com/cloudflare/agents&quot; target=&quot;_blank&quot;&gt;Agents SDK&lt;/a&gt; rewrites observability from scratch with &lt;code&gt;diagnostics_channel&lt;/code&gt;, adds &lt;code&gt;keepAlive()&lt;/code&gt; to prevent Durable Object eviction during long-running work, and introduces &lt;code&gt;waitForMcpConnections&lt;/code&gt; so MCP tools are always available when &lt;code&gt;onChatMessage&lt;/code&gt; runs.&lt;/p&gt;
&lt;h4&gt;Observability rewrite&lt;/h4&gt;
&lt;p&gt;The previous observability system used &lt;code&gt;console.log()&lt;/code&gt; with a custom &lt;code&gt;Observability.emit()&lt;/code&gt; interface. v0.7.0 replaces it with structured events published to &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/nodejs/diagnostics-channel/&quot;&gt;diagnostics channels&lt;/a&gt; — silent by default, zero overhead when nobody is listening.&lt;/p&gt;
&lt;p&gt;Every event has a &lt;code&gt;type&lt;/code&gt;, &lt;code&gt;payload&lt;/code&gt;, and &lt;code&gt;timestamp&lt;/code&gt;. Events are routed to seven named channels:&lt;/p&gt;





































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Channel&lt;/th&gt;&lt;th&gt;Event types&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;agents:state&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;state:update&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;agents:rpc&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;rpc&lt;/code&gt;, &lt;code&gt;rpc:error&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;agents:message&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;message:request&lt;/code&gt;, &lt;code&gt;message:response&lt;/code&gt;, &lt;code&gt;message:clear&lt;/code&gt;, &lt;code&gt;message:cancel&lt;/code&gt;, &lt;code&gt;message:error&lt;/code&gt;, &lt;code&gt;tool:result&lt;/code&gt;, &lt;code&gt;tool:approval&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;agents:schedule&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;schedule:create&lt;/code&gt;, &lt;code&gt;schedule:execute&lt;/code&gt;, &lt;code&gt;schedule:cancel&lt;/code&gt;, &lt;code&gt;schedule:retry&lt;/code&gt;, &lt;code&gt;schedule:error&lt;/code&gt;, &lt;code&gt;queue:retry&lt;/code&gt;, &lt;code&gt;queue:error&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;agents:lifecycle&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;connect&lt;/code&gt;, &lt;code&gt;destroy&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;agents:workflow&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;workflow:start&lt;/code&gt;, &lt;code&gt;workflow:event&lt;/code&gt;, &lt;code&gt;workflow:approved&lt;/code&gt;, &lt;code&gt;workflow:rejected&lt;/code&gt;, &lt;code&gt;workflow:terminated&lt;/code&gt;, &lt;code&gt;workflow:paused&lt;/code&gt;, &lt;code&gt;workflow:resumed&lt;/code&gt;, &lt;code&gt;workflow:restarted&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;agents:mcp&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;mcp:client:preconnect&lt;/code&gt;, &lt;code&gt;mcp:client:connect&lt;/code&gt;, &lt;code&gt;mcp:client:authorize&lt;/code&gt;, &lt;code&gt;mcp:client:discover&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Use the typed &lt;code&gt;subscribe()&lt;/code&gt; helper from &lt;code&gt;agents/observability&lt;/code&gt; for type-safe access:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;subscribe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;agents/observability&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;unsub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;subscribe&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;rpc&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &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;=&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;if&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;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;rpc&quot;&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`RPC call: &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;payload&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;method&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;/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;if&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;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;rpc:error&quot;&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&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;`RPC failed: &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;payload&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; — &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;payload&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&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;)&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;;&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;// Clean up when done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;unsub&lt;/span&gt;&lt;span&gt;()&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;subscribe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;agents/observability&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;unsub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;subscribe&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;rpc&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &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;=&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;if&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;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;rpc&quot;&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`RPC call: &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;payload&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;method&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;/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;if&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;type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;rpc:error&quot;&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&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;`RPC failed: &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;payload&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;method&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; — &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;payload&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&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;)&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;;&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;// Clean up when done&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;unsub&lt;/span&gt;&lt;span&gt;()&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;In production, all diagnostics channel messages are automatically forwarded to &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/logs/tail-workers/&quot;&gt;Tail Workers&lt;/a&gt; — no subscription code needed in the agent itself:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tail&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;events&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;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;const&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;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;events&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;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&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;diagnosticsChannelEvents&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;// msg.channel is &quot;agents:rpc&quot;, &quot;agents:workflow&quot;, etc.&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;timestamp&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;channel&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;message&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tail&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;events&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;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;const&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;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;events&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;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&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;diagnosticsChannelEvents&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;// msg.channel is &quot;agents:rpc&quot;, &quot;agents:workflow&quot;, etc.&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;timestamp&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;channel&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;msg&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;message&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;/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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;The custom &lt;code&gt;Observability&lt;/code&gt; override interface is still supported for users who need to filter or forward events to external services.&lt;/p&gt;
&lt;p&gt;For the full event reference, refer to the &lt;a href=&quot;https://developers.cloudflare.com/agents/api-reference/observability/&quot;&gt;Observability documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;keepAlive()&lt;/code&gt; and &lt;code&gt;keepAliveWhile()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Durable Objects are evicted after a period of inactivity (typically 70-140 seconds with no incoming requests, WebSocket messages, or alarms). During long-running operations — streaming LLM responses, waiting on external APIs, running multi-step computations — the agent can be evicted mid-flight.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;keepAlive()&lt;/code&gt; prevents this by creating a 30-second heartbeat schedule. The alarm firing resets the inactivity timer. Returns a disposer function that cancels the heartbeat when called.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dispose&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;keepAlive&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;try&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;longRunningComputation&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sendResults&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&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;finally&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;dispose&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dispose&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;keepAlive&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;try&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;longRunningComputation&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sendResults&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&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;finally&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;dispose&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;&lt;code&gt;keepAliveWhile()&lt;/code&gt; wraps an async function with automatic cleanup — the heartbeat starts before the function runs and stops when it completes:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;keepAliveWhile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;const&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;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;longRunningComputation&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;keepAliveWhile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;const&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;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;longRunningComputation&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Key details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multiple concurrent callers&lt;/strong&gt; — Each &lt;code&gt;keepAlive()&lt;/code&gt; call returns an independent disposer. Disposing one does not affect others.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AIChatAgent built-in&lt;/strong&gt; — &lt;code&gt;AIChatAgent&lt;/code&gt; automatically calls &lt;code&gt;keepAlive()&lt;/code&gt; during streaming responses. You do not need to add it yourself.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uses the scheduling system&lt;/strong&gt; — The heartbeat does not conflict with your own schedules. It shows up in &lt;code&gt;getSchedules()&lt;/code&gt; if you need to inspect it.&lt;/li&gt;
&lt;/ul&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;code&gt;keepAlive()&lt;/code&gt; is marked &lt;code&gt;@experimental&lt;/code&gt; and may change between releases.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;For the full API reference and when-to-use guidance, refer to &lt;a href=&quot;https://developers.cloudflare.com/agents/api-reference/schedule-tasks/#keeping-the-agent-alive&quot;&gt;Schedule tasks — Keeping the agent alive&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;waitForMcpConnections&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;AIChatAgent&lt;/code&gt; now waits for MCP server connections to settle before calling &lt;code&gt;onChatMessage&lt;/code&gt;. This ensures &lt;code&gt;this.mcp.getAITools()&lt;/code&gt; returns the full set of tools, especially after Durable Object hibernation when connections are being restored in the background.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ChatAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AIChatAgent&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;// Default — waits up to 10 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;// waitForMcpConnections = { timeout: 10_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;// Wait forever&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;waitForMcpConnections &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&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;// Disable waiting&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;waitForMcpConnections &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ChatAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AIChatAgent&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;// Default — waits up to 10 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;// waitForMcpConnections = { timeout: 10_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;// Wait forever&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;waitForMcpConnections &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&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;// Disable waiting&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;waitForMcpConnections &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Value&lt;/th&gt;&lt;th&gt;Behavior&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;{ timeout: 10_000 }&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Wait up to 10 seconds (default)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;{ timeout: N }&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Wait up to &lt;code&gt;N&lt;/code&gt; milliseconds&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Wait indefinitely until all connections ready&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;false&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Do not wait (old behavior before 0.2.0)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;For lower-level control, call &lt;code&gt;this.mcp.waitForConnections()&lt;/code&gt; directly inside &lt;code&gt;onChatMessage&lt;/code&gt; instead.&lt;/p&gt;
&lt;h4&gt;Other improvements&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MCP deduplication by name and URL&lt;/strong&gt; — &lt;code&gt;addMcpServer&lt;/code&gt; with HTTP transport now deduplicates on both server name and URL. Calling it with the same name but a different URL creates a new connection. URLs are normalized before comparison (trailing slashes, default ports, hostname case).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;callbackHost&lt;/code&gt; optional for non-OAuth servers&lt;/strong&gt; — &lt;code&gt;addMcpServer&lt;/code&gt; no longer requires &lt;code&gt;callbackHost&lt;/code&gt; when connecting to MCP servers that do not use OAuth.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MCP URL security&lt;/strong&gt; — Server URLs are validated before connection to prevent SSRF. Private IP ranges, loopback addresses, link-local addresses, and cloud metadata endpoints are blocked.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom denial messages&lt;/strong&gt; — &lt;code&gt;addToolOutput&lt;/code&gt; now supports &lt;code&gt;state: &quot;output-error&quot;&lt;/code&gt; with &lt;code&gt;errorText&lt;/code&gt; for custom denial messages in human-in-the-loop tool approval flows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;requestId&lt;/code&gt; in chat options&lt;/strong&gt; — &lt;code&gt;onChatMessage&lt;/code&gt; options now include a &lt;code&gt;requestId&lt;/code&gt; for logging and correlating events.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Upgrade&lt;/h4&gt;
&lt;p&gt;To update to the latest version:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agents@latest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@cloudflare/ai-chat@latest&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;</description><pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>AI Gateway - Get started with AI Gateway automatically</title><link>https://developers.cloudflare.com/changelog/post/2026-03-02-default-gateway/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-02-default-gateway/</guid><description>&lt;p&gt;You can now start using AI Gateway with a single API call — no setup required. Use &lt;code&gt;default&lt;/code&gt; as your gateway ID, and AI Gateway creates one for you automatically on the first request.&lt;/p&gt;
&lt;p&gt;To try it out, &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/api/get-started/create-token/&quot;&gt;create an API token&lt;/a&gt; with &lt;code&gt;AI Gateway - Read&lt;/code&gt;, &lt;code&gt;AI Gateway - Edit&lt;/code&gt;, and &lt;code&gt;Workers AI - Read&lt;/code&gt; permissions, then run:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://gateway.ai.cloudflare.com/v1/&lt;/span&gt;&lt;span&gt;$CLOUDFLARE_ACCOUNT_ID&lt;/span&gt;&lt;span&gt;/default/compat/chat/completions&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cf-aig-authorization: Bearer &lt;/span&gt;&lt;span&gt;$CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span&gt;&quot;&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Content-Type: application/json&apos;&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;--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;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;model&quot;: &quot;workers-ai/@cf/meta/llama-3.3-70b-instruct-fp8-fast&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;messages&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;role&quot;: &quot;user&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;content&quot;: &quot;What is Cloudflare?&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;/span&gt;&lt;/span&gt;&lt;span&gt;}&apos;&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;AI Gateway gives you logging, caching, rate limiting, and access to multiple AI providers through a single endpoint. For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/get-started/&quot;&gt;Get started&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate><product>AI Gateway</product><category>AI Gateway</category></item><item><title>Cloudflare One - Copy Cloudflare One resources as JSON or POST requests</title><link>https://developers.cloudflare.com/changelog/post/2026-03-copy-resources-as-json-or-post-requests/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-copy-resources-as-json-or-post-requests/</guid><description>&lt;p&gt;You can now copy Cloudflare One resources as JSON or as a ready-to-use API POST request directly from the dashboard. This makes it simple to transition workflows into API calls, automation scripts, or infrastructure-as-code pipelines.&lt;/p&gt;
&lt;p&gt;To use this feature, click the overflow menu (⋮) on any supported resource and select &lt;strong&gt;Copy as JSON&lt;/strong&gt; or &lt;strong&gt;Copy as POST request&lt;/strong&gt;. The copied output includes only the fields present on your resource, giving you a clean and minimal starting point for your own API calls.&lt;/p&gt;
&lt;p&gt;Initially supported resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Access applications&lt;/li&gt;
&lt;li&gt;Access policies&lt;/li&gt;
&lt;li&gt;Gateway policies&lt;/li&gt;
&lt;li&gt;Resolver policies&lt;/li&gt;
&lt;li&gt;Service tokens&lt;/li&gt;
&lt;li&gt;Identity providers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We will continue to add support for more resources throughout 2026.&lt;/p&gt;</description><pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category></item><item><title>WAF - WAF Release - 2026-03-02</title><link>https://developers.cloudflare.com/changelog/post/2026-03-02-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-02-waf-release/</guid><description>&lt;p&gt;This week&apos;s release introduces new detections for vulnerabilities in SmarterTools SmarterMail (CVE-2025-52691 and CVE-2026-23760), alongside improvements to an existing Command Injection (nslookup) detection to enhance coverage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CVE-2025-52691: SmarterTools SmarterMail mail server is vulnerable to Arbitrary File Upload, allowing an unauthenticated attacker to upload files to any location on the mail server, potentially enabling remote code execution.&lt;/li&gt;
&lt;li&gt;CVE-2026-23760: SmarterTools SmarterMail versions prior to build 9511 contain an authentication bypass vulnerability in the password reset API permitting unaunthenticated to reset system administrator accounts failing to verify existing password or reset token.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Successful exploitation of these SmarterMail vulnerabilities could lead to full system compromise or unauthorized administrative access to mail servers. Administrators are strongly encouraged to apply vendor patches without delay.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;0f282f3c89614779966faf52966ec6b1 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;SmarterMail - Arbitrary File Upload - CVE-2025-52691&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;35978af68e374a059e397bf5ee964a8c &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;SmarterMail - Authentication Bypass - CVE-2026-23760&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;4bb099bcd71141d4a35c1aa675b64d99 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Command Injection - Nslookup - Beta&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This rule is merged into the original rule &quot;Command Injection - Nslookup&quot; (ID: f4a310393c564d50bd585601b090ba9a )&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 02 Mar 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Access - Clipboard controls for browser-based RDP</title><link>https://developers.cloudflare.com/changelog/post/2026-03-01-rdp-clipboard-controls/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-03-01-rdp-clipboard-controls/</guid><description>&lt;p&gt;You can now configure clipboard controls for browser-based RDP with Cloudflare Access. Clipboard controls allow administrators to restrict whether users can copy or paste text between their local machine and the remote Windows server.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/rdp-clipboard-controls.B0ZmliDb_Z1Ne5yg.webp&quot; alt=&quot;Enable users to copy and paste content from their local machine to remote RDP sessions in the Cloudflare One dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;This feature is useful for organizations that support bring-your-own-device (BYOD) policies or third-party contractors using unmanaged devices. By restricting clipboard access, you can prevent sensitive data from being transferred out of the remote session to a user&apos;s personal device.&lt;/p&gt;
&lt;h4&gt;Configuration options&lt;/h4&gt;
&lt;p&gt;Clipboard controls are configured per policy within your Access application. For each policy, you can independently allow or deny:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Copy from local client to remote RDP session&lt;/strong&gt; — Users can copy/paste text from their local machine into the browser-based RDP session.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copy from remote RDP session to local client&lt;/strong&gt; — Users can copy/paste text from the browser-based RDP session to their local machine.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By default, both directions are denied for new policies. For existing Access applications created before this feature was available, clipboard access remains enabled to preserve backwards compatibility.&lt;/p&gt;
&lt;p&gt;When a user attempts a restricted clipboard action, the clipboard content is replaced with an error message informing them that the action is not allowed.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/rdp-browser/#clipboard-controls&quot;&gt;Clipboard controls for browser-based RDP&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Access - Export MCP server portal logs with Logpush</title><link>https://developers.cloudflare.com/changelog/post/2026-02-27-mcp-portal-logpush/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-27-mcp-portal-logpush/</guid><description>&lt;aside&gt;&lt;p&gt;Availability&lt;/p&gt;&lt;div&gt;&lt;p&gt;Only available on Enterprise plans.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/ai-controls/mcp-portals/&quot;&gt;MCP server portals&lt;/a&gt; now supports &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/&quot;&gt;Logpush&lt;/a&gt; integration. You can automatically export MCP server portal activity logs to third-party storage destinations or security information and event management (SIEM) tools for analysis and auditing.&lt;/p&gt;
&lt;h4&gt;Available log fields&lt;/h4&gt;
&lt;p&gt;The MCP server portal logs dataset includes fields such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Datetime&lt;/code&gt; — Timestamp of the request&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PortalID&lt;/code&gt; / &lt;code&gt;PortalAUD&lt;/code&gt; — Portal identifiers&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ServerID&lt;/code&gt; / &lt;code&gt;ServerURL&lt;/code&gt; — Upstream MCP server details&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Method&lt;/code&gt; — JSON-RPC method (for example, &lt;code&gt;tools/call&lt;/code&gt;, &lt;code&gt;prompts/get&lt;/code&gt;, &lt;code&gt;resources/read&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ToolCallName&lt;/code&gt; / &lt;code&gt;PromptGetName&lt;/code&gt; / &lt;code&gt;ResourceReadURI&lt;/code&gt; — Method-specific identifiers&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UserID&lt;/code&gt; / &lt;code&gt;UserEmail&lt;/code&gt; — Authenticated user information&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Success&lt;/code&gt; / &lt;code&gt;Error&lt;/code&gt; — Request outcome&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ServerResponseDurationMs&lt;/code&gt; — Response time from upstream server&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the complete field reference, refer to &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/datasets/account/mcp_portal_logs/&quot;&gt;MCP portal logs&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Set up Logpush&lt;/h4&gt;
&lt;p&gt;To configure Logpush for MCP server portal logs, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/logs/logpush/&quot;&gt;Logpush integration&lt;/a&gt;.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;MCP server portals is currently in beta.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;</description><pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Gateway - New protocols added for Gateway Protocol Detection (Beta)</title><link>https://developers.cloudflare.com/changelog/post/2026-02-27-new-protocol-detection-protocols/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-27-new-protocol-detection-protocols/</guid><description>&lt;p&gt;Gateway &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/network-policies/protocol-detection/&quot;&gt;Protocol Detection&lt;/a&gt; now supports seven additional protocols in beta:&lt;/p&gt;





































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Protocol&lt;/th&gt;&lt;th&gt;Notes&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;IMAP&lt;/td&gt;&lt;td&gt;Internet Message Access Protocol — email retrieval&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;POP3&lt;/td&gt;&lt;td&gt;Post Office Protocol v3 — email retrieval&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;SMTP&lt;/td&gt;&lt;td&gt;Simple Mail Transfer Protocol — email sending&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MYSQL&lt;/td&gt;&lt;td&gt;MySQL database wire protocol&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RSYNC-DAEMON&lt;/td&gt;&lt;td&gt;rsync daemon protocol&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;LDAP&lt;/td&gt;&lt;td&gt;Lightweight Directory Access Protocol&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;NTP&lt;/td&gt;&lt;td&gt;Network Time Protocol&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;These protocols join the existing set of detected protocols (HTTP, HTTP2, SSH, TLS, DCERPC, MQTT, and TPKT) and can be used with the &lt;em&gt;Detected Protocol&lt;/em&gt; selector in &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/network-policies/&quot;&gt;Network policies&lt;/a&gt; to identify and filter traffic based on the application-layer protocol, without relying on port-based identification.&lt;/p&gt;
&lt;p&gt;If protocol detection is enabled on your account, these protocols will automatically be logged when detected in your Gateway network traffic.&lt;/p&gt;
&lt;p&gt;For more information on using Protocol Detection, refer to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/network-policies/protocol-detection/&quot;&gt;Protocol detection documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>Radar - Post-Quantum Encryption and Key Transparency on Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2026-02-27-radar-pq-key-transparency/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-27-radar-pq-key-transparency/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; now tracks post-quantum encryption support on origin servers, provides a tool to test any host for post-quantum compatibility, and introduces a Key Transparency dashboard for monitoring end-to-end encrypted messaging audit logs.&lt;/p&gt;
&lt;h4&gt;Post-quantum origin support&lt;/h4&gt;
&lt;p&gt;The new &lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/post_quantum/&quot;&gt;&lt;code&gt;Post-Quantum&lt;/code&gt;&lt;/a&gt; API provides the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/post_quantum/subresources/tls/methods/support/&quot;&gt;&lt;code&gt;/post_quantum/tls/support&lt;/code&gt;&lt;/a&gt; - Tests whether a host supports post-quantum TLS key exchange.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/post_quantum/methods/summary/&quot;&gt;&lt;code&gt;/post_quantum/origin/summary/{dimension}&lt;/code&gt;&lt;/a&gt; - Returns origin post-quantum data summarized by key agreement algorithm.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/post_quantum/methods/timeseries_groups/&quot;&gt;&lt;code&gt;/post_quantum/origin/timeseries_groups/{dimension}&lt;/code&gt;&lt;/a&gt; - Returns origin post-quantum timeseries data grouped by key agreement algorithm.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The new &lt;a href=&quot;https://radar.cloudflare.com/post-quantum&quot; target=&quot;_blank&quot;&gt;Post-Quantum Encryption&lt;/a&gt; page shows the share of customer origins supporting &lt;a href=&quot;https://developers.cloudflare.com/ssl/post-quantum-cryptography/pqc-support/#x25519mlkem768&quot;&gt;X25519MLKEM768&lt;/a&gt;, derived from daily automated TLS scans of TLS 1.3-compatible origins. The scanner tests for algorithm support rather than the origin server&apos;s configured preference.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/pq-origin-support.Bn5Dw_It_Z12sKNz.webp&quot; alt=&quot;Screenshot of the origin post-quantum support graph on Radar&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;A host test tool allows checking any publicly accessible website for post-quantum encryption compatibility. Enter a hostname and optional port to see whether the server negotiates a post-quantum key exchange algorithm.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/pq-host-test.dRqwoOvo_Z2hjMhW.webp&quot; alt=&quot;Screenshot of the post-quantum host test tool on Radar&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;Key Transparency&lt;/h4&gt;
&lt;p&gt;A new &lt;a href=&quot;https://radar.cloudflare.com/key-transparency&quot; target=&quot;_blank&quot;&gt;Key Transparency&lt;/a&gt; section displays the audit status of Key Transparency logs for end-to-end encrypted messaging services. The page launches with two monitored logs: WhatsApp and Facebook Messenger Transport.&lt;/p&gt;
&lt;p&gt;Each log card shows the current status, last signed epoch, last verified epoch, and the root hash of the Auditable Key Directory tree. The data is also available through the &lt;a href=&quot;https://developers.cloudflare.com/key-transparency/api/&quot;&gt;Key Transparency Auditor API&lt;/a&gt;.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/key-transparency-dashboard.DNQgLsb0_25IWgQ.webp&quot; alt=&quot;Screenshot of the Key Transparency dashboard on Radar&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Learn more about these features in our &lt;a href=&quot;https://blog.cloudflare.com/radar-origin-pq-key-transparency-aspa&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt; and check out the &lt;a href=&quot;https://radar.cloudflare.com/post-quantum&quot; target=&quot;_blank&quot;&gt;Post-Quantum Encryption&lt;/a&gt; and &lt;a href=&quot;https://radar.cloudflare.com/key-transparency&quot; target=&quot;_blank&quot;&gt;Key Transparency&lt;/a&gt; pages to explore the data.&lt;/p&gt;</description><pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>Cache - Asynchronous stale-while-revalidate</title><link>https://developers.cloudflare.com/changelog/post/2026-02-26-async-stale-while-revalidate/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-26-async-stale-while-revalidate/</guid><description>&lt;p&gt;Cloudflare&apos;s &lt;a href=&quot;https://developers.cloudflare.com/cache/concepts/cache-control/#revalidation&quot;&gt;&lt;code&gt;stale-while-revalidate&lt;/code&gt;&lt;/a&gt; support is now fully asynchronous. Previously, the first request for a stale (expired) asset in cache had to wait for an origin response, after which that visitor received a REVALIDATED or EXPIRED status. Now, the first request after the asset expires triggers revalidation in the background and immediately receives stale content with an UPDATING status. All following requests also receive stale content with an &lt;code&gt;UPDATING&lt;/code&gt; status until the origin responds, after which subsequent requests receive fresh content with a &lt;code&gt;HIT&lt;/code&gt; status.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;stale-while-revalidate&lt;/code&gt; is a &lt;code&gt;Cache-Control&lt;/code&gt; directive set by your origin server that allows Cloudflare to serve an expired cached asset while a fresh copy is fetched from the origin.&lt;/p&gt;
&lt;p&gt;Asynchronous revalidation brings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Lower latency&lt;/strong&gt;: No visitor is waiting for the origin when the asset is already in cache. Every request is served from cache during revalidation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistent experience&lt;/strong&gt;: All visitors receive the same cached response during revalidation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduced error exposure&lt;/strong&gt;: The first request is no longer vulnerable to origin timeouts or errors. All visitors receive a cached response while revalidation happens in the background.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Availability&lt;/h4&gt;
&lt;p&gt;This change is live for all Free, Pro, and Business zones. Approximately 75% of Enterprise zones have been migrated, with the remaining zones rolling out throughout the quarter.&lt;/p&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;To use this feature, make sure your origin includes the &lt;code&gt;stale-while-revalidate&lt;/code&gt; directive in the &lt;code&gt;Cache-Control&lt;/code&gt; header. Refer to the &lt;a href=&quot;https://developers.cloudflare.com/cache/concepts/cache-control/#revalidation&quot;&gt;Cache-Control documentation&lt;/a&gt; for details.&lt;/p&gt;</description><pubDate>Thu, 26 Feb 2026 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>Cloudflare Fundamentals - Markdown responses for Cloudflare 1xxx errors</title><link>https://developers.cloudflare.com/changelog/post/2026-02-26-markdown-responses-for-1xxx-errors/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-26-markdown-responses-for-1xxx-errors/</guid><description>&lt;p&gt;Cloudflare now returns structured Markdown responses for Cloudflare-generated 1xxx errors when clients send &lt;code&gt;Accept: text/markdown&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Each response includes YAML frontmatter plus guidance sections (&lt;code&gt;What happened&lt;/code&gt; / &lt;code&gt;What you should do&lt;/code&gt;) so agents can make deterministic retry and escalation decisions without parsing HTML.&lt;/p&gt;
&lt;p&gt;In measured 1,015 comparisons, Markdown reduced payload size and token footprint by over 98% versus HTML.&lt;/p&gt;
&lt;p&gt;Included frontmatter fields:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;error_code&lt;/code&gt;, &lt;code&gt;error_name&lt;/code&gt;, &lt;code&gt;error_category&lt;/code&gt;, &lt;code&gt;http_status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ray_id&lt;/code&gt;, &lt;code&gt;timestamp&lt;/code&gt;, &lt;code&gt;zone&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_error&lt;/code&gt;, &lt;code&gt;retryable&lt;/code&gt;, &lt;code&gt;retry_after&lt;/code&gt; (when applicable), &lt;code&gt;owner_action_required&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Default behavior is unchanged: clients that do not explicitly request Markdown continue to receive HTML error pages.&lt;/p&gt;
&lt;h4&gt;Negotiation behavior&lt;/h4&gt;
&lt;p&gt;Cloudflare uses standard HTTP content negotiation on the &lt;code&gt;Accept&lt;/code&gt; header.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Accept: text/markdown&lt;/code&gt; -&gt; Markdown&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Accept: text/markdown, text/html;q=0.9&lt;/code&gt; -&gt; Markdown&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Accept: text/*&lt;/code&gt; -&gt; Markdown&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Accept: */*&lt;/code&gt; -&gt; HTML (default browser behavior)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When multiple values are present, Cloudflare selects the highest-priority supported media type using &lt;code&gt;q&lt;/code&gt; values. If Markdown is not explicitly preferred, HTML is returned.&lt;/p&gt;
&lt;h4&gt;Availability&lt;/h4&gt;
&lt;p&gt;Available now for Cloudflare-generated 1xxx errors.&lt;/p&gt;
&lt;h4&gt;Get started&lt;/h4&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Accept: text/markdown&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://&amp;#x3C;your-domain&gt;/cdn-cgi/error/1015&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;Reference: &lt;a href=&quot;https://developers.cloudflare.com/support/troubleshooting/http-status-codes/cloudflare-1xxx-errors/&quot;&gt;Cloudflare 1xxx error documentation&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 26 Feb 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Agents, Workers - Agents SDK v0.6.0: RPC transport for MCP, optional OAuth, hardened schema conversion, and @cloudflare/ai-chat fixes</title><link>https://developers.cloudflare.com/changelog/post/2026-02-25-agents-sdk-v060/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-25-agents-sdk-v060/</guid><description>&lt;p&gt;The latest release of the &lt;a href=&quot;https://github.com/cloudflare/agents&quot; target=&quot;_blank&quot;&gt;Agents SDK&lt;/a&gt; lets you define an Agent and an McpAgent in the same Worker and connect them over RPC — no HTTP, no network overhead. It also makes OAuth opt-in for simple MCP connections, hardens the schema converter for production workloads, and ships a batch of &lt;code&gt;@cloudflare/ai-chat&lt;/code&gt; reliability fixes.&lt;/p&gt;
&lt;h4&gt;RPC transport for MCP&lt;/h4&gt;
&lt;p&gt;You can now connect an Agent to an McpAgent in the same Worker using a Durable Object binding instead of an HTTP URL. The connection stays entirely within the Cloudflare runtime — no network round-trips, no serialization overhead.&lt;/p&gt;
&lt;p&gt;Pass the Durable Object namespace directly to &lt;code&gt;addMcpServer&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;agents&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onStart&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;// Connect via DO binding — no HTTP, no network overhead&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addMcpServer&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;counter&quot;&lt;/span&gt;&lt;span&gt;,&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;MY_MCP&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// With props for per-user context&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addMcpServer&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;counter&quot;&lt;/span&gt;&lt;span&gt;,&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;MY_MCP&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;props&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; userId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user-123&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; role&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;admin&quot;&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;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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;agents&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onStart&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;// Connect via DO binding — no HTTP, no network overhead&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addMcpServer&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;counter&quot;&lt;/span&gt;&lt;span&gt;,&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;MY_MCP&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// With props for per-user context&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addMcpServer&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;counter&quot;&lt;/span&gt;&lt;span&gt;,&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;MY_MCP&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;props&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; userId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user-123&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; role&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;admin&quot;&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;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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;The &lt;code&gt;addMcpServer&lt;/code&gt; method now accepts &lt;code&gt;string | DurableObjectNamespace&lt;/code&gt; as the second parameter with full TypeScript overloads, so HTTP and RPC paths are type-safe and cannot be mixed.&lt;/p&gt;
&lt;p&gt;Key capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hibernation support&lt;/strong&gt; — RPC connections survive Durable Object hibernation automatically. The binding name and props are persisted to storage and restored on wake-up, matching the behavior of HTTP MCP connections.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deduplication&lt;/strong&gt; — Calling &lt;code&gt;addMcpServer&lt;/code&gt; with the same server name returns the existing connection instead of creating duplicates. Connection IDs are stable across hibernation restore.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Smaller surface area&lt;/strong&gt; — The RPC transport internals have been rewritten and reduced from 609 lines to 245 lines. &lt;code&gt;RPCServerTransport&lt;/code&gt; now uses &lt;code&gt;JSONRPCMessageSchema&lt;/code&gt; from the MCP SDK for validation instead of hand-written checks.&lt;/li&gt;
&lt;/ul&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;RPC transport is experimental. The API may change based on feedback. Refer to &lt;a href=&quot;https://github.com/cloudflare/agents/issues/565&quot; target=&quot;_blank&quot;&gt;the tracking issue&lt;/a&gt; for updates.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;h4&gt;Optional OAuth for MCP connections&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;addMcpServer()&lt;/code&gt; no longer eagerly creates an OAuth provider for every connection. For servers that do not require authentication, a simple call is all you need:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// No callbackHost, no OAuth config — just works&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addMcpServer&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;my-server&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://mcp.example.com&quot;&lt;/span&gt;&lt;span&gt;)&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;// No callbackHost, no OAuth config — just works&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addMcpServer&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;my-server&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://mcp.example.com&quot;&lt;/span&gt;&lt;span&gt;)&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;If the server responds with a 401, the SDK throws a clear error: &lt;code&gt;&quot;This MCP server requires OAuth authentication. Provide callbackHost in addMcpServer options to enable the OAuth flow.&quot;&lt;/code&gt; The restore-from-storage flow also handles missing callback URLs gracefully, skipping auth provider creation for non-OAuth servers.&lt;/p&gt;
&lt;h4&gt;Hardened JSON Schema to TypeScript converter&lt;/h4&gt;
&lt;p&gt;The schema converter used by &lt;code&gt;generateTypes()&lt;/code&gt; and &lt;code&gt;getAITools()&lt;/code&gt; now handles edge cases that previously caused crashes in production:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Depth and circular reference guards&lt;/strong&gt; — Prevents stack overflows on recursive or deeply nested schemas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;$ref&lt;/code&gt; resolution&lt;/strong&gt; — Supports internal JSON Pointers (&lt;code&gt;#/definitions/...&lt;/code&gt;, &lt;code&gt;#/$defs/...&lt;/code&gt;, &lt;code&gt;#&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tuple support&lt;/strong&gt; — &lt;code&gt;prefixItems&lt;/code&gt; (JSON Schema 2020-12) and array &lt;code&gt;items&lt;/code&gt; (draft-07)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenAPI 3.0 &lt;code&gt;nullable: true&lt;/code&gt;&lt;/strong&gt; — Supported across all schema branches&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Per-tool error isolation&lt;/strong&gt; — One malformed schema cannot crash the full pipeline in &lt;code&gt;generateTypes()&lt;/code&gt; or &lt;code&gt;getAITools()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Missing &lt;code&gt;inputSchema&lt;/code&gt; fallback&lt;/strong&gt; — &lt;code&gt;getAITools()&lt;/code&gt; falls back to &lt;code&gt;{ type: &quot;object&quot; }&lt;/code&gt; instead of throwing&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;code&gt;@cloudflare/ai-chat&lt;/code&gt; fixes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tool denial flow&lt;/strong&gt; — Denied tool approvals (&lt;code&gt;approved: false&lt;/code&gt;) now transition to &lt;code&gt;output-denied&lt;/code&gt; with a &lt;code&gt;tool_result&lt;/code&gt;, fixing Anthropic provider compatibility. Custom denial messages are supported via &lt;code&gt;state: &quot;output-error&quot;&lt;/code&gt; and &lt;code&gt;errorText&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Abort/cancel support&lt;/strong&gt; — Streaming responses now properly cancel the reader loop when the abort signal fires and send a done signal to the client.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Duplicate message persistence&lt;/strong&gt; — &lt;code&gt;persistMessages()&lt;/code&gt; now reconciles assistant messages by content and order, preventing duplicate rows when clients resend full history.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;requestId&lt;/code&gt; in &lt;code&gt;OnChatMessageOptions&lt;/code&gt;&lt;/strong&gt; — Handlers can now send properly-tagged error responses for pre-stream failures.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;redacted_thinking&lt;/code&gt; preservation&lt;/strong&gt; — The message sanitizer no longer strips Anthropic &lt;code&gt;redacted_thinking&lt;/code&gt; blocks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;/get-messages&lt;/code&gt; reliability&lt;/strong&gt; — Endpoint handling moved from a prototype &lt;code&gt;onRequest()&lt;/code&gt; override to a constructor wrapper, so it works even when users override &lt;code&gt;onRequest&lt;/code&gt; without calling &lt;code&gt;super.onRequest()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Client tool APIs undeprecated&lt;/strong&gt; — &lt;code&gt;createToolsFromClientSchemas&lt;/code&gt;, &lt;code&gt;clientTools&lt;/code&gt;, &lt;code&gt;AITool&lt;/code&gt;, &lt;code&gt;extractClientToolSchemas&lt;/code&gt;, and the &lt;code&gt;tools&lt;/code&gt; option on &lt;code&gt;useAgentChat&lt;/code&gt; are restored for SDK use cases where tools are defined dynamically at runtime.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;jsonSchema&lt;/code&gt; initialization&lt;/strong&gt; — Fixed &lt;code&gt;jsonSchema not initialized&lt;/code&gt; error when calling &lt;code&gt;getAITools()&lt;/code&gt; in &lt;code&gt;onChatMessage&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Upgrade&lt;/h4&gt;
&lt;p&gt;To update to the latest version:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agents@latest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@cloudflare/ai-chat@latest&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;</description><pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>Containers - Run 15x more Containers with higher resource limits</title><link>https://developers.cloudflare.com/changelog/post/2026-02-25-higher-container-resource-limits/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-25-higher-container-resource-limits/</guid><description>&lt;p&gt;You can now run more &lt;a href=&quot;https://developers.cloudflare.com/containers/&quot;&gt;Containers&lt;/a&gt; concurrently with significantly higher limits on memory, vCPU, and disk.&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Limit&lt;/th&gt;&lt;th&gt;Previous Limit&lt;/th&gt;&lt;th&gt;New Limit&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Memory for concurrent live Container instances&lt;/td&gt;&lt;td&gt;400GiB&lt;/td&gt;&lt;td&gt;6TiB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;vCPU for concurrent live Container instances&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;1,500&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Disk for concurrent live Container instances&lt;/td&gt;&lt;td&gt;2TB&lt;/td&gt;&lt;td&gt;30TB&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;This 15x increase enables larger-scale workloads on Containers. You can now run 15,000 instances of the &lt;code&gt;lite&lt;/code&gt; instance type, 6,000 instances of &lt;code&gt;basic&lt;/code&gt;, over 1,500 instances of &lt;code&gt;standard-1&lt;/code&gt;, or over 1,000 instances of &lt;code&gt;standard-2&lt;/code&gt; concurrently.&lt;/p&gt;
&lt;p&gt;Refer to &lt;a href=&quot;https://developers.cloudflare.com/containers/platform-details/limits/&quot;&gt;Limits&lt;/a&gt; for more details on the available instance types and limits.&lt;/p&gt;</description><pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate><product>Containers</product><category>Containers</category></item><item><title>Radar - RPKI ASPA Deployment Insights on Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2026-02-25-radar-aspa-insights/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-25-radar-aspa-insights/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; now includes &lt;a href=&quot;https://datatracker.ietf.org/doc/draft-ietf-sidrops-aspa-verification/&quot; target=&quot;_blank&quot;&gt;Autonomous System Provider Authorization (ASPA)&lt;/a&gt; deployment insights, providing visibility into the adoption and verification of ASPA objects across the global routing ecosystem.&lt;/p&gt;
&lt;h4&gt;New API endpoints&lt;/h4&gt;
&lt;p&gt;The new &lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/bgp/subresources/rpki/subresources/aspa/&quot;&gt;&lt;code&gt;ASPA&lt;/code&gt;&lt;/a&gt; API provides the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/bgp/subresources/rpki/subresources/aspa/methods/snapshot/&quot;&gt;&lt;code&gt;/bgp/rpki/aspa/snapshot&lt;/code&gt;&lt;/a&gt; - Retrieves current or historical ASPA objects.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/bgp/subresources/rpki/subresources/aspa/methods/changes/&quot;&gt;&lt;code&gt;/bgp/rpki/aspa/changes&lt;/code&gt;&lt;/a&gt; - Retrieves changes to ASPA objects over time.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/bgp/subresources/rpki/subresources/aspa/methods/timeseries/&quot;&gt;&lt;code&gt;/bgp/rpki/aspa/timeseries&lt;/code&gt;&lt;/a&gt; - Retrieves ASPA object counts over time as a timeseries.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;New Radar widgets&lt;/h4&gt;
&lt;p&gt;The &lt;a href=&quot;https://radar.cloudflare.com/routing&quot; target=&quot;_blank&quot;&gt;global routing page&lt;/a&gt; now shows the ASPA deployment trend over time by counting daily ASPA objects.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/aspa-global-trend.CXGWGFL4_ZEk9sF.webp&quot; alt=&quot;Screenshot of the ASPA deployment trend chart&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;The global routing page also displays the most recent ASPA objects, searchable by ASN or AS name.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/aspa-global-table.vHUyNoTh_17BSkd.webp&quot; alt=&quot;Screenshot of the ASPA objects table&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;On country and region routing pages, a new widget shows the ASPA deployment rate for ASNs registered in the selected country or region.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/aspa-germany-trend.DIH6CESC_Z1CWuGi.webp&quot; alt=&quot;Screenshot of the ASPA deployment trent chart for Germany&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;On AS routing pages, the connectivity table now includes checkmarks for ASPA-verified upstreams. All ASPA upstreams are listed in a dedicated table, and a timeline shows ASPA changes at daily granularity.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/aspa-asn-timeline.Bnl6upJs_Z1DgRWG.webp&quot; alt=&quot;Screenshot of the ASPA changes timeline on an AS routing page&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://radar.cloudflare.com/routing&quot; target=&quot;_blank&quot;&gt;Radar routing page&lt;/a&gt; to explore the data.&lt;/p&gt;</description><pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>Workers - Better Windows support for Python Workers</title><link>https://developers.cloudflare.com/changelog/post/2026-02-13-pywrangler-windows-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-13-pywrangler-windows-support/</guid><description>&lt;p&gt;&lt;a href=&quot;https://github.com/cloudflare/workers-py?tab=readme-ov-file#pywrangler&quot; target=&quot;_blank&quot;&gt;Pywrangler&lt;/a&gt;, the CLI tool for managing Python Workers and packages,
now supports Windows, allowing you to develop and deploy Python Workers from Windows environments.
Previously, Pywrangler was only available on macOS and Linux.&lt;/p&gt;
&lt;p&gt;You can install and use Pywrangler on Windows the same way you would on other platforms.
&lt;a href=&quot;https://developers.cloudflare.com/workers/languages/python/packages/&quot;&gt;Specify your Worker&apos;s Python dependencies&lt;/a&gt; in your &lt;code&gt;pyproject.toml&lt;/code&gt; file,
then use the following commands to develop and deploy:&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;uvx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workers-py&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pywrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;uvx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workers-py&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pywrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&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;All existing Pywrangler functionality, including package management, local development, and deployment, works on Windows without any additional configuration.&lt;/p&gt;
&lt;h4&gt;Requirements&lt;/h4&gt;
&lt;p&gt;This feature requires the following minimum versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;wrangler&lt;/code&gt; &gt;= 4.64.0&lt;/li&gt;
&lt;li&gt;&lt;code&gt;workers-py&lt;/code&gt; &gt;= 1.72.0&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uv&lt;/code&gt; &gt;= 0.29.8&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To upgrade &lt;code&gt;workers-py&lt;/code&gt; (which includes Pywrangler) in your project, run:&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;uv&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;upgrade&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workers-py&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;To upgrade &lt;code&gt;wrangler&lt;/code&gt;, run:&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;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-g&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;wrangler@latest&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;To upgrade &lt;code&gt;uv&lt;/code&gt;, run:&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;uv&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&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;To get started with Python Workers on Windows, refer to the &lt;a href=&quot;https://developers.cloudflare.com/workers/languages/python/packages/&quot;&gt;Python packages documentation&lt;/a&gt; for full details on Pywrangler.&lt;/p&gt;</description><pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Write structured queries to filter and search your Workers logs and traces</title><link>https://developers.cloudflare.com/changelog/post/2026-02-24-observability-query-language/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-24-observability-query-language/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/observability/&quot;&gt;Workers Observability&lt;/a&gt; now includes a query language that lets you write structured queries directly in the search bar to filter your logs and traces. The search bar doubles as a free text search box — type any term to search across all metadata and attributes, or write field-level queries for precise filtering.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2026-02-24-query-language.Ol8UX7m0_ZqdMnt.webp&quot; alt=&quot;Workers Observability search bar with autocomplete suggestions and Query Builder sidebar filters&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Queries written in the search bar sync with the &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/&quot;&gt;Query Builder&lt;/a&gt; sidebar, so you can write a query by hand and then refine it visually, or build filters in the Query Builder and see the corresponding query syntax. The search bar provides autocomplete suggestions for metadata fields and operators as you type.&lt;/p&gt;
&lt;p&gt;The query language supports:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Free text search&lt;/strong&gt; — search everywhere with a keyword like &lt;code&gt;error&lt;/code&gt;, or match an exact phrase with &lt;code&gt;&quot;exact phrase&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Field queries&lt;/strong&gt; — filter by specific fields using comparison operators (for example, &lt;code&gt;status = 500&lt;/code&gt; or &lt;code&gt;$workers.wallTimeMs &gt; 100&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operators&lt;/strong&gt; — &lt;code&gt;=&lt;/code&gt;, &lt;code&gt;!=&lt;/code&gt;, &lt;code&gt;&gt;&lt;/code&gt;, &lt;code&gt;&gt;=&lt;/code&gt;, &lt;code&gt;&amp;#x3C;&lt;/code&gt;, &lt;code&gt;&amp;#x3C;=&lt;/code&gt;, and &lt;code&gt;:&lt;/code&gt; (contains)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Functions&lt;/strong&gt; — &lt;code&gt;contains(field, value)&lt;/code&gt;, &lt;code&gt;startsWith(field, prefix)&lt;/code&gt;, &lt;code&gt;regex(field, pattern)&lt;/code&gt;, and &lt;code&gt;exists(field)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Boolean logic&lt;/strong&gt; — add conditions with &lt;code&gt;AND&lt;/code&gt;, &lt;code&gt;OR&lt;/code&gt;, and &lt;code&gt;NOT&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Select the help icon next to the search bar to view the full syntax reference, including all supported operators, functions, and keyboard shortcuts.&lt;/p&gt;
&lt;p&gt;Go to the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers-and-pages/observability/&quot; target=&quot;_blank&quot;&gt;Workers Observability dashboard&lt;/a&gt; to try the query language.&lt;/p&gt;</description><pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - No config? No problem. Just `wrangler deploy`</title><link>https://developers.cloudflare.com/changelog/post/2026-02-25-wrangler-autoconfig-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-25-wrangler-autoconfig-ga/</guid><description>&lt;p&gt;You can now deploy any existing project to Cloudflare Workers — even without a Wrangler configuration file — and &lt;code&gt;wrangler deploy&lt;/code&gt; will &lt;em&gt;just work&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Starting with Wrangler &lt;strong&gt;4.68.0&lt;/strong&gt;, running &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/general/#deploy&quot;&gt;&lt;code&gt;wrangler deploy&lt;/code&gt;&lt;/a&gt; &lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/automatic-configuration/&quot;&gt;automatically configures your project&lt;/a&gt; by detecting your framework, installing required adapters, and deploying it to Cloudflare Workers.&lt;/p&gt;
&lt;h4&gt;Using Wrangler locally&lt;/h4&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&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;deploy&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;When you run &lt;code&gt;wrangler deploy&lt;/code&gt; in a project without a configuration file, Wrangler:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Detects your framework from &lt;code&gt;package.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Prompts you to confirm the detected settings&lt;/li&gt;
&lt;li&gt;Installs any required adapters&lt;/li&gt;
&lt;li&gt;Generates a &lt;code&gt;wrangler.jsonc&lt;/code&gt; &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/configuration/&quot;&gt;configuration file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Deploys your project to Cloudflare Workers&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You can also use &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/general/#setup&quot;&gt;&lt;code&gt;wrangler setup&lt;/code&gt;&lt;/a&gt; to configure without deploying, or pass &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/general/#deploy&quot;&gt;&lt;code&gt;--yes&lt;/code&gt;&lt;/a&gt; to skip prompts.&lt;/p&gt;
&lt;h4&gt;Using the Cloudflare dashboard&lt;/h4&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/automatic-pr.CwJG6Bec_1cC506.webp&quot; alt=&quot;Automatic configuration pull request created by Workers Builds&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;When you connect a repository through the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers-and-pages/create&quot; target=&quot;_blank&quot;&gt;Workers dashboard&lt;/a&gt;, a &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/automatic-prs/&quot;&gt;pull request is generated&lt;/a&gt; for you with all necessary files, and a &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/previews/&quot;&gt;preview deployment&lt;/a&gt; to check before merging.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;A pull request is only generated when your deploy command is &lt;code&gt;npx wrangler deploy&lt;/code&gt;. If you use a custom deploy command, automatic configuration still runs but a PR is not created.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;h4&gt;Background&lt;/h4&gt;
&lt;p&gt;In December 2025, we &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-12-16-wrangler-autoconfig/&quot;&gt;introduced automatic configuration&lt;/a&gt; as an experimental feature. It is now generally available and the default behavior.&lt;/p&gt;
&lt;p&gt;If you have questions or run into issues, join the &lt;a href=&quot;https://github.com/cloudflare/workers-sdk/discussions/11667&quot; target=&quot;_blank&quot;&gt;GitHub discussion&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2026.1.150.0)</title><link>https://developers.cloudflare.com/changelog/post/2026-02-24-warp-windows-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-24-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes, improvements, and new features.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improvements to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/windows-multiuser/&quot;&gt;multi-user mode&lt;/a&gt;. Fixed an issue where when switching from a pre-login registration to a user registration, Mobile Device Management (MDM) configuration association could be lost.&lt;/li&gt;
&lt;li&gt;Added a new feature to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#netbios-over-tcpip&quot;&gt;manage NetBIOS over TCP/IP&lt;/a&gt; functionality on the Windows client. NetBIOS over TCP/IP on the Windows client is now disabled by default and can be enabled in &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/device-profiles/&quot;&gt;device profile settings&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Fixed an issue causing failure of the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#allow-users-to-enable-local-network-exclusion&quot;&gt;local network exclusion&lt;/a&gt; feature when configured with a timeout of &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Improvement for the Windows &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/reusable-components/posture-checks/warp-client-checks/client-certificate/&quot;&gt;client certificate posture check&lt;/a&gt; to ensure logged results are from checks that run once users log in.&lt;/li&gt;
&lt;li&gt;Improvement for more accurate reporting of device colocation information in the Cloudflare One dashboard.&lt;/li&gt;
&lt;li&gt;Fixed an issue where misconfigured DEX HTTP tests prevented new registrations.&lt;/li&gt;
&lt;li&gt;Fixed an issue causing DNS requests to fail with clients in Traffic and DNS mode.&lt;/li&gt;
&lt;li&gt;Improved service shutdown behavior in cases where the daemon is unresponsive.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For Windows 11 24H2 users, Microsoft has confirmed a regression that may lead to performance issues like mouse lag, audio cracking, or other slowdowns. Cloudflare recommends users experiencing these issues upgrade to a minimum &lt;a href=&quot;https://support.microsoft.com/en-us/topic/july-8-2025-kb5062553-os-build-26100-4652-523e69cb-051b-43c6-8376-6a76d6caeefd&quot;&gt;Windows 11 24H2 KB5062553&lt;/a&gt; or higher for resolution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with KB5055523 installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 24 Feb 2026 01:15:23 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2026.1.150.0)</title><link>https://developers.cloudflare.com/changelog/post/2026-02-24-warp-macos-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-24-warp-macos-ga/</guid><description>&lt;p&gt;A new GA release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue causing failure of the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#allow-users-to-enable-local-network-exclusion&quot;&gt;local network exclusion&lt;/a&gt; feature when configured with a timeout of &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Improvement for more accurate reporting of device colocation information in the Cloudflare One dashboard.&lt;/li&gt;
&lt;li&gt;Fixed an issue with DNS server configuration failures that caused tunnel connection delays.&lt;/li&gt;
&lt;li&gt;Fixed an issue where misconfigured DEX HTTP tests prevented new registrations.&lt;/li&gt;
&lt;li&gt;Fixed an issue causing DNS requests to fail with clients in Traffic and DNS mode.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 24 Feb 2026 01:15:22 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for Linux (version 2026.1.150.0)</title><link>https://developers.cloudflare.com/changelog/post/2026-02-24-warp-linux-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-24-warp-linux-ga/</guid><description>&lt;p&gt;A new GA release for the Linux WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;WARP client version 2025.8.779.0 introduced an updated public key for Linux packages. The public key must be updated if it was installed before September 12, 2025 to ensure the repository remains functional after December 4, 2025. Instructions to make this update are available at &lt;a href=&quot;https://pkg.cloudflareclient.com&quot;&gt;pkg.cloudflareclient.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue causing failure of the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#allow-users-to-enable-local-network-exclusion&quot;&gt;local network exclusion&lt;/a&gt; feature when configured with a timeout of &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Improvement for more accurate reporting of device colocation information in the Cloudflare One dashboard.&lt;/li&gt;
&lt;li&gt;Fixed an issue where misconfigured DEX HTTP tests prevented new registrations.&lt;/li&gt;
&lt;li&gt;Fixed issues causing DNS requests to fail with clients in Traffic and DNS mode or DNS only mode.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 24 Feb 2026 00:14:20 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Durable Objects, Workers - deleteAll() now deletes Durable Object alarm</title><link>https://developers.cloudflare.com/changelog/post/2026-02-24-deleteall-deletes-alarms/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-24-deleteall-deletes-alarms/</guid><description>&lt;p&gt;&lt;code&gt;deleteAll()&lt;/code&gt; now deletes a Durable Object alarm in addition to stored data for Workers with a compatibility date of &lt;code&gt;2026-02-24&lt;/code&gt; or later. This change simplifies clearing a Durable Object&apos;s storage with a single API call.&lt;/p&gt;
&lt;p&gt;Previously, &lt;code&gt;deleteAll()&lt;/code&gt; only deleted user-stored data for an object. Alarm usage stores metadata in an object&apos;s storage, which required a separate &lt;code&gt;deleteAlarm()&lt;/code&gt; call to fully clean up all storage for an object. The &lt;code&gt;deleteAll()&lt;/code&gt; change applies to both KV-backed and SQLite-backed Durable Objects.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Before: two API calls required to clear all storage&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;deleteAlarm&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;deleteAll&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Now: a single call clears both data and the alarm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;deleteAll&lt;/span&gt;&lt;span&gt;()&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;For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/api/sqlite-storage-api/#deleteall&quot;&gt;Storage API documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 24 Feb 2026 00:00:00 GMT</pubDate><product>Durable Objects</product><category>Durable Objects</category><category>Workers</category></item><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>Stream - Stream live inputs can now be disabled and enabled</title><link>https://developers.cloudflare.com/changelog/post/2026-02-24-disable-live-inputs/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-24-disable-live-inputs/</guid><description>&lt;p&gt;You can now disable a live input to reject incoming RTMPS and SRT
connections. When a live input is disabled, any broadcast attempts will fail to
connect.&lt;/p&gt;
&lt;p&gt;This gives you more control over your live inputs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Temporarily pause an input without deleting it&lt;/li&gt;
&lt;li&gt;Programmatically end creator broadcasts&lt;/li&gt;
&lt;li&gt;Prevent new broadcasts from starting on a specific input&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To disable a live input via the API, set the &lt;code&gt;enabled&lt;/code&gt; property to &lt;code&gt;false&lt;/code&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--request&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PUT&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;https://api.cloudflare.com/client/v4/accounts/{&lt;/span&gt;&lt;span&gt;account_id}/stream/live_inputs/&lt;/span&gt;&lt;span&gt;{input_id}&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;--header &lt;/span&gt;&lt;span&gt;&quot;Authorization: Bearer &amp;#x3C;API_TOKEN&gt;&quot;&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;--data &lt;/span&gt;&lt;span&gt;&apos;{&quot;enabled&quot;: false}&apos;&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;You can also disable or enable a live input from the &lt;strong&gt;Live inputs&lt;/strong&gt; list page
or the live input detail page in the Dashboard.&lt;/p&gt;
&lt;p&gt;All existing live inputs remain enabled by default. For more information, refer
to &lt;a href=&quot;https://developers.cloudflare.com/stream/stream-live/start-stream-live/&quot;&gt;Start a live stream&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 24 Feb 2026 00:00:00 GMT</pubDate><product>Stream</product><category>Stream</category></item><item><title>Agents, R2, Containers - Backup and restore API for Sandbox SDK</title><link>https://developers.cloudflare.com/changelog/post/2026-02-23-sandbox-backup-restore-api/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-23-sandbox-backup-restore-api/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/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;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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getSandbox&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;Sandbox&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-sandbox&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Make non-trivial changes to the file system&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;gitCheckout&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;endUserRepo&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; targetDir&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;/workspace&quot;&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;exec&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;npm install&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; cwd&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;/workspace&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Create a point-in-time backup of the directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;backup&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;createBackup&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; dir&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;/workspace&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Store the handle for later use&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&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;KV&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;put&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`backup:&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;userId&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;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;backup&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// ... in a future session...&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;// Restore instead of re-cloning and reinstalling&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;restoreBackup&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;backup&lt;/span&gt;&lt;span&gt;)&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;Backups are stored in &lt;a href=&quot;https://developers.cloudflare.com/r2&quot;&gt;R2&lt;/a&gt; and can take advantage of &lt;a href=&quot;https://developers.cloudflare.com/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 neeeded&lt;/li&gt;
&lt;/ul&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&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;/aside&gt;
&lt;p&gt;To get started, refer to the &lt;a href=&quot;https://developers.cloudflare.com/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.cloudflare.com/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>Hyperdrive - Hyperdrive no longer caches queries using STABLE PostgreSQL functions</title><link>https://developers.cloudflare.com/changelog/post/2026-02-23-hyperdrive-stable-functions-uncacheable/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-23-hyperdrive-stable-functions-uncacheable/</guid><description>&lt;p&gt;Hyperdrive now treats queries containing PostgreSQL &lt;code&gt;STABLE&lt;/code&gt; functions as uncacheable, in addition to &lt;code&gt;VOLATILE&lt;/code&gt; functions.&lt;/p&gt;
&lt;p&gt;Previously, only functions &lt;a href=&quot;https://www.postgresql.org/docs/current/xfunc-volatility.html&quot; target=&quot;_blank&quot;&gt;that PostgreSQL categorizes&lt;/a&gt; as &lt;code&gt;VOLATILE&lt;/code&gt; (for example, &lt;code&gt;RANDOM()&lt;/code&gt;, &lt;code&gt;LASTVAL()&lt;/code&gt;) were detected as uncacheable. &lt;code&gt;STABLE&lt;/code&gt; functions (for example, &lt;code&gt;NOW()&lt;/code&gt;, &lt;code&gt;CURRENT_TIMESTAMP&lt;/code&gt;, &lt;code&gt;CURRENT_DATE&lt;/code&gt;) were incorrectly allowed to be cached.&lt;/p&gt;
&lt;p&gt;Because &lt;code&gt;STABLE&lt;/code&gt; functions can return different results across different SQL statements within the same transaction, caching their results could serve stale or incorrect data. This change aligns Hyperdrive&apos;s caching behavior with PostgreSQL&apos;s function volatility semantics.&lt;/p&gt;
&lt;p&gt;If your queries use &lt;code&gt;STABLE&lt;/code&gt; functions, and you were relying on them being cached, move the function call to your application code and pass the result as a query parameter. For example, instead of &lt;code&gt;WHERE created_at &gt; NOW()&lt;/code&gt;, compute the timestamp in your Worker and pass it as &lt;code&gt;WHERE created_at &gt; $1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Hyperdrive uses text-based pattern matching to detect uncacheable functions. References to function names like &lt;code&gt;NOW()&lt;/code&gt; in SQL comments also cause the query to be marked as uncacheable.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/hyperdrive/concepts/query-caching/&quot;&gt;Query caching&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/hyperdrive/observability/troubleshooting/&quot;&gt;Troubleshoot and debug&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 23 Feb 2026 00:00:00 GMT</pubDate><product>Hyperdrive</product><category>Hyperdrive</category></item><item><title>Security Center - Saved views for Threat Events</title><link>https://developers.cloudflare.com/changelog/post/2026-02-23-saved-views-in-threat-events/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-23-saved-views-in-threat-events/</guid><description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; You can now create and save custom configurations of the Threat Events dashboard, allowing you to instantly return to specific filtered views — such as industry-specific attacks or regional Sankey flows — without manual reconfiguration.&lt;/p&gt;
&lt;h4&gt;Why this matters&lt;/h4&gt;
&lt;p&gt;Threat intelligence is most effective when it is personalized. Previously, analysts had to manually re-apply complex filters (like combining specific industry datasets with geographic origins) every time they logged in. This update provides material value by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Analysts can now jump straight into &quot;Known Ransomware Infrastructure&quot; or &quot;Retail Sector Targets&quot; views with a single click, eliminating repetitive setup tasks&lt;/li&gt;
&lt;li&gt;Teams can ensure everyone is looking at the same data subsets by using standardized saved views, reducing the risk of missing critical patterns due to inconsistent filtering.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cloudforce One subscribers can start saving their custom views now in &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/security-center/threat-intelligence/threat-events&quot; target=&quot;_blank&quot;&gt;Application Security &gt; Threat Intelligence &gt; Threat Events&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 23 Feb 2026 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>Agents, Workers - @cloudflare/codemode v0.1.0: a new runtime agnostic modular architecture</title><link>https://developers.cloudflare.com/changelog/post/2026-02-20-codemode-sdk-rewrite/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-20-codemode-sdk-rewrite/</guid><description>&lt;p&gt;The &lt;a href=&quot;https://www.npmjs.com/package/@cloudflare/codemode&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;@cloudflare/codemode&lt;/code&gt;&lt;/a&gt; package has been rewritten into a modular, runtime-agnostic SDK.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.cloudflare.com/code-mode/&quot; target=&quot;_blank&quot;&gt;Code Mode&lt;/a&gt; enables LLMs to write and execute code that orchestrates your tools, instead of calling them one at a time. This can (and does) yield significant token savings, reduces context window pressure and improves overall model performance on a task.&lt;/p&gt;
&lt;p&gt;The new &lt;code&gt;Executor&lt;/code&gt; interface is runtime agnostic and comes with a prebuilt &lt;code&gt;DynamicWorkerExecutor&lt;/code&gt; to run generated code in a &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/worker-loader/&quot;&gt;Dynamic Worker Loader&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Breaking changes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Removed &lt;code&gt;experimental_codemode()&lt;/code&gt; and &lt;code&gt;CodeModeProxy&lt;/code&gt; — the package no longer owns an LLM call or model choice&lt;/li&gt;
&lt;li&gt;New import path: &lt;code&gt;createCodeTool()&lt;/code&gt; is now exported from &lt;code&gt;@cloudflare/codemode/ai&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;New features&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;createCodeTool()&lt;/code&gt;&lt;/strong&gt; — Returns a standard AI SDK &lt;code&gt;Tool&lt;/code&gt; to use in your AI agents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Executor&lt;/code&gt; interface&lt;/strong&gt; — Minimal &lt;code&gt;execute(code, fns)&lt;/code&gt; contract. Implement for any code sandboxing primitive or runtime.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;code&gt;DynamicWorkerExecutor&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Runs code in a &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/worker-loader/&quot;&gt;Dynamic Worker&lt;/a&gt;. It comes with the following features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Network isolation&lt;/strong&gt; — &lt;code&gt;fetch()&lt;/code&gt; and &lt;code&gt;connect()&lt;/code&gt; blocked by default (&lt;code&gt;globalOutbound: null&lt;/code&gt;) when using &lt;code&gt;DynamicWorkerExecutor&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Console capture&lt;/strong&gt; — &lt;code&gt;console.log/warn/error&lt;/code&gt; captured and returned in &lt;code&gt;ExecuteResult.logs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Execution timeout&lt;/strong&gt; — Configurable via &lt;code&gt;timeout&lt;/code&gt; option (default 30s)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Usage&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createCodeTool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/codemode/ai&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DynamicWorkerExecutor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/codemode&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;ai&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;executor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DynamicWorkerExecutor&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; loader&lt;/span&gt;&lt;span&gt;:&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;LOADER&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;codemode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createCodeTool&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; tools&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myTools&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;executor&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamText&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;model&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;tools&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;span&gt;codemode&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;messages&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createCodeTool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/codemode/ai&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DynamicWorkerExecutor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/codemode&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamText&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;ai&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;executor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DynamicWorkerExecutor&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; loader&lt;/span&gt;&lt;span&gt;:&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;LOADER&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;codemode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createCodeTool&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; tools&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;myTools&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;executor&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamText&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;model&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;tools&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;span&gt;codemode&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;messages&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;Wrangler configuration&lt;/h4&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;worker_loaders&lt;/span&gt;&lt;span&gt;&quot;&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;span&gt;&quot;&lt;/span&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;LOADER&quot;&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[[&lt;/span&gt;&lt;span&gt;worker_loaders&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;LOADER&quot;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;See the &lt;a href=&quot;https://developers.cloudflare.com/agents/api-reference/codemode/&quot;&gt;Code Mode documentation&lt;/a&gt; for full API reference and examples.&lt;/p&gt;
&lt;h4&gt;Upgrade&lt;/h4&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@cloudflare/codemode@latest&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;</description><pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>CASB - Understand CASB findings instantly with Cloudy Summaries</title><link>https://developers.cloudflare.com/changelog/post/2026-02-20-cloudy-in-casb/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-20-cloudy-in-casb/</guid><description>&lt;p&gt;You can now easily understand your SaaS security posture findings and why they were detected with &lt;strong&gt;Cloudy Summaries in CASB&lt;/strong&gt;. This feature integrates Cloudflare&apos;s Cloudy AI directly into your CASB Posture Findings to automatically generate clear, plain-language summaries of complex security misconfigurations, third-party app risks, and data exposures.&lt;/p&gt;
&lt;p&gt;This allows security teams and IT administrators to drastically reduce triage time by immediately understanding the context, potential impact, and necessary remediation steps for any given finding—without needing to be an expert in every connected SaaS application.&lt;/p&gt;
&lt;p&gt;To view a summary, simply navigate to your Posture Findings in the Cloudflare One dashboard (under &lt;strong&gt;Cloud and SaaS findings&lt;/strong&gt;) and open the finding details of a specific instance of a Finding.&lt;/p&gt;
&lt;p&gt;Cloudy Summaries are supported on all available integrations, including Microsoft 365, Google Workspace, Salesforce, GitHub, AWS, Slack, and Dropbox. See the full list of supported integrations &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/integrations/cloud-and-saas/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Key capabilities&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Contextual explanations&lt;/strong&gt; — Quickly understand the specifics of a finding with plain-language summaries detailing exactly what was detected, from publicly shared sensitive files to risky third-party app scopes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clear risk assessment&lt;/strong&gt; — Instantly grasp the potential security impact of the finding, such as data breach risks, unauthorized account access, or email spoofing vulnerabilities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Actionable guidance&lt;/strong&gt; — Get clear recommendations and next steps on how to effectively remediate the issue and secure your environment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Built-in feedback&lt;/strong&gt; — Help improve future AI summarization accuracy by submitting feedback directly using the thumbs-up and thumbs-down buttons.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Learn more&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Learn more about managing &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/cloud-and-saas-findings/&quot;&gt;CASB Posture Findings&lt;/a&gt; in Cloudflare.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cloudy Summaries in CASB are available to all Cloudflare CASB users today.&lt;/p&gt;</description><pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate><product>CASB</product><category>CASB</category></item><item><title>Cloudflare Tunnel, Cloudflare Tunnel for SASE - Manage Cloudflare Tunnel directly from the main Cloudflare Dashboard</title><link>https://developers.cloudflare.com/changelog/post/2026-02-20-tunnel-core-dashboard/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-20-tunnel-core-dashboard/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/&quot;&gt;Cloudflare Tunnel&lt;/a&gt; is now available in the main Cloudflare Dashboard at &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/tunnels&quot; target=&quot;_blank&quot;&gt;Networking &gt; Tunnels&lt;/a&gt;, bringing first-class Tunnel management to developers using Tunnel for securing origin servers.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/tunnel-core-dashboard.BGPqaHfo_Pi6HO.webp&quot; alt=&quot;Manage Tunnels in the Core Dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;This new experience provides everything you need to manage Tunnels for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/&quot;&gt;public applications&lt;/a&gt;, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Full Tunnel lifecycle management&lt;/strong&gt;: Create, configure, delete, and monitor all your Tunnels in one place.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Native integrations&lt;/strong&gt;: View Tunnels by name when configuring &lt;a href=&quot;https://developers.cloudflare.com/dns/manage-dns-records/how-to/create-dns-records/&quot;&gt;DNS records&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/workers-vpc/&quot;&gt;Workers VPC&lt;/a&gt; — no more copy-pasting UUIDs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Real-time visibility&lt;/strong&gt;: Monitor &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-availability/&quot;&gt;replicas&lt;/a&gt; and Tunnel &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/common-errors/#tunnel-status&quot;&gt;health status&lt;/a&gt; directly in the dashboard.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Routing map&lt;/strong&gt;: Manage all ingress routes for your Tunnel, including &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/&quot;&gt;public applications&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-private-hostname/&quot;&gt;private hostnames&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-cidr/&quot;&gt;private CIDRs&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/workers-vpc/&quot;&gt;Workers VPC services&lt;/a&gt;, from a single interactive interface.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Choose the right dashboard for your use case&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Core Dashboard&lt;/strong&gt;: Navigate to &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/tunnels&quot; target=&quot;_blank&quot;&gt;Networking &gt; Tunnels&lt;/a&gt; to manage Tunnels for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Securing origin servers and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/&quot;&gt;public applications&lt;/a&gt; with CDN, WAF, Load Balancing, and DDoS protection&lt;/li&gt;
&lt;li&gt;Connecting &lt;a href=&quot;https://developers.cloudflare.com/workers-vpc/&quot;&gt;Workers to private services&lt;/a&gt; via Workers VPC&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cloudflare One Dashboard&lt;/strong&gt;: Navigate to &lt;a href=&quot;https://one.dash.cloudflare.com/?to=/:account/networks/connectors&quot; target=&quot;_blank&quot;&gt;Zero Trust &gt; Networks &gt; Connectors&lt;/a&gt; to manage Tunnels for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Securing your public applications with &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/applications/http-apps/self-hosted-public-app/&quot;&gt;Zero Trust access policies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Connecting users to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/applications/non-http/self-hosted-private-app/&quot;&gt;private applications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Building a &lt;a href=&quot;https://developers.cloudflare.com/reference-architecture/architectures/sase/#connecting-networks&quot;&gt;private mesh network&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both dashboards provide complete Tunnel management capabilities — choose based on your primary workflow.&lt;/p&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;New to Tunnel? Learn how to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/&quot;&gt;get started with Cloudflare Tunnel&lt;/a&gt; or explore advanced use cases like &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/ssh/&quot;&gt;securing SSH servers&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/deployment-guides/kubernetes/&quot;&gt;running Tunnels in Kubernetes&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate><product>Cloudflare Tunnel</product><category>Cloudflare Tunnel</category><category>Cloudflare Tunnel for SASE</category></item><item><title>AI Gateway, Workers AI - AI dashboard experience improvements</title><link>https://developers.cloudflare.com/changelog/post/2026-02-19-ai-dashboard-experience-improvements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-19-ai-dashboard-experience-improvements/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/&quot;&gt;Workers AI&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot;&gt;AI Gateway&lt;/a&gt; have received a series of dashboard improvements to help you get started faster and manage your AI workloads more easily.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Navigation and discoverability&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;AI now has its own top-level section in the Cloudflare dashboard sidebar, so you can find AI features without digging through menus.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/sidebar-navigation.BQNFBmAk_1GqV9H.webp&quot; alt=&quot;AI sidebar navigation in the Cloudflare dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;strong&gt;Onboarding and getting started&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/get-started/&quot;&gt;Getting started&lt;/a&gt; with AI Gateway is now simpler. When you create your first gateway, we now show your gateway&apos;s OpenAI-compatible endpoint and step-by-step guidance to help you configure it. The Playground also includes helpful prompts, and usage pages have clear next steps if you have not made any requests yet.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/onboarding-flow.DZ7aMcHa_Z2hyg1I.webp&quot; alt=&quot;AI Gateway onboarding flow&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;We&apos;ve also combined the previously separate code example sections into one view with dropdown selectors for API type, provider, SDK, and authentication method so you can now customize the exact code snippet you need from one place.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dynamic Routing&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/features/dynamic-routing/&quot;&gt;route builder&lt;/a&gt; is now more performant and responsive.&lt;/li&gt;
&lt;li&gt;You can now copy route names to your clipboard with a single click.&lt;/li&gt;
&lt;li&gt;Code examples use the &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/universal/&quot;&gt;Universal Endpoint&lt;/a&gt; format, making it easier to integrate routes into your application.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Observability and analytics&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Small monetary values now display correctly in &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/observability/costs/&quot;&gt;cost analytics&lt;/a&gt; charts, so you can accurately track spending at any scale.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Accessibility&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improvements to keyboard navigation within the AI Gateway, specifically when exploring usage by &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/providers/&quot;&gt;provider&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Improvements to sorting and filtering components on the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/&quot;&gt;Workers AI&lt;/a&gt; models page.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot;&gt;AI Gateway documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate><product>AI Gateway</product><category>AI Gateway</category><category>Workers AI</category></item><item><title>Digital Experience Monitoring - DEX Supports EU Customer Metadata Boundary</title><link>https://developers.cloudflare.com/changelog/post/2026-02-19-dex-supports-cmb-eu/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-19-dex-supports-cmb-eu/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/dex/&quot;&gt;Digital Experience Monitoring (DEX)&lt;/a&gt; provides visibility into &lt;a href=&quot;https://developers.cloudflare.com/warp-client/&quot;&gt;WARP&lt;/a&gt; device connectivity and performance to any internal or external application.&lt;/p&gt;
&lt;p&gt;Now, all DEX logs are fully compatible with Cloudflare&apos;s &lt;a href=&quot;https://developers.cloudflare.com/data-localization/metadata-boundary/&quot;&gt;Customer Metadata Boundary&lt;/a&gt; (CMB) setting for the &apos;EU&apos; (European Union), which ensures that DEX logs will not be stored outside the &apos;EU&apos; when the option is configured.&lt;/p&gt;
&lt;p&gt;If a Cloudflare One customer using DEX enables CMB &apos;EU&apos;, they will not see any DEX data in the Cloudflare One dashboard. Customers can ingest DEX data via &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/&quot;&gt;LogPush&lt;/a&gt;, and build their own analytics and dashboards.&lt;/p&gt;
&lt;p&gt;If a customer enables CMB in their account, they will see the following message in the Digital Experience dashboard: &quot;DEX data is unavailable because Customer Metadata Boundary configuration is on. Use Cloudflare LogPush to export DEX datasets.&quot;&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/dex_supports_cmb.6YOLXjHN_ZJh3uv.webp&quot; alt=&quot;Digital Experience Monitoring message when Customer Metadata Boundary for the EU is enabled&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate><product>Digital Experience Monitoring</product><category>Digital Experience Monitoring</category></item><item><title>Security Center - Cloudforce One Threat events graphs are now visible in the dashboard</title><link>https://developers.cloudflare.com/changelog/post/2026-02-19-threat-events-graphs/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-19-threat-events-graphs/</guid><description>&lt;p&gt;We have introduced dynamic visualizations to the Threat Events dashboard to help you better understand the threat landscape and identify emerging patterns at a glance.&lt;/p&gt;
&lt;p&gt;What&apos;s new:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sankey Diagrams&lt;/strong&gt;: Trace the flow of attacks from country of origin to target country to identify which regions are being hit hardest and where the threat infrastructure resides.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2026-02-19-sankey-diagram.VZMSmdZL_Z1dxq3E.webp&quot; alt=&quot;Sankey Diagram&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dataset Distribution over time&lt;/strong&gt;: Instantly pivot your view to understand if a specific campaign is targeting your sector or if it is a broad-spectrum commodity attack.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2026-02-19-events-over-time.CqD7VKqA_Z20JNi0.webp&quot; alt=&quot;Events over time&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Filtering&lt;/strong&gt;: Use these visual tools to filter and drill down into specific attack vectors directly from the charts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cloudforce One subscribers can explore these new views now in &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/security-center/threat-intelligence/threat-events&quot; target=&quot;_blank&quot;&gt;Application Security &gt; Threat Intelligence &gt; Threat Events&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>Analytics - New cfWorker metric in Server-Timing header</title><link>https://developers.cloudflare.com/changelog/post/2026-02-18-cfworker-server-timing/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-18-cfworker-server-timing/</guid><description>&lt;p&gt;The Server-Timing header now includes a new &lt;code&gt;cfWorker&lt;/code&gt; metric that measures time spent executing Cloudflare Workers, including any subrequests performed by the Worker. This helps developers accurately identify whether high Time to First Byte (TTFB) is caused by Worker processing or slow upstream dependencies.&lt;/p&gt;
&lt;p&gt;Previously, Worker execution time was included in the &lt;code&gt;edge&lt;/code&gt; metric, making it harder to identify true edge performance. The new &lt;code&gt;cfWorker&lt;/code&gt; metric provides this visibility:&lt;/p&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Metric&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;edge&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Total time spent on the Cloudflare edge, including Worker execution&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;origin&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Time spent fetching from the origin server&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;cfWorker&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Time spent in Worker execution, including subrequests but excluding origin fetch time&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;Example response&lt;/h4&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Server-Timing: cdn-cache; desc=DYNAMIC, edge; dur=20, origin; dur=100, cfWorker; dur=7&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;In this example, the edge took 20ms, the origin took 100ms, and the Worker added just 7ms of processing time.&lt;/p&gt;
&lt;h4&gt;Availability&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;cfWorker&lt;/code&gt; metric is enabled by default if you have &lt;a href=&quot;https://developers.cloudflare.com/web-analytics/&quot;&gt;Real User Monitoring (RUM)&lt;/a&gt; enabled. Otherwise, you can enable it using &lt;a href=&quot;https://developers.cloudflare.com/rules/&quot;&gt;Rules&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This metric is particularly useful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Performance debugging&lt;/strong&gt;: Quickly determine if latency is caused by Worker code, external API calls within Workers, or slow origins.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimization targeting&lt;/strong&gt;: Identify which component of your request path needs optimization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Real User Monitoring (RUM)&lt;/strong&gt;: Access detailed timing breakdowns directly from response headers for client-side analytics.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information about Server-Timing headers, refer to the &lt;a href=&quot;https://www.w3.org/TR/server-timing/&quot; target=&quot;_blank&quot;&gt;W3C Server Timing specification&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 18 Feb 2026 00:00:00 GMT</pubDate><product>Analytics</product><category>Analytics</category></item><item><title>Access - Streamlined clientless browser isolation for private applications</title><link>https://developers.cloudflare.com/changelog/post/2026-02-17-clientless-access-for-private-apps/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-17-clientless-access-for-private-apps/</guid><description>&lt;p&gt;A new &lt;strong&gt;Allow clientless access&lt;/strong&gt; setting makes it easier to connect users without a device client to internal applications, without using public DNS.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/allow-clientless-access.BHKwQuVt_1mLRiX.webp&quot; alt=&quot;Allow clientless access setting in the Cloudflare One dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Previously, to provide clientless access to a private hostname or IP without a &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/routes/add-routes/#add-a-published-application-route&quot;&gt;published application&lt;/a&gt;, you had to create a separate &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/applications/bookmarks/&quot;&gt;bookmark application&lt;/a&gt; pointing to a prefixed &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/remote-browser-isolation/setup/clientless-browser-isolation/&quot;&gt;Clientless Web Isolation&lt;/a&gt; URL (for example, &lt;code&gt;https://&amp;#x3C;your-teamname&gt;.cloudflareaccess.com/browser/https://10.0.0.1/&lt;/code&gt;). This bookmark was visible to all users in the App Launcher, regardless of whether they had access to the underlying application.&lt;/p&gt;
&lt;p&gt;Now, you can manage clientless access directly within your &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/applications/non-http/self-hosted-private-app/&quot;&gt;private self-hosted application&lt;/a&gt;. When  &lt;strong&gt;Allow clientless access&lt;/strong&gt; is turned on, users who pass your Access application policies will see a tile in their App Launcher pointing to the prefixed URL. Users must have &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/remote-browser-isolation/setup/clientless-browser-isolation/&quot;&gt;remote browser permissions&lt;/a&gt; to open the link.&lt;/p&gt;</description><pubDate>Tue, 17 Feb 2026 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Access - Policies for bookmark applications</title><link>https://developers.cloudflare.com/changelog/post/2026-02-17-policies-for-bookmarks/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-17-policies-for-bookmarks/</guid><description>&lt;p&gt;You can now assign &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/policies/&quot;&gt;Access policies&lt;/a&gt; to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/applications/bookmarks/&quot;&gt;bookmark applications&lt;/a&gt;. This lets you control which users see a bookmark in the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/access-settings/app-launcher/&quot;&gt;App Launcher&lt;/a&gt; based on identity, device posture, and other policy rules.&lt;/p&gt;
&lt;p&gt;Previously, bookmark applications were visible to all users in your organization. With policy support, you can now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tailor the App Launcher to each user&lt;/strong&gt; — Users only see the applications they have access to, reducing clutter and preventing accidental clicks on irrelevant resources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Restrict visibility of sensitive bookmarks&lt;/strong&gt; — Limit who can view bookmarks to internal tools or partner resources based on group membership, identity provider, or device posture.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bookmarks support all &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/policies/&quot;&gt;Access policy configurations&lt;/a&gt; except purpose justification, temporary authentication, and application isolation. If no policy is assigned, the bookmark remains visible to all users (maintaining backwards compatibility).&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/applications/bookmarks/&quot;&gt;Add bookmarks&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 17 Feb 2026 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Agents, Workers - Agents SDK v0.5.0: Protocol message control, retry utilities, data parts, and @cloudflare/ai-chat v0.1.0</title><link>https://developers.cloudflare.com/changelog/post/2026-02-17-agents-sdk-v050/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-17-agents-sdk-v050/</guid><description>&lt;p&gt;The latest release of the &lt;a href=&quot;https://github.com/cloudflare/agents&quot; target=&quot;_blank&quot;&gt;Agents SDK&lt;/a&gt; adds built-in retry utilities, per-connection protocol message control, and a fully rewritten &lt;code&gt;@cloudflare/ai-chat&lt;/code&gt; with data parts, tool approval persistence, and zero breaking changes.&lt;/p&gt;
&lt;h4&gt;Retry utilities&lt;/h4&gt;
&lt;p&gt;A new &lt;code&gt;this.retry()&lt;/code&gt; method lets you retry any async operation with exponential backoff and jitter. You can pass an optional &lt;code&gt;shouldRetry&lt;/code&gt; predicate to bail early on non-retryable errors.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onRequest&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;const&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;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;retry&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;callUnreliableService&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;maxAttempts&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4&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;shouldRetry&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;err&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instanceof&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PermanentError&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;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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;json&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;;&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onRequest&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&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;const&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;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;retry&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;callUnreliableService&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;maxAttempts&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4&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;shouldRetry&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;err&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;err&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instanceof&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PermanentError&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;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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;json&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;;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Retry options are also available per-task on &lt;code&gt;queue()&lt;/code&gt;, &lt;code&gt;schedule()&lt;/code&gt;, &lt;code&gt;scheduleEvery()&lt;/code&gt;, and &lt;code&gt;addMcpServer()&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Per-task retry configuration, persisted in SQLite alongside the task&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;schedule&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;Date&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;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60_000&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;&quot;sendReport&quot;&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; userId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;abc&quot;&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;/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;retry&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; maxAttempts&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;5&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;/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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Class-level retry defaults&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;static&lt;/span&gt;&lt;span&gt; options &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;retry&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; maxAttempts&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;// Per-task retry configuration, persisted in SQLite alongside the task&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;schedule&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Date&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;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60_000&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;sendReport&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; userId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;abc&quot;&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;retry&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; maxAttempts&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;5&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Class-level retry defaults&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;static&lt;/span&gt;&lt;span&gt; options &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;retry&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; maxAttempts&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&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;/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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Retry options are validated eagerly at enqueue/schedule time, and invalid values throw immediately. Internal retries have also been added for workflow operations (&lt;code&gt;terminateWorkflow&lt;/code&gt;, &lt;code&gt;pauseWorkflow&lt;/code&gt;, and others) with Durable Object-aware error detection.&lt;/p&gt;
&lt;h4&gt;Per-connection protocol message control&lt;/h4&gt;
&lt;p&gt;Agents automatically send JSON text frames (identity, state, MCP server lists) to every WebSocket connection. You can now suppress these per-connection for clients that cannot handle them — binary-only devices, MQTT clients, or lightweight embedded systems.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;shouldSendProtocolMessages&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;connection&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ctx&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;// Suppress protocol messages for MQTT clients&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;subprotocol&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Sec-WebSocket-Protocol&quot;&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;subprotocol&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;mqtt&quot;&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;shouldSendProtocolMessages&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;connection&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Connection&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ConnectionContext&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;// Suppress protocol messages for MQTT clients&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;subprotocol&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Sec-WebSocket-Protocol&quot;&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;subprotocol&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;mqtt&quot;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Connections with protocol messages disabled still fully participate in RPC and regular messaging. Use &lt;code&gt;isConnectionProtocolEnabled(connection)&lt;/code&gt; to check a connection&apos;s status at any time. The flag persists across Durable Object hibernation.&lt;/p&gt;
&lt;p&gt;See &lt;a href=&quot;https://developers.cloudflare.com/agents/api-reference/protocol-messages/&quot;&gt;Protocol messages&lt;/a&gt; for full documentation.&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;@cloudflare/ai-chat&lt;/code&gt; v0.1.0&lt;/h4&gt;
&lt;p&gt;The first stable release of &lt;code&gt;@cloudflare/ai-chat&lt;/code&gt; ships alongside this release with a major refactor of &lt;code&gt;AIChatAgent&lt;/code&gt; internals — new &lt;code&gt;ResumableStream&lt;/code&gt; class, WebSocket &lt;code&gt;ChatTransport&lt;/code&gt;, and simplified SSE parsing — with zero breaking changes. Existing code using &lt;code&gt;AIChatAgent&lt;/code&gt; and &lt;code&gt;useAgentChat&lt;/code&gt; works as-is.&lt;/p&gt;
&lt;p&gt;Key new features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Data parts&lt;/strong&gt; — Attach typed JSON blobs (&lt;code&gt;data-*&lt;/code&gt;) to messages alongside text. Supports reconciliation (type+id updates in-place), append, and transient parts (ephemeral via &lt;code&gt;onData&lt;/code&gt; callback). See &lt;a href=&quot;https://developers.cloudflare.com/agents/api-reference/chat-agents/#data-parts&quot;&gt;Data parts&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tool approval persistence&lt;/strong&gt; — The &lt;code&gt;needsApproval&lt;/code&gt; approval UI now survives page refresh and DO hibernation. The streaming message is persisted to SQLite when a tool enters &lt;code&gt;approval-requested&lt;/code&gt; state.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;maxPersistedMessages&lt;/code&gt;&lt;/strong&gt; — Cap SQLite message storage with automatic oldest-message deletion.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;body&lt;/code&gt; option on &lt;code&gt;useAgentChat&lt;/code&gt;&lt;/strong&gt; — Send custom data with every request (static or dynamic).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Incremental persistence&lt;/strong&gt; — Hash-based cache to skip redundant SQL writes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Row size guard&lt;/strong&gt; — Automatic two-pass compaction when messages approach the SQLite 2 MB limit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;autoContinueAfterToolResult&lt;/code&gt; defaults to &lt;code&gt;true&lt;/code&gt;&lt;/strong&gt; — Client-side tool results and tool approvals now automatically trigger a server continuation, matching server-executed tool behavior. Set &lt;code&gt;autoContinueAfterToolResult: false&lt;/code&gt; in &lt;code&gt;useAgentChat&lt;/code&gt; to restore the previous behavior.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notable bug fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Resolved stream resumption race conditions&lt;/li&gt;
&lt;li&gt;Resolved an issue where &lt;code&gt;setMessages&lt;/code&gt; functional updater sent empty arrays&lt;/li&gt;
&lt;li&gt;Resolved an issue where client tool schemas were lost after DO hibernation&lt;/li&gt;
&lt;li&gt;Resolved &lt;code&gt;InvalidPromptError&lt;/code&gt; after tool approval (&lt;code&gt;approval.id&lt;/code&gt; was dropped)&lt;/li&gt;
&lt;li&gt;Resolved an issue where message metadata was not propagated on broadcast/resume paths&lt;/li&gt;
&lt;li&gt;Resolved an issue where &lt;code&gt;clearAll()&lt;/code&gt; did not clear in-memory chunk buffers&lt;/li&gt;
&lt;li&gt;Resolved an issue where &lt;code&gt;reasoning-delta&lt;/code&gt; silently dropped data when &lt;code&gt;reasoning-start&lt;/code&gt; was missed during stream resumption&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Synchronous queue and schedule getters&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;getQueue()&lt;/code&gt;, &lt;code&gt;getQueues()&lt;/code&gt;, &lt;code&gt;getSchedule()&lt;/code&gt;, &lt;code&gt;dequeue()&lt;/code&gt;, &lt;code&gt;dequeueAll()&lt;/code&gt;, and &lt;code&gt;dequeueAllByCallback()&lt;/code&gt; were unnecessarily &lt;code&gt;async&lt;/code&gt; despite only performing synchronous SQL operations. They now return values directly instead of wrapping them in Promises. This is backward compatible — existing code using &lt;code&gt;await&lt;/code&gt; on these methods will continue to work.&lt;/p&gt;
&lt;h4&gt;Other improvements&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fix TypeScript &quot;excessively deep&quot; error&lt;/strong&gt; — A depth counter on &lt;code&gt;CanSerialize&lt;/code&gt; and &lt;code&gt;IsSerializableParam&lt;/code&gt; types bails out to &lt;code&gt;true&lt;/code&gt; after 10 levels of recursion, preventing the &quot;Type instantiation is excessively deep&quot; error with deeply nested types like AI SDK &lt;code&gt;CoreMessage[]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;POST SSE keepalive&lt;/strong&gt; — The POST SSE handler now sends &lt;code&gt;event: ping&lt;/code&gt; every 30 seconds to keep the connection alive, matching the existing GET SSE handler behavior. This prevents POST response streams from being silently dropped by proxies during long-running tool calls.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Widened peer dependency ranges&lt;/strong&gt; — Peer dependency ranges across packages have been widened to prevent cascading major bumps during 0.x minor releases. &lt;code&gt;@cloudflare/ai-chat&lt;/code&gt; and &lt;code&gt;@cloudflare/codemode&lt;/code&gt; are now marked as optional peer dependencies.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Upgrade&lt;/h4&gt;
&lt;p&gt;To update to the latest version:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agents@latest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@cloudflare/ai-chat@latest&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;</description><pubDate>Tue, 17 Feb 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>Cloudflare One, Cloudflare WAN, Cloudflare Network Firewall, Network Flow - Cloudflare One Product Name Updates</title><link>https://developers.cloudflare.com/changelog/post/2026-02-17-product-name-updates/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-17-product-name-updates/</guid><description>&lt;p&gt;We are updating naming related to some of our Networking products to better clarify their place in the Zero Trust and Secure Access Service Edge (SASE) journey.&lt;/p&gt;
&lt;p&gt;We are retiring some older brand names in favor of names that describe exactly what the products do within your network. We are doing this to help customers build better, clearer mental models for comprehensive SASE architecture delivered on Cloudflare.&lt;/p&gt;
&lt;h4&gt;What&apos;s changing&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Magic WAN&lt;/strong&gt; → &lt;strong&gt;Cloudflare WAN&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magic WAN IPsec&lt;/strong&gt; → &lt;strong&gt;Cloudflare IPsec&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magic WAN GRE&lt;/strong&gt; → &lt;strong&gt;Cloudflare GRE&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magic WAN Connector&lt;/strong&gt; → &lt;strong&gt;Cloudflare One Appliance&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magic Firewall&lt;/strong&gt; → &lt;strong&gt;Cloudflare Network Firewall&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magic Network Monitoring&lt;/strong&gt; → &lt;strong&gt;Network Flow&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magic Cloud Networking&lt;/strong&gt; → &lt;strong&gt;Cloudflare One Multi-cloud Networking&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;No action is required by you&lt;/strong&gt; — all functionality, existing configurations, and billing will remain exactly the same.&lt;/p&gt;
&lt;p&gt;For more information, visit the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/&quot;&gt;Cloudflare One documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 17 Feb 2026 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category><category>Cloudflare WAN</category><category>Cloudflare Network Firewall</category><category>Network Flow</category></item><item><title>Containers - Docker-in-Docker support added to Containers and Sandboxes</title><link>https://developers.cloudflare.com/changelog/post/2026-02-17-docker-in-docker/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-17-docker-in-docker/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/sandbox/&quot;&gt;Sandboxes&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/containers/&quot;&gt;Containers&lt;/a&gt; now support running Docker for &quot;Docker-in-Docker&quot; setups. This is particularly useful when your end users or &lt;a href=&quot;https://developers.cloudflare.com/agents&quot;&gt;agents&lt;/a&gt; want to run a full sandboxed development environment.&lt;/p&gt;
&lt;p&gt;This allows you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Develop containerized applications with your Sandbox&lt;/li&gt;
&lt;li&gt;Run isolated test environments for images&lt;/li&gt;
&lt;li&gt;Build container images as part of CI/CD workflows&lt;/li&gt;
&lt;li&gt;Deploy arbitrary images supplied at runtime within a container&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For &lt;a href=&quot;https://developers.cloudflare.com/sandbox/&quot;&gt;Sandbox SDK&lt;/a&gt; users, see the &lt;a href=&quot;https://developers.cloudflare.com/sandbox/guides/docker-in-docker/&quot;&gt;Docker-in-Docker guide&lt;/a&gt; for instructions on combining Docker with the SandboxSDK. For general Containers usage, see the &lt;a href=&quot;https://developers.cloudflare.com/containers/faq/#can-i-run-docker-inside-a-container-docker-in-docker&quot;&gt;Containers FAQ&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 17 Feb 2026 00:00:00 GMT</pubDate><product>Containers</product><category>Containers</category></item><item><title>Cloudflare Fundamentals - Content encoding support for Markdown for Agents and other improvements</title><link>https://developers.cloudflare.com/changelog/post/2026-02-16-markdown-for-agents-improvements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-16-markdown-for-agents-improvements/</guid><description>&lt;p&gt;When AI systems request pages from any website that uses Cloudflare and has &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/&quot;&gt;Markdown for Agents&lt;/a&gt; enabled, they can express the preference for &lt;code&gt;text/markdown&lt;/code&gt; in the request: our network will automatically and efficiently convert the HTML to markdown, when possible, on the fly.&lt;/p&gt;
&lt;p&gt;This release adds the following improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The origin response limit was raised from 1 MB to 2 MB (2,097,152 bytes).&lt;/li&gt;
&lt;li&gt;We no longer require the origin to send the &lt;code&gt;content-length&lt;/code&gt; header.&lt;/li&gt;
&lt;li&gt;We now support content encoded responses from the origin.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you haven’t enabled automatic Markdown conversion yet, visit the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/:zone/ai&quot; target=&quot;_blank&quot;&gt;AI Crawl Control&lt;/a&gt; section of the Cloudflare dashboard and enable &lt;strong&gt;Markdown for Agents&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Refer to our &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/&quot;&gt;developer documentation&lt;/a&gt; for more details.&lt;/p&gt;</description><pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>WAF - WAF Release - 2026-02-16</title><link>https://developers.cloudflare.com/changelog/post/2026-02-16-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-16-waf-release/</guid><description>&lt;p&gt;This week’s release introduces new detections for CVE-2025-68645 and CVE-2025-31125.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CVE-2025-68645: A Local File Inclusion (LFI) vulnerability in the Webmail Classic UI of Zimbra Collaboration Suite (ZCS) 10.0 and 10.1 allows unauthenticated remote attackers to craft requests to the &lt;code&gt;/h/rest&lt;/code&gt; endpoint, improperly influence internal dispatching, and include arbitrary files from the WebRoot directory.&lt;/li&gt;
&lt;li&gt;CVE-2025-31125: Vite, the JavaScript frontend tooling framework, exposes content of non-allowed files via &lt;code&gt;?inline&amp;#x26;import&lt;/code&gt; when its development server is network-exposed, enabling unauthorized attackers to read arbitrary files and potentially leak sensitive information.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;695d76ff756844d384cab548833761f7 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Zimbra - Local File Inclusion - CVE:CVE-2025-68645&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;38fff9f3deba46a2abc10a8f950ed8c8 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Vite - WASM Import Path Traversal - CVE:CVE-2025-31125&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Quick Editor devtools replaced with log viewer</title><link>https://developers.cloudflare.com/changelog/post/2026-02-12-quick-editor-dev-tools-deprecation/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-12-quick-editor-dev-tools-deprecation/</guid><description>&lt;p&gt;Cloudflare has deprecated the Workers Quick Editor dev tools inspector and replaced it with a lightweight log viewer.&lt;/p&gt;
&lt;p&gt;This aligns our logging with &lt;code&gt;wrangler tail&lt;/code&gt; and gives us the opportunity to focus our efforts on bringing benefits from the work we have invested in observability, which would not be possible otherwise.&lt;/p&gt;
&lt;p&gt;We have made improvements to this logging viewer based on your feedback such that you can log object and array types, and easily clear the list of logs. This does not include class instances. Limitations are documented in the &lt;a href=&quot;https://developers.cloudflare.com/workers/playground/&quot;&gt;Workers Playground docs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you do need to develop your Worker with a remote inspector, you can still do this using Wrangler locally. Cloning a project from your quick editor to your computer for local development can be done with the &lt;code&gt;wrangler init --from-dash&lt;/code&gt; command. For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/general/#init&quot;&gt;Wrangler commands&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - New Best Practices guide for Workers</title><link>https://developers.cloudflare.com/changelog/post/2026-02-15-workers-best-practices/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-15-workers-best-practices/</guid><description>&lt;p&gt;A new &lt;a href=&quot;https://developers.cloudflare.com/workers/best-practices/workers-best-practices/&quot;&gt;Workers Best Practices&lt;/a&gt; guide provides opinionated recommendations for building fast, reliable, observable, and secure Workers. The guide draws on production patterns, Cloudflare internal usage, and best practices observed from developers building on Workers.&lt;/p&gt;
&lt;p&gt;Key guidance includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Keep your compatibility date current and enable &lt;code&gt;nodejs_compat&lt;/code&gt;&lt;/strong&gt; — Ensure you have access to the latest runtime features and Node.js built-in modules.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-worker&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;src/index.ts&quot;&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;// Set this to today&apos;s date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;compatibility_date&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2026-04-03&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;compatibility_flags&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;nodejs_compat&quot;&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-worker&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;src/index.ts&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Set this to today&apos;s date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;compatibility_date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2026-04-03&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;compatibility_flags&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;span&gt; &lt;/span&gt;&lt;span&gt;&quot;nodejs_compat&quot;&lt;/span&gt;&lt;span&gt; &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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Generate binding types with &lt;code&gt;wrangler types&lt;/code&gt;&lt;/strong&gt; — Never hand-write your &lt;code&gt;Env&lt;/code&gt; interface. Let Wrangler generate it from your actual configuration to catch mismatches at compile time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stream request and response bodies&lt;/strong&gt; — Avoid buffering large payloads in memory. Use &lt;code&gt;TransformStream&lt;/code&gt; and &lt;code&gt;pipeTo&lt;/code&gt; to stay within the 128 MB memory limit and improve time-to-first-byte.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use bindings, not REST APIs&lt;/strong&gt; — Bindings to KV, R2, D1, Queues, and other Cloudflare services are direct, in-process references with no network hop and no authentication overhead.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Queues and Workflows for background work&lt;/strong&gt; — Move long-running or retriable tasks out of the critical request path. Use Queues for simple fan-out and buffering, and Workflows for multi-step durable processes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enable Workers Logs and Traces&lt;/strong&gt; — Configure observability before deploying to production so you have data when you need to debug.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Avoid global mutable state&lt;/strong&gt; — Workers reuse isolates across requests. Storing request-scoped data in module-level variables causes cross-request data leaks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Always &lt;code&gt;await&lt;/code&gt; or &lt;code&gt;waitUntil&lt;/code&gt; your Promises&lt;/strong&gt; — Floating promises cause silent bugs and dropped work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use Web Crypto for secure token generation&lt;/strong&gt; — Never use &lt;code&gt;Math.random()&lt;/code&gt; for security-sensitive operations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To learn more, refer to &lt;a href=&quot;https://developers.cloudflare.com/workers/best-practices/workers-best-practices/&quot;&gt;Workers Best Practices&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare Fundamentals, Access - Fine-grained permissions for Access policies and service tokens</title><link>https://developers.cloudflare.com/changelog/post/2026-02-13-access-policy-service-token-permissions/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-13-access-policy-service-token-permissions/</guid><description>&lt;p&gt;Fine-grained permissions for &lt;strong&gt;Access policies&lt;/strong&gt; and &lt;strong&gt;Access service tokens&lt;/strong&gt; are available. These new resource-scoped roles expand the existing RBAC model, enabling administrators to grant permissions scoped to individual resources.&lt;/p&gt;
&lt;h4&gt;New roles&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare Access policy admin&lt;/strong&gt;: Can edit a specific &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/policies/&quot;&gt;Access policy&lt;/a&gt; in an account.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare Access service token admin&lt;/strong&gt;: Can edit a specific &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/service-credentials/service-tokens/&quot;&gt;Access service token&lt;/a&gt; in an account.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These roles complement the existing resource-scoped roles for Access applications, identity providers, and infrastructure targets.&lt;/p&gt;
&lt;p&gt;For more information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/manage-members/roles/#resource-scoped-roles&quot;&gt;Resource-scoped roles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/manage-members/scope/&quot;&gt;Role scopes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;Resource-scoped roles is currently in beta.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;</description><pubDate>Fri, 13 Feb 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Access</category></item><item><title>Cloudflare Fundamentals, SDK - Cloudflare Python SDK v5.0.0-beta.1 now available</title><link>https://developers.cloudflare.com/changelog/post/2026-02-13-cloudflare-python-v500-beta1/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-13-cloudflare-python-v500-beta1/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; Please note that v5.0.0-beta.1 is in Beta and we are still testing it for stability.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Full Changelog: &lt;a href=&quot;https://github.com/cloudflare/cloudflare-python/compare/v4.3.1...v5.0.0-beta.1&quot; target=&quot;_blank&quot;&gt;v4.3.1...v5.0.0-beta.1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In this release, you&apos;ll see a large number of breaking changes. This is primarily due to a change in OpenAPI definitions,
which our libraries are based off of, and codegen updates that we rely on to read those OpenAPI definitions and produce
our SDK libraries. As the codegen is always evolving and improving, so are our code bases.&lt;/p&gt;
&lt;p&gt;There may be changes that are not captured in this changelog. Feel free to open an issue to report any inaccuracies, and we will make sure it gets into the changelog before the v5.0.0 release.&lt;/p&gt;
&lt;p&gt;Most of the breaking changes below are caused by improvements to the accuracy of the base OpenAPI schemas, which
sometimes translates to breaking changes in downstream clients that depend on those schemas.&lt;/p&gt;
&lt;p&gt;Please ensure you read through the list of changes below and the migration guide before moving to this version - this
will help you understand any down or upstream issues it may cause to your environments.&lt;/p&gt;
&lt;h4&gt;Breaking Changes&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;The following resources have breaking changes. See the &lt;a href=&quot;https://github.com/cloudflare/cloudflare-python/blob/main/docs/v5-migration-guide.md&quot; target=&quot;_blank&quot;&gt;v5 Migration Guide&lt;/a&gt; for detailed migration instructions.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;abusereports&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;acm.totaltls&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apigateway.configurations&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudforceone.threatevents&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;d1.database&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;intel.indicatorfeeds&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;logpush.edge&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;origintlsclientauth.hostnames&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;queues.consumers&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;radar.bgp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rulesets.rules&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;schemavalidation.schemas&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;snippets&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;zerotrust.dlp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;zerotrust.networks&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Features&lt;/h4&gt;
&lt;h4&gt;New API Resources&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;abusereports&lt;/code&gt; - Abuse report management&lt;/li&gt;
&lt;li&gt;&lt;code&gt;abusereports.mitigations&lt;/code&gt; - Abuse report mitigation actions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ai.tomarkdown&lt;/code&gt; - AI-powered markdown conversion&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aigateway.dynamicrouting&lt;/code&gt; - AI Gateway dynamic routing configuration&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aigateway.providerconfigs&lt;/code&gt; - AI Gateway provider configurations&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aisearch&lt;/code&gt; - AI-powered search functionality&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aisearch.instances&lt;/code&gt; - AI Search instance management&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aisearch.tokens&lt;/code&gt; - AI Search authentication tokens&lt;/li&gt;
&lt;li&gt;&lt;code&gt;alerting.silences&lt;/code&gt; - Alert silence management&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brandprotection.logomatches&lt;/code&gt; - Brand protection logo match detection&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brandprotection.logos&lt;/code&gt; - Brand protection logo management&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brandprotection.matches&lt;/code&gt; - Brand protection match results&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brandprotection.queries&lt;/code&gt; - Brand protection query management&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudforceone.binarystorage&lt;/code&gt; - CloudForce One binary storage&lt;/li&gt;
&lt;li&gt;&lt;code&gt;connectivity.directory&lt;/code&gt; - Connectivity directory services&lt;/li&gt;
&lt;li&gt;&lt;code&gt;d1.database&lt;/code&gt; - D1 database management&lt;/li&gt;
&lt;li&gt;&lt;code&gt;diagnostics.endpointhealthchecks&lt;/code&gt; - Endpoint health check diagnostics&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fraud&lt;/code&gt; - Fraud detection and prevention&lt;/li&gt;
&lt;li&gt;&lt;code&gt;iam.sso&lt;/code&gt; - IAM Single Sign-On configuration&lt;/li&gt;
&lt;li&gt;&lt;code&gt;loadbalancers.monitorgroups&lt;/code&gt; - Load balancer monitor groups&lt;/li&gt;
&lt;li&gt;&lt;code&gt;organizations&lt;/code&gt; - Organization management&lt;/li&gt;
&lt;li&gt;&lt;code&gt;organizations.organizationprofile&lt;/code&gt; - Organization profile settings&lt;/li&gt;
&lt;li&gt;&lt;code&gt;origintlsclientauth.hostnamecertificates&lt;/code&gt; - Origin TLS client auth hostname certificates&lt;/li&gt;
&lt;li&gt;&lt;code&gt;origintlsclientauth.hostnames&lt;/code&gt; - Origin TLS client auth hostnames&lt;/li&gt;
&lt;li&gt;&lt;code&gt;origintlsclientauth.zonecertificates&lt;/code&gt; - Origin TLS client auth zone certificates&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pipelines&lt;/code&gt; - Data pipeline management&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pipelines.sinks&lt;/code&gt; - Pipeline sink configurations&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pipelines.streams&lt;/code&gt; - Pipeline stream configurations&lt;/li&gt;
&lt;li&gt;&lt;code&gt;queues.subscriptions&lt;/code&gt; - Queue subscription management&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r2datacatalog&lt;/code&gt; - R2 Data Catalog integration&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r2datacatalog.credentials&lt;/code&gt; - R2 Data Catalog credentials&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r2datacatalog.maintenanceconfigs&lt;/code&gt; - R2 Data Catalog maintenance configurations&lt;/li&gt;
&lt;li&gt;&lt;code&gt;r2datacatalog.namespaces&lt;/code&gt; - R2 Data Catalog namespaces&lt;/li&gt;
&lt;li&gt;&lt;code&gt;radar.bots&lt;/code&gt; - Radar bot analytics&lt;/li&gt;
&lt;li&gt;&lt;code&gt;radar.ct&lt;/code&gt; - Radar certificate transparency data&lt;/li&gt;
&lt;li&gt;&lt;code&gt;radar.geolocations&lt;/code&gt; - Radar geolocation data&lt;/li&gt;
&lt;li&gt;&lt;code&gt;realtimekit.activesession&lt;/code&gt; - Real-time Kit active session management&lt;/li&gt;
&lt;li&gt;&lt;code&gt;realtimekit.analytics&lt;/code&gt; - Real-time Kit analytics&lt;/li&gt;
&lt;li&gt;&lt;code&gt;realtimekit.apps&lt;/code&gt; - Real-time Kit application management&lt;/li&gt;
&lt;li&gt;&lt;code&gt;realtimekit.livestreams&lt;/code&gt; - Real-time Kit live streaming&lt;/li&gt;
&lt;li&gt;&lt;code&gt;realtimekit.meetings&lt;/code&gt; - Real-time Kit meeting management&lt;/li&gt;
&lt;li&gt;&lt;code&gt;realtimekit.presets&lt;/code&gt; - Real-time Kit preset configurations&lt;/li&gt;
&lt;li&gt;&lt;code&gt;realtimekit.recordings&lt;/code&gt; - Real-time Kit recording management&lt;/li&gt;
&lt;li&gt;&lt;code&gt;realtimekit.sessions&lt;/code&gt; - Real-time Kit session management&lt;/li&gt;
&lt;li&gt;&lt;code&gt;realtimekit.webhooks&lt;/code&gt; - Real-time Kit webhook configurations&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tokenvalidation.configuration&lt;/code&gt; - Token validation configuration&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tokenvalidation.rules&lt;/code&gt; - Token validation rules&lt;/li&gt;
&lt;li&gt;&lt;code&gt;workers.beta&lt;/code&gt; - Workers beta features&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;New Endpoints (Existing Resources)&lt;/h4&gt;
&lt;h4&gt;&lt;code&gt;acm.totaltls&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;edit()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;update()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;code&gt;cloudforceone.threatevents&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;list()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;code&gt;contentscanning&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;create()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;update()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;code&gt;dns.records&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;scan_list()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scan_review()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scan_trigger()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;code&gt;intel.indicatorfeeds&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;create()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;list()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;code&gt;leakedcredentialchecks.detections&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;get()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;code&gt;queues.consumers&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;list()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;code&gt;radar.ai&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;summary()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;timeseries()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;timeseries_groups()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;code&gt;radar.bgp&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;changes()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;snapshot()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;code&gt;workers.subdomains&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;delete()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;&lt;code&gt;zerotrust.networks&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;create()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;edit()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;list()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;General Fixes and Improvements&lt;/h4&gt;
&lt;h4&gt;Type System &amp;#x26; Compatibility&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Type inference improvements&lt;/strong&gt;: Allow Pyright to properly infer TypedDict types within SequenceNotStr&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type completeness&lt;/strong&gt;: Add missing types to method arguments and response models&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pydantic compatibility&lt;/strong&gt;: Ensure compatibility with Pydantic versions prior to 2.8.0 when using additional fields&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Request/Response Handling&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multipart form data&lt;/strong&gt;: Correctly handle sending multipart/form-data requests with JSON data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Header handling&lt;/strong&gt;: Do not send headers with default values set to omit&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GET request headers&lt;/strong&gt;: Don&apos;t send Content-Type header on GET requests&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Response body model accuracy&lt;/strong&gt;: Broad improvements to the correctness of models&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Parsing &amp;#x26; Data Processing&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Discriminated unions&lt;/strong&gt;: Correctly handle nested discriminated unions in response parsing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extra field types&lt;/strong&gt;: Parse extra field types correctly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Empty metadata&lt;/strong&gt;: Ignore empty metadata fields during parsing&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Singularization rules&lt;/strong&gt;: Update resource name singularization rules for better consistency&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 13 Feb 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>SDK</category></item><item><title>Workers, Agents, Workers AI - Introducing GLM-4.7-Flash on Workers AI, @cloudflare/tanstack-ai, and workers-ai-provider v3.1.1</title><link>https://developers.cloudflare.com/changelog/post/2026-02-13-glm-47-flash-workers-ai/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-13-glm-47-flash-workers-ai/</guid><description>&lt;p&gt;We&apos;re excited to announce &lt;strong&gt;GLM-4.7-Flash&lt;/strong&gt; on Workers AI, a fast and efficient text generation model optimized for multilingual dialogue and instruction-following tasks, along with the brand-new &lt;a href=&quot;https://www.npmjs.com/package/@cloudflare/tanstack-ai&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;@cloudflare/tanstack-ai&lt;/strong&gt;&lt;/a&gt; package and &lt;a href=&quot;https://www.npmjs.com/package/workers-ai-provider&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;workers-ai-provider v3.1.1&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can now run AI agents entirely on Cloudflare. With GLM-4.7-Flash&apos;s multi-turn tool calling support, plus full compatibility with TanStack AI and the Vercel AI SDK, you have everything you need to build agentic applications that run completely at the edge.&lt;/p&gt;
&lt;h4&gt;GLM-4.7-Flash — Multilingual Text Generation Model&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/glm-4.7-flash/&quot;&gt;&lt;code&gt;@cf/zai-org/glm-4.7-flash&lt;/code&gt;&lt;/a&gt; is a multilingual model with a 131,072 token context window, making it ideal for long-form content generation, complex reasoning tasks, and multilingual applications.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Features and Use Cases:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multi-turn Tool Calling for Agents&lt;/strong&gt;: Build AI agents that can call functions and tools across multiple conversation turns&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multilingual Support&lt;/strong&gt;: Built to handle content generation in multiple languages effectively&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Large Context Window&lt;/strong&gt;: 131,072 tokens for long-form writing, complex reasoning, and processing long documents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fast Inference&lt;/strong&gt;: Optimized for low-latency responses in chatbots and virtual assistants&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Instruction Following&lt;/strong&gt;: Excellent at following complex instructions for code generation and structured tasks&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use GLM-4.7-Flash through the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/configuration/bindings/&quot;&gt;Workers AI binding&lt;/a&gt; (&lt;code&gt;env.AI.run()&lt;/code&gt;), the REST API at &lt;code&gt;/run&lt;/code&gt; or &lt;code&gt;/v1/chat/completions&lt;/code&gt;, &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot;&gt;AI Gateway&lt;/a&gt;, or via &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/configuration/ai-sdk/&quot;&gt;workers-ai-provider&lt;/a&gt; for the Vercel AI SDK.&lt;/p&gt;
&lt;p&gt;Pricing is available on the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/glm-4.7-flash/&quot;&gt;model page&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/platform/pricing/&quot;&gt;pricing page&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;@cloudflare/tanstack-ai v0.1.1 — TanStack AI adapters for Workers AI and AI Gateway&lt;/h4&gt;
&lt;p&gt;We&apos;ve released &lt;code&gt;@cloudflare/tanstack-ai&lt;/code&gt;, a new package that brings Workers AI and AI Gateway support to &lt;a href=&quot;https://tanstack.com/ai&quot; target=&quot;_blank&quot;&gt;TanStack AI&lt;/a&gt;. This provides a framework-agnostic alternative for developers who prefer TanStack&apos;s approach to building AI applications.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Workers AI adapters&lt;/strong&gt; support four configuration modes — plain binding (&lt;code&gt;env.AI&lt;/code&gt;), plain REST, AI Gateway binding (&lt;code&gt;env.AI.gateway(id)&lt;/code&gt;), and AI Gateway REST — across all capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Chat&lt;/strong&gt; (&lt;code&gt;createWorkersAiChat&lt;/code&gt;) — Streaming chat completions with tool calling, structured output, and reasoning text streaming.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Image generation&lt;/strong&gt; (&lt;code&gt;createWorkersAiImage&lt;/code&gt;) — Text-to-image models.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transcription&lt;/strong&gt; (&lt;code&gt;createWorkersAiTranscription&lt;/code&gt;) — Speech-to-text.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Text-to-speech&lt;/strong&gt; (&lt;code&gt;createWorkersAiTts&lt;/code&gt;) — Audio generation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Summarization&lt;/strong&gt; (&lt;code&gt;createWorkersAiSummarize&lt;/code&gt;) — Text summarization.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;AI Gateway adapters&lt;/strong&gt; route requests from third-party providers — OpenAI, Anthropic, Gemini, Grok, and OpenRouter — through Cloudflare AI Gateway for caching, rate limiting, and unified billing.&lt;/p&gt;
&lt;p&gt;To get started:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@cloudflare/tanstack-ai&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@tanstack/ai&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;h4&gt;workers-ai-provider v3.1.1 — transcription, speech, reranking, and reliability&lt;/h4&gt;
&lt;p&gt;The Workers AI provider for the &lt;a href=&quot;https://ai-sdk.dev&quot; target=&quot;_blank&quot;&gt;Vercel AI SDK&lt;/a&gt; now supports three new capabilities beyond chat and image generation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Transcription&lt;/strong&gt; (&lt;code&gt;provider.transcription(model)&lt;/code&gt;) — Speech-to-text with automatic handling of model-specific input formats across binding and REST paths.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Text-to-speech&lt;/strong&gt; (&lt;code&gt;provider.speech(model)&lt;/code&gt;) — Audio generation with support for voice and speed options.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reranking&lt;/strong&gt; (&lt;code&gt;provider.reranking(model)&lt;/code&gt;) — Document reranking for RAG pipelines and search result ordering.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createWorkersAI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;workers-ai-provider&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &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;experimental_transcribe&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;experimental_generateSpeech&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;rerank&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; from &lt;/span&gt;&lt;span&gt;&quot;ai&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workersai&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createWorkersAI&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; binding&lt;/span&gt;&lt;span&gt;:&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;AI&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;transcript&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;experimental_transcribe&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;model&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workersai&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;transcription&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;@cf/openai/whisper-large-v3-turbo&quot;&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;audio&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;audioData&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;mediaType&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;audio/wav&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;speech&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;experimental_generateSpeech&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;model&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workersai&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;speech&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;@cf/deepgram/aura-1&quot;&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;text&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Hello world&quot;&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;voice&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;asteria&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ranked&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rerank&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;model&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workersai&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;reranking&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;@cf/baai/bge-reranker-base&quot;&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;query&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;What is machine learning?&quot;&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;documents&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;ML is a branch of AI.&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;The weather is sunny.&quot;&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;/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;This release also includes a comprehensive reliability overhaul (v3.0.5):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fixed streaming&lt;/strong&gt; — Responses now stream token-by-token instead of buffering all chunks, using a proper &lt;code&gt;TransformStream&lt;/code&gt; pipeline with backpressure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fixed tool calling&lt;/strong&gt; — Resolved issues with tool call ID sanitization, conversation history preservation, and a heuristic that silently fell back to non-streaming mode when tools were defined.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Premature stream termination detection&lt;/strong&gt; — Streams that end unexpectedly now report &lt;code&gt;finishReason: &quot;error&quot;&lt;/code&gt; instead of silently reporting &lt;code&gt;&quot;stop&quot;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI Search support&lt;/strong&gt; — Added &lt;code&gt;createAISearch&lt;/code&gt; as the canonical export (renamed from AutoRAG). &lt;code&gt;createAutoRAG&lt;/code&gt; still works with a deprecation warning.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To upgrade:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workers-ai-provider@latest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ai&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;h4&gt;Resources&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/@cloudflare/tanstack-ai&quot; target=&quot;_blank&quot;&gt;@cloudflare/tanstack-ai on npm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/workers-ai-provider&quot; target=&quot;_blank&quot;&gt;workers-ai-provider on npm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/ai&quot; target=&quot;_blank&quot;&gt;GitHub repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 13 Feb 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category><category>Agents</category><category>Workers AI</category></item><item><title>Workers VPC - Origin CA certificate support for Workers VPC</title><link>https://developers.cloudflare.com/changelog/post/2026-02-13-origin-ca-certificate-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-13-origin-ca-certificate-support/</guid><description>&lt;p&gt;Workers VPC now supports &lt;a href=&quot;https://developers.cloudflare.com/ssl/origin-configuration/origin-ca/&quot;&gt;Cloudflare Origin CA certificates&lt;/a&gt; when connecting to your private services over HTTPS. Previously, Workers VPC only trusted certificates issued by publicly trusted certificate authorities (for example, Let&apos;s Encrypt, DigiCert).&lt;/p&gt;
&lt;p&gt;With this change, you can use free Cloudflare Origin CA certificates on your origin servers within private networks and connect to them from Workers VPC using the &lt;code&gt;https&lt;/code&gt; scheme. This is useful for encrypting traffic between the tunnel and your service without needing to provision certificates from a public CA.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/workers-vpc/configuration/vpc-services/#supported-tls-certificates&quot;&gt;Supported TLS certificates&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 13 Feb 2026 00:00:00 GMT</pubDate><product>Workers VPC</product><category>Workers VPC</category></item><item><title>Cloudflare WAN - Anycast IPs displayed on the dashboard</title><link>https://developers.cloudflare.com/changelog/post/2026-02-12-anycast-ips-on-dashboard/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-12-anycast-ips-on-dashboard/</guid><description>&lt;p&gt;Cloudflare WAN now displays your Anycast IP addresses directly in the dashboard when you configure IPsec or GRE tunnels.&lt;/p&gt;
&lt;p&gt;Previously, customers received their Anycast IPs during onboarding or had to retrieve them with an API call. The dashboard now pre-loads these addresses, reducing setup friction and preventing configuration errors.&lt;/p&gt;
&lt;p&gt;No action is required. All Cloudflare WAN customers can see their Anycast IPs in the tunnel configuration form automatically.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/configuration/manually/how-to/configure-tunnel-endpoints/&quot;&gt;Configure tunnel endpoints&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 12 Feb 2026 00:00:00 GMT</pubDate><product>Cloudflare WAN</product><category>Cloudflare WAN</category></item><item><title>Cloudflare Fundamentals - Introducing Markdown for Agents</title><link>https://developers.cloudflare.com/changelog/post/2026-02-12-markdown-for-agents/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-12-markdown-for-agents/</guid><description>&lt;p&gt;Cloudflare&apos;s network now supports real-time content conversion at the source, for enabled zones using &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Content_negotiation&quot; target=&quot;_blank&quot;&gt;content negotiation&lt;/a&gt; headers. When AI systems request pages from any website that uses Cloudflare and has Markdown for Agents enabled, they can express the preference for &lt;code&gt;text/markdown&lt;/code&gt; in the request: our network will automatically and efficiently convert the HTML to markdown, when possible, on the fly.&lt;/p&gt;
&lt;p&gt;Here is a curl example with the &lt;code&gt;Accept&lt;/code&gt; negotiation header requesting this page from our developer documentation:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Accept: text/markdown&quot;&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;The response to this request is now formatted in markdown:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;http&quot;&gt;&lt;code class=&quot;language-http&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HTTP/2 &lt;/span&gt;&lt;span&gt;200&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Wed, 11 Feb 2026 11:44:48 GMT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;content-type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;text/markdown; charset=utf-8&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;content-length&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2899&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;vary&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accept&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;x-markdown-tokens&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;725&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;content-signal&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ai-train=yes, search=yes, ai-input=yes&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Markdown for Agents · Cloudflare Agents docs&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;## What is Markdown for Agents&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;Markdown has quickly become the lingua franca for agents and AI systems&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;as a whole. The format’s explicit structure makes it ideal for AI processing,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ultimately resulting in better results while minimizing token waste.&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;Refer to our &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/&quot;&gt;developer documentation&lt;/a&gt; and our &lt;a href=&quot;https://blog.cloudflare.com/markdown-for-agents/&quot; target=&quot;_blank&quot;&gt;blog announcement&lt;/a&gt; for more details.&lt;/p&gt;</description><pubDate>Thu, 12 Feb 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Radar - Content Type Dimension for AI Bots in Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2026-02-12-radar-ai-bots-content-type/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-12-radar-ai-bots-content-type/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; now includes content type insights for AI bot and crawler traffic. The new &lt;code&gt;content_type&lt;/code&gt; dimension and filter shows the distribution of content types returned to AI crawlers, grouped by MIME type category.&lt;/p&gt;
&lt;p&gt;The content type dimension and filter are available via the following API endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/ai/subresources/bots/methods/summary_v2/&quot;&gt;&lt;code&gt;/ai/bots/summary/content_type&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/ai/subresources/bots/methods/timeseries_groups/&quot;&gt;&lt;code&gt;/ai/bots/timeseries_groups/content_type&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Content type categories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HTML&lt;/strong&gt; - Web pages (&lt;code&gt;text/html&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Images&lt;/strong&gt; - All image formats (&lt;code&gt;image/*&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSON&lt;/strong&gt; - JSON data and API responses (&lt;code&gt;application/json&lt;/code&gt;, &lt;code&gt;*+json&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JavaScript&lt;/strong&gt; - Scripts (&lt;code&gt;application/javascript&lt;/code&gt;, &lt;code&gt;text/javascript&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSS&lt;/strong&gt; - Stylesheets (&lt;code&gt;text/css&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plain Text&lt;/strong&gt; - Unformatted text (&lt;code&gt;text/plain&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fonts&lt;/strong&gt; - Web fonts (&lt;code&gt;font/*&lt;/code&gt;, &lt;code&gt;application/font-*&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;XML&lt;/strong&gt; - XML documents and feeds (&lt;code&gt;text/xml&lt;/code&gt;, &lt;code&gt;application/xml&lt;/code&gt;, &lt;code&gt;application/rss+xml&lt;/code&gt;, &lt;code&gt;application/atom+xml&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;YAML&lt;/strong&gt; - Configuration files (&lt;code&gt;text/yaml&lt;/code&gt;, &lt;code&gt;application/yaml&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Video&lt;/strong&gt; - Video content and streaming (&lt;code&gt;video/*&lt;/code&gt;, &lt;code&gt;application/ogg&lt;/code&gt;, &lt;code&gt;*mpegurl&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audio&lt;/strong&gt; - Audio content (&lt;code&gt;audio/*&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Markdown&lt;/strong&gt; - Markdown documents (&lt;code&gt;text/markdown&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documents&lt;/strong&gt; - PDFs, Office documents, ePub, CSV (&lt;code&gt;application/pdf&lt;/code&gt;, &lt;code&gt;application/msword&lt;/code&gt;, &lt;code&gt;text/csv&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Binary&lt;/strong&gt; - Executables, archives, WebAssembly (&lt;code&gt;application/octet-stream&lt;/code&gt;, &lt;code&gt;application/zip&lt;/code&gt;, &lt;code&gt;application/wasm&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Serialization&lt;/strong&gt; - Binary API formats (&lt;code&gt;application/protobuf&lt;/code&gt;, &lt;code&gt;application/grpc&lt;/code&gt;, &lt;code&gt;application/msgpack&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Other&lt;/strong&gt; - All other content types&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additionally, individual &lt;a href=&quot;https://radar.cloudflare.com/bots/directory/gptbot&quot; target=&quot;_blank&quot;&gt;bot information pages&lt;/a&gt; now display content type distribution for AI crawlers that exist in both the Verified Bots and AI Bots datasets.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ai-bots-content-type.B7xP9p4S_Z2oYyEM.webp&quot; alt=&quot;Screenshot of the Content Type Distribution chart on the AI Insights page&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://radar.cloudflare.com/ai-insights#content-type&quot; target=&quot;_blank&quot;&gt;AI Insights page&lt;/a&gt; to explore the data.&lt;/p&gt;</description><pubDate>Thu, 12 Feb 2026 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>Security Center - Enhanced Logo Matching for Brand Protection</title><link>https://developers.cloudflare.com/changelog/post/2026-02-12-brand-protection-logo-matching-percentage-selector/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-12-brand-protection-logo-matching-percentage-selector/</guid><description>&lt;p&gt;We have significantly upgraded our Logo Matching capabilities within Brand Protection. While previously limited to approximately 100% matches, users can now detect a wider range of brand assets through a redesigned matching model and UI.&lt;/p&gt;
&lt;h4&gt;What&apos;s new&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Configurable match thresholds&lt;/strong&gt;: Users can set a minimum match score (starting at 75%) when creating a logo query to capture subtle variations or high-quality impersonations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visual match scores&lt;/strong&gt;: Allow users to see the exact percentage of the match directly in the results table, highlighted with color-coded lozenges to indicate severity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Direct logo previews&lt;/strong&gt;: Available in the Cloudflare dashboard — similar to string matches — to verify infringements at a glance.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Key benefits&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Expose sophisticated impersonators&lt;/strong&gt; who use slightly altered logos to bypass basic detection filters.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Faster triage&lt;/strong&gt; of the most relevant threats immediately using visual indicators, reducing the time spent manually reviewing matches.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ready to protect your visual identity? Learn more in our &lt;a href=&quot;https://developers.cloudflare.com/security-center/brand-protection/&quot;&gt;Brand Protection documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 12 Feb 2026 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>Cloudflare Fundamentals, Terraform - Terraform v5.17.0 now available</title><link>https://developers.cloudflare.com/changelog/post/2026-02-12-terraform-v5170-provider/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-12-terraform-v5170-provider/</guid><description>&lt;p&gt;In January 2025, we announced the launch of the new Terraform v5 Provider. We
greatly appreciate the proactive engagement and valuable feedback from the
Cloudflare community following the v5 release. In response, we have established
a consistent and rapid &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5774&quot; target=&quot;_blank&quot;&gt;2-3 week cadence&lt;/a&gt; for releasing targeted improvements,
demonstrating our commitment to stability and reliability.&lt;/p&gt;
&lt;p&gt;With the help of the community, we have a growing number of resources that we
have marked as &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6237&quot; target=&quot;_blank&quot;&gt;stable&lt;/a&gt;, with that list continuing to grow with every release.
The most used &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6237&quot; target=&quot;_blank&quot;&gt;resources&lt;/a&gt; are on track to be stable by the end of March 2026,
when we will also be releasing a new migration tool to help you migrate from v4
to v5 with ease.&lt;/p&gt;
&lt;p&gt;This release brings new capabilities for AI Search, enhanced Workers Script
placement controls, and numerous bug fixes based on community feedback. We also
begun laying foundational work for improving the v4 to v5 migration process.
Stay tuned for more details as we approach the March 2026 release timeline.&lt;/p&gt;
&lt;p&gt;Thank you for continuing to raise issues. They make our provider stronger and
help us build products that reflect your needs.&lt;/p&gt;
&lt;h4&gt;Features&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ai_search_instance:&lt;/strong&gt; add data source for querying AI Search instances&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ai_search_token:&lt;/strong&gt; add data source for querying AI Search tokens&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;account:&lt;/strong&gt; add support for tenant unit management with new &lt;code&gt;unit&lt;/code&gt; field&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;account:&lt;/strong&gt; add automatic mapping from &lt;code&gt;managed_by.parent_org_id&lt;/code&gt; to &lt;code&gt;unit.id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;authenticated_origin_pulls_certificate:&lt;/strong&gt; add data source for querying authenticated origin pull certificates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;authenticated_origin_pulls_hostname_certificate:&lt;/strong&gt; add data source for querying hostname-specific authenticated origin pull certificates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;authenticated_origin_pulls_settings:&lt;/strong&gt; add data source for querying authenticated origin pull settings&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_kv:&lt;/strong&gt; add &lt;code&gt;value&lt;/code&gt; field to data source to retrieve KV values directly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_script:&lt;/strong&gt; add &lt;code&gt;script&lt;/code&gt; field to data source to retrieve script content&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_script:&lt;/strong&gt; add support for &lt;code&gt;simple&lt;/code&gt; rate limit binding&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_script:&lt;/strong&gt; add support for targeted placement mode with &lt;code&gt;placement.target&lt;/code&gt; array for specifying placement targets (region, hostname, host)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_script:&lt;/strong&gt; add &lt;code&gt;placement_mode&lt;/code&gt; and &lt;code&gt;placement_status&lt;/code&gt; computed fields&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_dex_test:&lt;/strong&gt; add data source with filter support for finding specific tests&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_dlp_predefined_profile:&lt;/strong&gt; add &lt;code&gt;enabled_entries&lt;/code&gt; field for flexible entry management&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Bug Fixes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;account:&lt;/strong&gt; map &lt;code&gt;managed_by.parent_org_id&lt;/code&gt; to &lt;code&gt;unit.id&lt;/code&gt; in unmarshall and add acceptance tests&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;authenticated_origin_pulls_certificate:&lt;/strong&gt; add certificate normalization to prevent drift&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;authenticated_origin_pulls:&lt;/strong&gt; handle array response and implement full lifecycle&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;authenticated_origin_pulls_hostname_certificate:&lt;/strong&gt; fix resource and tests&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudforce_one_request_message:&lt;/strong&gt; use correct &lt;code&gt;request_id&lt;/code&gt; field instead of &lt;code&gt;id&lt;/code&gt; in API calls&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dns_zone_transfers_incoming:&lt;/strong&gt; use correct &lt;code&gt;zone_id&lt;/code&gt; field instead of &lt;code&gt;id&lt;/code&gt; in API calls&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dns_zone_transfers_outgoing:&lt;/strong&gt; use correct &lt;code&gt;zone_id&lt;/code&gt; field instead of &lt;code&gt;id&lt;/code&gt; in API calls&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;email_routing_settings:&lt;/strong&gt; use correct &lt;code&gt;zone_id&lt;/code&gt; field instead of &lt;code&gt;id&lt;/code&gt; in API calls&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;hyperdrive_config:&lt;/strong&gt; add proper handling for write-only fields to prevent state drift&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;hyperdrive_config:&lt;/strong&gt; add normalization for empty &lt;code&gt;mtls&lt;/code&gt; objects to prevent unnecessary diffs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;magic_network_monitoring_rule:&lt;/strong&gt; use correct &lt;code&gt;account_id&lt;/code&gt; field instead of &lt;code&gt;id&lt;/code&gt; in API calls&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mtls_certificates:&lt;/strong&gt; fix resource and test&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pages_project:&lt;/strong&gt; revert build_config to computed optional&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;stream_key:&lt;/strong&gt; use correct &lt;code&gt;account_id&lt;/code&gt; field instead of &lt;code&gt;id&lt;/code&gt; in API calls&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;total_tls:&lt;/strong&gt; use upsert pattern for singleton zone setting&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;waiting_room_rules:&lt;/strong&gt; use correct &lt;code&gt;waiting_room_id&lt;/code&gt; field instead of &lt;code&gt;id&lt;/code&gt; in API calls&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_script:&lt;/strong&gt; add support for placement mode/status&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_access_application:&lt;/strong&gt; update v4 version on migration tests&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_device_posture_rule:&lt;/strong&gt; update tests to match API&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_dlp_integration_entry:&lt;/strong&gt; use correct &lt;code&gt;entry_id&lt;/code&gt; field instead of &lt;code&gt;id&lt;/code&gt; in API calls&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_dlp_predefined_entry:&lt;/strong&gt; use correct &lt;code&gt;entry_id&lt;/code&gt; field instead of &lt;code&gt;id&lt;/code&gt; in API calls&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_organization:&lt;/strong&gt; fix plan issues&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Chores&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;add state upgraders to 95+ resources to lay the foundation for replacing Grit
(still under active development)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;certificate_pack:&lt;/strong&gt; add state migration handler for SDKv2 to Framework conversion&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;custom_hostname_fallback_origin:&lt;/strong&gt; add comprehensive lifecycle test and migration support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dns_record:&lt;/strong&gt; add state migration handler for SDKv2 to Framework conversion&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;leaked_credential_check:&lt;/strong&gt; add import functionality and tests&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;load_balancer_pool:&lt;/strong&gt; add state migration handler with detection for v4 vs v5 format&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pages_project:&lt;/strong&gt; add state migration handlers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;tiered_cache:&lt;/strong&gt; add state migration handlers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_dlp_predefined_profile:&lt;/strong&gt; deprecate &lt;code&gt;entries&lt;/code&gt; field in favor of &lt;code&gt;enabled_entries&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;For more information&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;Terraform Provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/terraform/&quot;&gt;Documentation on using Terraform with Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6237&quot; target=&quot;_blank&quot;&gt;List of stabilized resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 12 Feb 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Terraform</category></item><item><title>Cloudflare One, Cloudflare WAN - Post-quantum encryption support for Cloudflare One Appliance</title><link>https://developers.cloudflare.com/changelog/post/2026-02-11-appliance-post-quantum-encryption/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-11-appliance-post-quantum-encryption/</guid><description>&lt;p&gt;Cloudflare One Appliance version 2026.2.0 adds &lt;a href=&quot;https://developers.cloudflare.com/ssl/post-quantum-cryptography/&quot;&gt;post-quantum encryption&lt;/a&gt; support using hybrid ML-KEM (Module-Lattice-Based Key-Encapsulation Mechanism).&lt;/p&gt;
&lt;p&gt;The appliance now uses TLS 1.3 with hybrid ML-KEM for its connection to the Cloudflare edge. During the TLS handshake, the appliance and the edge share a symmetric secret over the TLS connection and inject it into the ESP layer of IPsec. This protects IPsec data plane traffic against harvest-now, decrypt-later attacks.&lt;/p&gt;
&lt;p&gt;This upgrade deploys automatically to all appliances during their configured interrupt windows with no manual action required.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/configuration/appliance/&quot;&gt;Cloudflare One Appliance&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 11 Feb 2026 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category><category>Cloudflare WAN</category></item><item><title>Workers - Workers are no longer limited to 1000 subrequests</title><link>https://developers.cloudflare.com/changelog/post/2026-02-11-subrequests-limit/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-11-subrequests-limit/</guid><description>&lt;p&gt;Workers no longer have a limit of 1000 subrequests per invocation, allowing you to make more &lt;code&gt;fetch()&lt;/code&gt; calls or requests
to Cloudflare services on every incoming request. This is especially important for long-running Workers requests, such as
open websockets on &lt;a href=&quot;https://developers.cloudflare.com/durable-objects&quot;&gt;Durable Objects&lt;/a&gt; or long-running &lt;a href=&quot;https://developers.cloudflare.com/workflows&quot;&gt;Workflows&lt;/a&gt;, as these could often exceed this limit and error.&lt;/p&gt;
&lt;p&gt;By default, Workers on paid plans are now limited to 10,000 subrequests per invocation, but this
limit can be increased up to 10 million by setting the new &lt;code&gt;subrequests&lt;/code&gt; limit in your Wrangler configuration file.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;limits&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;subrequests&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;50000&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;limits&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;subrequests&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;50_000&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Workers on the free plan remain limited to 50 external subrequests and 1000 subrequests to Cloudflare services per invocation.&lt;/p&gt;
&lt;p&gt;To protect against runaway code or unexpected costs, you can also set a lower limit for both subrequests and CPU usage.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;limits&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;subrequests&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&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;&quot;&lt;/span&gt;&lt;span&gt;cpu_ms&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;limits&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;subrequests&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cpu_ms&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1_000&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/configuration/#limits&quot;&gt;Wrangler configuration documentation for limits&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/limits/#subrequests&quot;&gt;subrequest limits&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 11 Feb 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Improved React Server Components support in the Cloudflare Vite plugin</title><link>https://developers.cloudflare.com/changelog/post/2026-02-11-vite-plugin-child-environments/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-11-vite-plugin-child-environments/</guid><description>&lt;p&gt;The Cloudflare Vite plugin now integrates seamlessly &lt;a href=&quot;https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-rsc&quot; target=&quot;_blank&quot;&gt;@vitejs/plugin-rsc&lt;/a&gt;, the official Vite plugin for &lt;a href=&quot;https://react.dev/reference/rsc/server-components&quot; target=&quot;_blank&quot;&gt;React Server Components&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A &lt;code&gt;childEnvironments&lt;/code&gt; option has been added to the plugin config to enable using multiple environments within a single Worker.
The parent environment can then import modules from a child environment in order to access a separate module graph.
For a typical RSC use case, the plugin might be configured as in the following example:&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&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;plugins&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;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;&lt;/span&gt;&lt;span&gt;viteEnvironment&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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;rsc&quot;&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;childEnvironments&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;ssr&quot;&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;/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;]&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;/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;&lt;code&gt;@vitejs/plugin-rsc&lt;/code&gt; provides the lower level functionality that frameworks, such as &lt;a href=&quot;https://reactrouter.com/how-to/react-server-components&quot; target=&quot;_blank&quot;&gt;React Router&lt;/a&gt;, build upon.
The GitHub repository includes a &lt;a href=&quot;https://github.com/vitejs/vite-plugin-react/tree/f066114c3e6bf18f5209ff3d3ef6bf1ab46d3866/packages/plugin-rsc/examples/starter-cf-single&quot; target=&quot;_blank&quot;&gt;basic Cloudflare example&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 11 Feb 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>WAF - WAF Release - 2026-02-10</title><link>https://developers.cloudflare.com/changelog/post/2026-02-10-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-10-waf-release/</guid><description>&lt;p&gt;This week’s release changes the rule action from BLOCK to Disabled for Anomaly:Header:User-Agent - Fake Google Bot.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ce11be543594412bb4bb92516aa0bef8 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Anomaly:Header:User-Agent - Fake Google Bot&lt;/td&gt;&lt;td&gt;Enabled&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;We are changing the action for this rule from BLOCK to Disabled&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Tue, 10 Feb 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Agents, Workers - Agents SDK v0.4.0: Readonly connections, MCP security improvements, x402 v2 migration, and custom MCP OAuth providers</title><link>https://developers.cloudflare.com/changelog/post/2026-02-09-agents-sdk-v040/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-09-agents-sdk-v040/</guid><description>&lt;p&gt;The latest release of the &lt;a href=&quot;https://github.com/cloudflare/agents&quot; target=&quot;_blank&quot;&gt;Agents SDK&lt;/a&gt; brings readonly connections, MCP protocol and security improvements, x402 payment protocol v2 migration, and the ability to customize OAuth for MCP server connections.&lt;/p&gt;
&lt;h4&gt;Readonly connections&lt;/h4&gt;
&lt;p&gt;Agents can now restrict WebSocket clients to read-only access, preventing them from modifying agent state. This is useful for dashboards, spectator views, or any scenario where clients should observe but not mutate.&lt;/p&gt;
&lt;p&gt;New hooks: &lt;code&gt;shouldConnectionBeReadonly&lt;/code&gt;, &lt;code&gt;setConnectionReadonly&lt;/code&gt;, &lt;code&gt;isConnectionReadonly&lt;/code&gt;. Readonly connections block both client-side &lt;code&gt;setState()&lt;/code&gt; and mutating &lt;code&gt;@callable()&lt;/code&gt; methods, and the readonly flag survives hibernation.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;shouldConnectionBeReadonly&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;connection&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;// Make spectators readonly&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;connection&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;includes&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;spectator&quot;&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;shouldConnectionBeReadonly&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;connection&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;// Make spectators readonly&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;connection&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;includes&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;spectator&quot;&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;/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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;Custom MCP OAuth providers&lt;/h4&gt;
&lt;p&gt;The new &lt;code&gt;createMcpOAuthProvider&lt;/code&gt; method on the &lt;code&gt;Agent&lt;/code&gt; class allows subclasses to override the default OAuth provider used when connecting to MCP servers. This enables custom authentication strategies such as pre-registered client credentials or mTLS, beyond the built-in dynamic client registration.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;createMcpOAuthProvider&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;callbackUrl&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyCustomOAuthProvider&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;callbackUrl&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;createMcpOAuthProvider&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;callbackUrl&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;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AgentMcpOAuthProvider&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyCustomOAuthProvider&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;callbackUrl&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;/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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;MCP SDK upgrade to 1.26.0&lt;/h4&gt;
&lt;p&gt;Upgraded the MCP SDK to 1.26.0 to prevent cross-client response leakage. Stateless MCP Servers should now create a new &lt;code&gt;McpServer&lt;/code&gt; instance per request instead of sharing a single instance. A guard is added in this version of the MCP SDK which will prevent connection to a Server instance that has already been connected to a transport. Developers will need to modify their code if they declare their &lt;code&gt;McpServer&lt;/code&gt; instance as a global variable.&lt;/p&gt;
&lt;h4&gt;MCP OAuth callback URL security fix&lt;/h4&gt;
&lt;p&gt;Added &lt;code&gt;callbackPath&lt;/code&gt; option to &lt;code&gt;addMcpServer&lt;/code&gt; to prevent instance name leakage in MCP OAuth callback URLs. When &lt;code&gt;sendIdentityOnConnect&lt;/code&gt; is &lt;code&gt;false&lt;/code&gt;, &lt;code&gt;callbackPath&lt;/code&gt; is now required — the default callback URL would expose the instance name, undermining the security intent. Also fixes callback request detection to match via the &lt;code&gt;state&lt;/code&gt; parameter instead of a loose &lt;code&gt;/callback&lt;/code&gt; URL substring check, enabling custom callback paths.&lt;/p&gt;
&lt;h4&gt;Deprecate &lt;code&gt;onStateUpdate&lt;/code&gt; in favor of &lt;code&gt;onStateChanged&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;onStateChanged&lt;/code&gt; is a drop-in rename of &lt;code&gt;onStateUpdate&lt;/code&gt; (same signature, same behavior). &lt;code&gt;onStateUpdate&lt;/code&gt; still works but emits a one-time console warning per class. &lt;code&gt;validateStateChange&lt;/code&gt; rejections now propagate a &lt;code&gt;CF_AGENT_STATE_ERROR&lt;/code&gt; message back to the client.&lt;/p&gt;
&lt;h4&gt;x402 v2 migration&lt;/h4&gt;
&lt;p&gt;Migrated the x402 MCP payment integration from the legacy &lt;code&gt;x402&lt;/code&gt; package to &lt;code&gt;@x402/core&lt;/code&gt; and &lt;code&gt;@x402/evm&lt;/code&gt; v2.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Breaking changes for x402 users:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Peer dependencies changed: replace &lt;code&gt;x402&lt;/code&gt; with &lt;code&gt;@x402/core&lt;/code&gt; and &lt;code&gt;@x402/evm&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PaymentRequirements&lt;/code&gt; type now uses v2 fields (e.g. &lt;code&gt;amount&lt;/code&gt; instead of &lt;code&gt;maxAmountRequired&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;X402ClientConfig.account&lt;/code&gt; type changed from &lt;code&gt;viem.Account&lt;/code&gt; to &lt;code&gt;ClientEvmSigner&lt;/code&gt; (structurally compatible with &lt;code&gt;privateKeyToAccount()&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&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;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;uninstall&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;x402&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@x402/core&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@x402/evm&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;Network identifiers now accept both legacy names and CAIP-2 format:&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;// Legacy name (auto-converted)&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;network&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;base-sepolia&quot;&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// CAIP-2 format (preferred)&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;network&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;eip155:84532&quot;&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;&lt;strong&gt;Other x402 changes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;X402ClientConfig.network&lt;/code&gt; is now optional — the client auto-selects from available payment requirements&lt;/li&gt;
&lt;li&gt;Server-side lazy initialization: facilitator connection is deferred until the first paid tool invocation&lt;/li&gt;
&lt;li&gt;Payment tokens support both v2 (&lt;code&gt;PAYMENT-SIGNATURE&lt;/code&gt;) and v1 (&lt;code&gt;X-PAYMENT&lt;/code&gt;) HTTP headers&lt;/li&gt;
&lt;li&gt;Added &lt;code&gt;normalizeNetwork&lt;/code&gt; export for converting legacy network names to CAIP-2 format&lt;/li&gt;
&lt;li&gt;Re-exports &lt;code&gt;PaymentRequirements&lt;/code&gt;, &lt;code&gt;PaymentRequired&lt;/code&gt;, &lt;code&gt;Network&lt;/code&gt;, &lt;code&gt;FacilitatorConfig&lt;/code&gt;, and &lt;code&gt;ClientEvmSigner&lt;/code&gt; from &lt;code&gt;agents/x402&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Other improvements&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Fix &lt;code&gt;useAgent&lt;/code&gt; and &lt;code&gt;AgentClient&lt;/code&gt; crashing when using &lt;code&gt;basePath&lt;/code&gt; routing&lt;/li&gt;
&lt;li&gt;CORS handling delegated to partyserver&apos;s native support (simpler, more reliable)&lt;/li&gt;
&lt;li&gt;Client-side &lt;code&gt;onStateUpdateError&lt;/code&gt; callback for handling rejected state updates&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Upgrade&lt;/h4&gt;
&lt;p&gt;To update to the latest version:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agents@latest&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;</description><pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>Agents - Interactive browser terminals in Sandboxes</title><link>https://developers.cloudflare.com/changelog/post/2026-02-09-pty-terminal-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-09-pty-terminal-support/</guid><description>&lt;p&gt;The &lt;a href=&quot;https://github.com/cloudflare/sandbox-sdk&quot; target=&quot;_blank&quot;&gt;Sandbox SDK&lt;/a&gt; now supports PTY (pseudo-terminal) passthrough, enabling browser-based terminal UIs to connect to sandbox shells via WebSocket.&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;sandbox.terminal(request)&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;The new &lt;code&gt;terminal()&lt;/code&gt; method proxies a WebSocket upgrade to the container&apos;s PTY endpoint, with output buffering for replay on reconnect.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Worker: proxy WebSocket to container terminal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;terminal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; cols&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;80&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; rows&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;24&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;// Worker: proxy WebSocket to container terminal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;terminal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; cols&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;80&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; rows&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;24&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;Multiple terminals per sandbox&lt;/h4&gt;
&lt;p&gt;Each session can have its own terminal with an isolated working directory and environment, so users can run separate shells side-by-side in the same container.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Multiple isolated terminals in the same sandbox&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getSession&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;dev&quot;&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;terminal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;)&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;// Multiple isolated terminals in the same sandbox&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getSession&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;dev&quot;&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;terminal&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;)&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;xterm.js addon&lt;/h4&gt;
&lt;p&gt;The new &lt;code&gt;@cloudflare/sandbox/xterm&lt;/code&gt; export provides a &lt;code&gt;SandboxAddon&lt;/code&gt; for &lt;a href=&quot;https://xtermjs.org/&quot; target=&quot;_blank&quot;&gt;xterm.js&lt;/a&gt; with automatic reconnection (exponential backoff + jitter), buffered output replay, and resize forwarding.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SandboxAddon&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/sandbox/xterm&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;addon&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SandboxAddon&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;getWebSocketUrl&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;span&gt;sandboxId&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;origin&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;span&gt; &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;span&gt;${&lt;/span&gt;&lt;span&gt;origin&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/ws/terminal?id=&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sandboxId&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;onStateChange&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;updateUI&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;state&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;terminal&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;loadAddon&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;addon&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;addon&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;connect&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; sandboxId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-sandbox&quot;&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SandboxAddon&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/sandbox/xterm&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;addon&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SandboxAddon&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;getWebSocketUrl&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;span&gt;sandboxId&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;origin&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;span&gt; &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;span&gt;${&lt;/span&gt;&lt;span&gt;origin&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/ws/terminal?id=&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;sandboxId&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;onStateChange&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;updateUI&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;state&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;terminal&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;loadAddon&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;addon&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;addon&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;connect&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; sandboxId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-sandbox&quot;&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;Upgrade&lt;/h4&gt;
&lt;p&gt;To update to the latest version:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@cloudflare/sandbox@latest&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;</description><pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category></item><item><title>AI Crawl Control - Analytics enhancements</title><link>https://developers.cloudflare.com/changelog/post/2026-02-09-analytics-enhancements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-09-analytics-enhancements/</guid><description>&lt;p&gt;AI Crawl Control metrics have been enhanced with new views, improved filtering, and better data visualization.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ai-crawl-control-path-patterns.0xT_lucE_1Png6i.webp&quot; alt=&quot;AI Crawl Control path patterns&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;strong&gt;Path pattern grouping&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In the &lt;strong&gt;Metrics&lt;/strong&gt; tab &gt; &lt;strong&gt;Most popular paths&lt;/strong&gt; table, use the new &lt;strong&gt;Patterns&lt;/strong&gt; tab that groups requests by URI pattern (&lt;code&gt;/blog/*&lt;/code&gt;, &lt;code&gt;/api/v1/*&lt;/code&gt;, &lt;code&gt;/docs/*&lt;/code&gt;) to identify which site areas crawlers target most. Refer to the screenshot above.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Enhanced referral analytics&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Destination patterns show which site areas receive AI-driven referral traffic.&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Metrics&lt;/strong&gt; tab, a new &lt;strong&gt;Referrals over time&lt;/strong&gt; chart shows trends by operator or source.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Data transfer metrics&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In the &lt;strong&gt;Metrics&lt;/strong&gt; tab &gt; &lt;strong&gt;Allowed requests over time&lt;/strong&gt; chart, toggle &lt;strong&gt;Bytes&lt;/strong&gt; to show bandwidth consumption.&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Crawlers&lt;/strong&gt; tab, a new &lt;strong&gt;Bytes Transferred&lt;/strong&gt; column shows bandwidth per crawler.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Image exports&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Export charts and tables as images for reports and presentations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learn more about &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/analyze-ai-traffic/&quot;&gt;analyzing AI traffic&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate><product>AI Crawl Control</product><category>AI Crawl Control</category></item><item><title>AI Search - AI Search now with more granular controls over indexing</title><link>https://developers.cloudflare.com/changelog/post/2026-02-09-indexing-improvements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-09-indexing-improvements/</guid><description>&lt;p&gt;Get your content updates into &lt;a href=&quot;https://developers.cloudflare.com/ai-search/&quot;&gt;AI Search&lt;/a&gt; faster and avoid a full rescan when you do not need it.&lt;/p&gt;
&lt;h4&gt;Reindex individual files without a full sync&lt;/h4&gt;
&lt;p&gt;Updated a file or need to retry one that errored? When you know exactly which file changed, you can now &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/indexing/#controls&quot;&gt;reindex it directly&lt;/a&gt; instead of rescanning your entire data source.&lt;/p&gt;
&lt;p&gt;Go to &lt;strong&gt;Overview&lt;/strong&gt; &gt; &lt;strong&gt;Indexed Items&lt;/strong&gt; and select the sync icon next to any file to reindex it immediately.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/individual-file-indexing.CQgoIj85_ZIBUBg.webp&quot; alt=&quot;Sync individual files from Indexed Items&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;Crawl only the sitemap you need&lt;/h4&gt;
&lt;p&gt;By default, AI Search crawls all sitemaps listed in your &lt;code&gt;robots.txt&lt;/code&gt;, up to the &lt;a href=&quot;https://developers.cloudflare.com/ai-search/platform/limits-pricing/#limits&quot;&gt;maximum files per index limit&lt;/a&gt;. If your site has multiple sitemaps but you only want to index a specific set, you can now &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/data-source/website/#sitemap&quot;&gt;specify a single sitemap URL&lt;/a&gt; to limit what the crawler visits.&lt;/p&gt;
&lt;p&gt;For example, if your &lt;code&gt;robots.txt&lt;/code&gt; lists both &lt;code&gt;blog-sitemap.xml&lt;/code&gt; and &lt;code&gt;docs-sitemap.xml&lt;/code&gt;, you can specify just &lt;code&gt;https://example.com/docs-sitemap.xml&lt;/code&gt; to index only your documentation.&lt;/p&gt;
&lt;p&gt;Configure your selection anytime in &lt;strong&gt;Settings&lt;/strong&gt; &gt; &lt;strong&gt;Parsing options&lt;/strong&gt; &gt; &lt;strong&gt;Specific sitemaps&lt;/strong&gt;, then trigger a sync to apply the changes.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/specify-sitemap.pLCkwmJ-_2vbphB.webp&quot; alt=&quot;Specify a sitemap in Parsinh options&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Learn more about &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/indexing/#controls&quot;&gt;indexing controls&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/data-source/website/#sitemap&quot;&gt;website crawling configuration&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>Log Explorer - Tabs and pivots</title><link>https://developers.cloudflare.com/changelog/post/2026-02-09-tabs-and-pivots/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-09-tabs-and-pivots/</guid><description>&lt;p&gt;Log Explorer now supports multiple concurrent queries with the new Tabs feature. Work with multiple queries simultaneously and pivot between datasets to investigate malicious activity more effectively.&lt;/p&gt;
&lt;h4&gt;Key capabilities&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multiple tabs:&lt;/strong&gt; Open and switch between multiple query tabs to compare results across different datasets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quick filtering:&lt;/strong&gt; Select the filter button from query results to add a value as a filter to your current query.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pivot to new tab:&lt;/strong&gt; Use Cmd + click on the filter button to start a new query tab with that filter applied.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preserved progress:&lt;/strong&gt; Your query progress is preserved on each tab if you navigate away and return.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/log-explorer/&quot;&gt;Log Explorer documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate><product>Log Explorer</product><category>Log Explorer</category></item><item><title>R2 SQL - R2 SQL now supports approximate aggregation functions</title><link>https://developers.cloudflare.com/changelog/post/2026-02-09-approximate-aggregation-functions/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-09-approximate-aggregation-functions/</guid><description>&lt;p&gt;R2 SQL now supports five approximate aggregation functions for fast analysis of large datasets. These functions trade minor precision for improved performance on high-cardinality data.&lt;/p&gt;
&lt;h4&gt;New functions&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;APPROX_PERCENTILE_CONT(column, percentile)&lt;/code&gt; — Returns the approximate value at a given percentile (0.0 to 1.0). Works on integer and decimal columns.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;APPROX_PERCENTILE_CONT_WITH_WEIGHT(column, weight, percentile)&lt;/code&gt; — Weighted percentile calculation where each row contributes proportionally to its weight column value.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;APPROX_MEDIAN(column)&lt;/code&gt; — Returns the approximate median. Equivalent to &lt;code&gt;APPROX_PERCENTILE_CONT(column, 0.5)&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;APPROX_DISTINCT(column)&lt;/code&gt; — Returns the approximate number of distinct values. Works on any column type.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;APPROX_TOP_K(column, k)&lt;/code&gt; — Returns the &lt;code&gt;k&lt;/code&gt; most frequent values with their counts as a JSON array.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All functions support &lt;code&gt;WHERE&lt;/code&gt; filters. All except &lt;code&gt;APPROX_TOP_K&lt;/code&gt; support &lt;code&gt;GROUP BY&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Examples&lt;/h4&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;-- Percentile analysis on revenue data&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;approx_percentile_cont&lt;/span&gt;&lt;span&gt;(total_amount, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;25&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;approx_percentile_cont&lt;/span&gt;&lt;span&gt;(total_amount, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;5&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;approx_percentile_cont&lt;/span&gt;&lt;span&gt;(total_amount, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;75&lt;/span&gt;&lt;span&gt;)&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; my_namespace.sales_data&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;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;-- Median per department&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; department, approx_median(total_amount)&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; my_namespace.sales_data&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;GROUP BY&lt;/span&gt;&lt;span&gt; department&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;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;-- Approximate distinct customers by region&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; region, approx_distinct(customer_id)&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; my_namespace.sales_data&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;GROUP BY&lt;/span&gt;&lt;span&gt; region&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;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;-- Top 5 most frequent departments&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; approx_top_k(department, &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt;)&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; my_namespace.sales_data&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;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;-- Combine approximate and standard aggregations&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;COUNT&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;AVG&lt;/span&gt;&lt;span&gt;(total_amount),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;approx_percentile_cont&lt;/span&gt;&lt;span&gt;(total_amount, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;5&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;approx_distinct(customer_id)&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; my_namespace.sales_data&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; region &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;North&apos;&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 syntax and additional examples, refer to the &lt;a href=&quot;https://developers.cloudflare.com/r2-sql/sql-reference/&quot;&gt;SQL reference&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate><product>R2 SQL</product><category>R2 SQL</category></item><item><title>Workers - Visualize data, share links, and create exports with the new Workers Observability dashboard</title><link>https://developers.cloudflare.com/changelog/post/2026-02-06-observability-ui-refresh/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-06-observability-ui-refresh/</guid><description>&lt;p&gt;The &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers-and-pages/observability/&quot; target=&quot;_blank&quot;&gt;Workers Observability dashboard&lt;/a&gt; has some major updates to make it easier to debug your application&apos;s issues and share findings with your team.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2026-01-22-events_share_obs_wobs.BvzY4TNV_eC7Hu.webp&quot; alt=&quot;Workers Observability dashboard showing events view with event details and share options&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;You can now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Create visualizations&lt;/strong&gt; — Build charts from your Worker data directly in a Worker&apos;s Observability tab&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Export data as JSON or CSV&lt;/strong&gt; — Download logs and traces for offline analysis or to share with teammates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Share events and traces&lt;/strong&gt; — Generate direct URLs to specific events, invocations, and traces that open standalone pages with full context&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customize table columns&lt;/strong&gt; — Improved field picker to add, remove, and reorder columns in the events table&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expandable event details&lt;/strong&gt; — Expand events inline to view full details without leaving the table&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keyboard shortcuts&lt;/strong&gt; — Navigate the dashboard with hotkey support&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2026-01-22-vis_qb_wobs.Bb5eVQNT_at6AT.webp&quot; alt=&quot;Workers Observability dashboard showing a P99 CPU time visualization grouped by outcome&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;These updates are now live in the Cloudflare dashboard, both in a Worker&apos;s Observability tab and in the account-level Observability dashboard for a unified experience. To get started, go to &lt;strong&gt;Workers &amp;#x26; Pages&lt;/strong&gt; &gt; select your Worker &gt; &lt;strong&gt;Observability&lt;/strong&gt;.&lt;/p&gt;</description><pubDate>Fri, 06 Feb 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>AI Crawl Control - New reference documentation</title><link>https://developers.cloudflare.com/changelog/post/2026-02-09-reference-documentation/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-09-reference-documentation/</guid><description>&lt;p&gt;New reference documentation is now available for AI Crawl Control:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/reference/graphql-api/&quot;&gt;GraphQL API reference&lt;/a&gt;&lt;/strong&gt; — Query examples for crawler requests, top paths, referral traffic, and data transfer. Includes key filters for detection IDs, user agents, and referrer domains.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/reference/bots/&quot;&gt;Bot reference&lt;/a&gt;&lt;/strong&gt; — Detection IDs and user agents for major AI crawlers from OpenAI, Anthropic, Google, Meta, and others.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/reference/worker-templates/&quot;&gt;Worker templates&lt;/a&gt;&lt;/strong&gt; — Deploy the x402 Payment-Gated Proxy to monetize crawler access or charge bots while letting humans through free.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 04 Feb 2026 00:00:00 GMT</pubDate><product>AI Crawl Control</product><category>AI Crawl Control</category></item><item><title>Queues - Cloudflare Queues now available on Workers Free plan</title><link>https://developers.cloudflare.com/changelog/post/2026-02-04-queues-free-plan/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-04-queues-free-plan/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/queues&quot;&gt;Cloudflare Queues&lt;/a&gt; is now part of the Workers free plan, offering guaranteed message delivery across up to &lt;strong&gt;10,000 queues&lt;/strong&gt; to either &lt;a href=&quot;https://developers.cloudflare.com/workers&quot;&gt;Cloudflare Workers&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/queues/configuration/pull-consumers&quot;&gt;HTTP pull consumers&lt;/a&gt;. Every Cloudflare account now includes &lt;strong&gt;10,000 operations per day&lt;/strong&gt; across reads, writes, and deletes. For more details on how each operation is defined, refer to &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/pricing/#queues&quot; target=&quot;_blank&quot;&gt;Queues pricing&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;All features of the existing Queues functionality are available on the free plan, including unlimited &lt;a href=&quot;https://developers.cloudflare.com/queues/event-subscriptions/&quot;&gt;event subscriptions&lt;/a&gt;. Note that the maximum retention period on the free tier, however, is 24 hours rather than 14 days.&lt;/p&gt;
&lt;p&gt;If you are new to Cloudflare Queues, follow &lt;a href=&quot;https://developers.cloudflare.com/queues/get-started/&quot; target=&quot;_blank&quot;&gt;this guide&lt;/a&gt; or try one of our &lt;a href=&quot;https://developers.cloudflare.com/queues/tutorials/&quot;&gt;tutorials&lt;/a&gt; to get started.&lt;/p&gt;</description><pubDate>Wed, 04 Feb 2026 00:00:00 GMT</pubDate><product>Queues</product><category>Queues</category></item><item><title>Workflows, Workers - Visualize your Workflows in the Cloudflare dashboard</title><link>https://developers.cloudflare.com/changelog/post/2026-02-03-workflows-visualizer/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-03-workflows-visualizer/</guid><description>&lt;p&gt;Cloudflare Workflows now automatically generates visual diagrams from your code&lt;/p&gt;
&lt;p&gt;Your Workflow is parsed to provide a visual map of the Workflow structure, allowing you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand how steps connect and execute&lt;/li&gt;
&lt;li&gt;Visualize loops and nested logic&lt;/li&gt;
&lt;li&gt;Follow branching paths for conditional logic&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2026-02-03-workflows-diagram.BfQAnWL3_Z203oFd.webp&quot; alt=&quot;Example diagram&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;You can collapse loops and nested logic to see the high-level flow, or expand them to see every step.&lt;/p&gt;
&lt;p&gt;Workflow diagrams are available in beta for all JavaScript and TypeScript Workflows. Find your Workflows in the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers/workflows&quot; target=&quot;_blank&quot;&gt;Cloudflare dashboard&lt;/a&gt; to see their diagrams.&lt;/p&gt;</description><pubDate>Wed, 04 Feb 2026 00:00:00 GMT</pubDate><product>Workflows</product><category>Workflows</category><category>Workers</category></item><item><title>Agents, Workflows - Agents SDK v0.3.7: Workflows integration, synchronous state, and scheduleEvery()</title><link>https://developers.cloudflare.com/changelog/post/2026-02-03-agents-workflows-integration/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-03-agents-workflows-integration/</guid><description>&lt;p&gt;The latest release of the &lt;a href=&quot;https://github.com/cloudflare/agents&quot; target=&quot;_blank&quot;&gt;Agents SDK&lt;/a&gt; brings first-class support for &lt;a href=&quot;https://developers.cloudflare.com/workflows/&quot;&gt;Cloudflare Workflows&lt;/a&gt;, synchronous state management, and new scheduling capabilities.&lt;/p&gt;
&lt;h4&gt;Cloudflare Workflows integration&lt;/h4&gt;
&lt;p&gt;Agents excel at real-time communication and state management. Workflows excel at durable execution. Together, they enable powerful patterns where Agents handle WebSocket connections while Workflows handle long-running tasks, retries, and human-in-the-loop flows.&lt;/p&gt;
&lt;p&gt;Use the new &lt;code&gt;AgentWorkflow&lt;/code&gt; class to define workflows with typed access to your Agent:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AgentWorkflow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;agents/workflows&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ProcessingWorkflow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AgentWorkflow&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&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;step&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;// Call Agent methods via RPC&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;updateStatus&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;payload&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;taskId&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;processing&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Non-durable: progress reporting to clients&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;reportProgress&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; step&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;process&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; percent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.5&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;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;broadcastToClients&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;update&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; taskId&lt;/span&gt;&lt;span&gt;:&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;payload&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;taskId&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Durable via step: idempotent, won&apos;t repeat on retry&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;step&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mergeAgentState&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; taskProgress&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.5&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;step&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;process&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;processData&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;payload&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;;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;step&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;reportComplete&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AgentWorkflow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;agents/workflows&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import type &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AgentWorkflowEvent&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AgentWorkflowStep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;agents/workflows&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ProcessingWorkflow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AgentWorkflow&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TaskParams&lt;/span&gt;&lt;span&gt;&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&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;AgentWorkflowEvent&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;TaskParams&lt;/span&gt;&lt;span&gt;&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;step&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AgentWorkflowStep&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;// Call Agent methods via RPC&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;updateStatus&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;payload&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;taskId&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;processing&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Non-durable: progress reporting to clients&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;reportProgress&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; step&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;process&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; percent&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.5&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;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;broadcastToClients&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;update&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; taskId&lt;/span&gt;&lt;span&gt;:&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;payload&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;taskId&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Durable via step: idempotent, won&apos;t repeat on retry&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;step&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mergeAgentState&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; taskProgress&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0.5&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;step&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;process&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;processData&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;payload&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;;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;step&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;reportComplete&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Start workflows from your Agent with &lt;code&gt;runWorkflow()&lt;/code&gt; and handle lifecycle events:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startTask&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;taskId&lt;/span&gt;&lt;span&gt;,&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; &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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instanceId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;runWorkflow&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;PROCESSING_WORKFLOW&quot;&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;taskId&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;data&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instanceId&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;/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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onWorkflowProgress&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;workflowName&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instanceId&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;progress&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;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;broadcast&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;progress&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;progress&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;/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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onWorkflowComplete&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;workflowName&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instanceId&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Workflow &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;instanceId&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; completed`&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;/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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onWorkflowError&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;workflowName&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instanceId&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;error&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Workflow &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;instanceId&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; failed:`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;error&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;startTask&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;taskId&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;span&gt; &lt;/span&gt;&lt;span&gt;data&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;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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instanceId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;runWorkflow&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;PROCESSING_WORKFLOW&quot;&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;taskId&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;data&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instanceId&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;/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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onWorkflowProgress&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;workflowName&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;instanceId&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;progress&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;unknown&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;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;broadcast&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;progress&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;progress&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;/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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onWorkflowComplete&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;workflowName&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;instanceId&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;result&lt;/span&gt;&lt;span&gt;?:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;unknown&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Workflow &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;instanceId&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; completed`&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;/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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onWorkflowError&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;workflowName&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;instanceId&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;error&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;unknown&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Workflow &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;instanceId&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; failed:`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;error&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;/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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Key workflow methods on your Agent:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;runWorkflow(workflowName, params, options?)&lt;/code&gt; — Start a workflow with optional metadata&lt;/li&gt;
&lt;li&gt;&lt;code&gt;getWorkflow(workflowId)&lt;/code&gt; / &lt;code&gt;getWorkflows(criteria?)&lt;/code&gt; — Query workflows with cursor-based pagination&lt;/li&gt;
&lt;li&gt;&lt;code&gt;approveWorkflow(workflowId)&lt;/code&gt; / &lt;code&gt;rejectWorkflow(workflowId)&lt;/code&gt; — Human-in-the-loop approval flows&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pauseWorkflow()&lt;/code&gt;, &lt;code&gt;resumeWorkflow()&lt;/code&gt;, &lt;code&gt;terminateWorkflow()&lt;/code&gt; — Workflow control&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Synchronous setState()&lt;/h4&gt;
&lt;p&gt;State updates are now synchronous with a new &lt;code&gt;validateStateChange()&lt;/code&gt; validation hook:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;validateStateChange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;oldState&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newState&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;// Return false to reject the change&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;newState&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;count&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;// Return modified state to transform&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&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;/span&gt;&lt;span&gt;newState&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; lastUpdated&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&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;};&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Env&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;State&lt;/span&gt;&lt;span&gt;&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;validateStateChange&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;oldState&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;State&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newState&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;State&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;State&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;// Return false to reject the change&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;newState&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;count&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;// Return modified state to transform&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&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;/span&gt;&lt;span&gt;newState&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; lastUpdated&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&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;};&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;scheduleEvery() for recurring tasks&lt;/h4&gt;
&lt;p&gt;The new &lt;code&gt;scheduleEvery()&lt;/code&gt; method enables fixed-interval recurring tasks with built-in overlap prevention:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Run every 5 minutes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;scheduleEvery&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;syncData&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; source&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;api&quot;&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;// Run every 5 minutes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;scheduleEvery&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;syncData&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;5&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;60&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; source&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;api&quot;&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;Callable system improvements&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Client-side RPC timeout&lt;/strong&gt; — Set timeouts on callable method invocations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;StreamingResponse.error(message)&lt;/code&gt;&lt;/strong&gt; — Graceful stream error signaling&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;getCallableMethods()&lt;/code&gt;&lt;/strong&gt; — Introspection API for discovering callable methods&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connection close handling&lt;/strong&gt; — Pending calls are automatically rejected on disconnect&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;call&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;args&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;timeout&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;5000&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;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onChunk&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onDone&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onError&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;call&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;method&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;args&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;timeout&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;5000&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;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onChunk&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onDone&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onError&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;Email and routing enhancements&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Secure email reply routing&lt;/strong&gt; — Email replies are now secured with HMAC-SHA256 signed headers, preventing unauthorized routing of emails to agent instances.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Routing improvements:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;basePath&lt;/code&gt; option to bypass default URL construction for custom routing&lt;/li&gt;
&lt;li&gt;Server-sent identity — Agents send &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;agent&lt;/code&gt; type on connect&lt;/li&gt;
&lt;li&gt;New &lt;code&gt;onIdentity&lt;/code&gt; and &lt;code&gt;onIdentityChange&lt;/code&gt; callbacks on the client&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useAgent&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;basePath&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&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;onIdentity&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agentType&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Connected to &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;name&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;;&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useAgent&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;basePath&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&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;onIdentity&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agentType&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Connected to &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;name&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;;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;Upgrade&lt;/h4&gt;
&lt;p&gt;To update to the latest version:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agents@latest&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 complete Workflows API reference and patterns, see &lt;a href=&quot;https://developers.cloudflare.com/agents/api-reference/run-workflows/&quot;&gt;Run Workflows&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workflows</category></item><item><title>R2 - Improve Global Upload Performance with R2 Local Uploads - Now in Open Beta</title><link>https://developers.cloudflare.com/changelog/post/2026-02-03-r2-local-uploads/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-03-r2-local-uploads/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/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.cloudflare.com/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.cloudflare.com/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;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/local-uploads-latency.R4pUgVuI_2cwpHU.webp&quot; alt=&quot;Local Uploads latency comparison showing p50 TTLB dropping from around 2 seconds to 500ms after enabling Local Uploads&quot;&gt;&lt;/starlight-image-zoom-zoomable&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;&gt;Cloudflare Dashboard&lt;/a&gt;, or run:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&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;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;local-uploads&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;BUCKET_NAME&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;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.cloudflare.com/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.cloudflare.com/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>Security Center - Threat actor identification with &quot;also known as&quot; aliases</title><link>https://developers.cloudflare.com/changelog/post/2026-02-03-threat-actor-name-mapping/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-03-threat-actor-name-mapping/</guid><description>&lt;p&gt;Identifying threat actors can be challenging, because naming conventions often vary across the security industry. To simplify your research, &lt;strong&gt;Cloudflare Threat Events&lt;/strong&gt; now include an &lt;strong&gt;Also known as&lt;/strong&gt; field, providing a list of common aliases and industry-standard names for the groups we track.&lt;/p&gt;
&lt;p&gt;This new field is available in both the Cloudflare dashboard and via the API. In the dashboard, you can view these aliases by expanding the event details side panel (under the &lt;strong&gt;Attacker&lt;/strong&gt; field) or by adding it as a column in your configurable table view.&lt;/p&gt;
&lt;h4&gt;Key benefits&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Easily map Cloudflare-tracked actors to the naming conventions used by other vendors without manual cross-referencing.&lt;/li&gt;
&lt;li&gt;Quickly identify if a detected threat actor matches a group your team is already monitoring via other intelligence feeds.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information on how to access this data, refer to the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/cloudforce_one/subresources/threat_events/&quot; target=&quot;_blank&quot;&gt;Threat Events API documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>Email security - Improved Accessibility and Search for Monitoring</title><link>https://developers.cloudflare.com/changelog/post/2026-02-02-improved-accessibility-search-for-monitoring/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-02-improved-accessibility-search-for-monitoring/</guid><description>&lt;p&gt;We have updated the Monitoring page to provide a more streamlined and insightful experience for administrators, improving both data visualization and dashboard accessibility.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enhanced Visual Layout&lt;/strong&gt;: Optimized contrast and the introduction of stacked bar charts for clearer data visualization and trend analysis.
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/monitoring-bar-charts.Bi-4BuXC_xiAlF.webp&quot; alt=&quot;visual-example&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved Accessibility &amp;#x26; Usability&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Widget Search&lt;/strong&gt;: Added search functionality to multiple widgets, including Policies, Submitters, and Impersonation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Actionable UI&lt;/strong&gt;: All available actions are now accessible via dedicated buttons.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;State Indicators&lt;/strong&gt;: Improved UI states to clearly communicate loading, empty datasets, and error conditions.
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/monitoring-buttons.DORPJvP__1JBNhu.webp&quot; alt=&quot;buttons-example&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Granular Data Breakdowns&lt;/strong&gt;: New views for dispositions by month, malicious email details, link actions, and impersonations.
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/monitoring-monthly-dispositions.CYuI5d9y_ZSVir3.webp&quot; alt=&quot;monthly-example&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This applies to all Email Security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Advantage&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 02 Feb 2026 11:05:33 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>WAF - WAF Release - 2026-02-02</title><link>https://developers.cloudflare.com/changelog/post/2026-02-02-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-02-02-waf-release/</guid><description>&lt;p&gt;This week’s release introduces new detections for CVE-2025-64459 and CVE-2025-24893.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CVE-2025-64459: Django versions prior to 5.1.14, 5.2.8, and 4.2.26 are vulnerable to SQL injection via crafted dictionaries passed to QuerySet methods and the &lt;code&gt;Q()&lt;/code&gt; class.&lt;/li&gt;
&lt;li&gt;CVE-2025-24893: XWiki allows unauthenticated remote code execution through crafted requests to the SolrSearch endpoint, affecting the entire installation.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;7a47683eacce4abd870ab2c630698ff3 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;XWiki - Remote Code Execution - CVE:CVE-2025-24893 2&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ad5c52f6ca334ef4a844e5e5da8ba7e6 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Django SQLI - CVE:CVE-2025-64459&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;8f0d5c98bd24460a9305a1558d667511 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;NoSQL, MongoDB - SQLi - Comparison - 2&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;Rule metadata description refined. Detection unchanged.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 02 Feb 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>KV - Reduced minimum cache TTL for Workers KV to 30 seconds</title><link>https://developers.cloudflare.com/changelog/post/2026-01-30-kv-reduced-minimum-cachettl/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-30-kv-reduced-minimum-cachettl/</guid><description>&lt;p&gt;The minimum &lt;code&gt;cacheTtl&lt;/code&gt; parameter for Workers KV has been reduced from 60 seconds to 30 seconds. This change applies to both &lt;code&gt;get()&lt;/code&gt; and &lt;code&gt;getWithMetadata()&lt;/code&gt; methods.&lt;/p&gt;
&lt;p&gt;This reduction allows you to maintain more up-to-date cached data and have finer-grained control over cache behavior. Applications requiring faster data refresh rates can now configure cache durations as low as 30 seconds instead of the previous 60-second minimum.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;cacheTtl&lt;/code&gt; parameter defines how long a KV result is cached at the global network location it is accessed from:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Read with custom cache TTL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;NAMESPACE&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;my-key&quot;&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;cacheTtl&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// Cache for minimum 30 seconds (previously 60)&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// getWithMetadata also supports the reduced cache TTL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;valueWithMetadata&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;NAMESPACE&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getWithMetadata&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;my-key&quot;&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;cacheTtl&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// Cache for minimum 30 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;)&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;The default cache TTL remains unchanged at 60 seconds. Upgrade to the latest version of Wrangler to be able to use 30 seconds &lt;code&gt;cacheTtl&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This change affects all KV read operations using the binding API. For more information, consult the &lt;a href=&quot;https://developers.cloudflare.com/kv/api/read-key-value-pairs/#cachettl-parameter&quot;&gt;Workers KV cache TTL documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 30 Jan 2026 12:00:00 GMT</pubDate><product>KV</product><category>KV</category></item><item><title>Cloudflare WAN, Magic Transit, Cloudflare One - BGP over GRE and IPsec tunnels</title><link>https://developers.cloudflare.com/changelog/post/2026-01-30-bgp-over-tunnels/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-30-bgp-over-tunnels/</guid><description>&lt;p&gt;Magic WAN and Magic Transit customers can use the Cloudflare dashboard to configure and manage BGP peering between their networks and their Magic routing table when using IPsec and GRE tunnel on-ramps (beta).&lt;/p&gt;
&lt;p&gt;Using BGP peering allows customers to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Automate the process of adding or removing networks and subnets.&lt;/li&gt;
&lt;li&gt;Take advantage of failure detection and session recovery features.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With this functionality, customers can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Establish an eBGP session between their devices and the Magic WAN / Magic Transit service when connected via IPsec and GRE tunnel on-ramps.&lt;/li&gt;
&lt;li&gt;Secure the session by MD5 authentication to prevent misconfigurations.&lt;/li&gt;
&lt;li&gt;Exchange routes dynamically between their devices and their Magic routing table.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For configuration details, refer to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/configuration/manually/how-to/configure-routes/#configure-bgp-routes&quot;&gt;Configure BGP routes for Magic WAN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/magic-transit/how-to/configure-routes/#configure-bgp-routes&quot;&gt;Configure BGP routes for Magic Transit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 30 Jan 2026 00:00:00 GMT</pubDate><product>Cloudflare WAN</product><category>Cloudflare WAN</category><category>Magic Transit</category><category>Cloudflare One</category></item><item><title>Workers AI - Launching FLUX.2 [klein] 9B on Workers AI</title><link>https://developers.cloudflare.com/changelog/post/2026-01-28-flux-2-klein-9b-workers-ai/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-28-flux-2-klein-9b-workers-ai/</guid><description>&lt;p&gt;We have partnered with Black Forest Labs (BFL) again to bring their optimized FLUX.2 [klein] 9B model to Workers AI. This distilled model offers enhanced quality compared to the 4B variant, while maintaining cost-effective pricing. With a fixed 4-step inference process, Klein 9B is ideal for rapid prototyping and real-time applications where both speed and quality matter.&lt;/p&gt;
&lt;p&gt;Read the &lt;a href=&quot;https://bfl.ai/blog&quot; target=&quot;_blank&quot;&gt;BFL blog&lt;/a&gt; to learn more about the model itself, or try it out yourself on our &lt;a href=&quot;https://multi-modal.ai.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;multi modal playground&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pricing documentation is available on the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/flux-2-klein-9b/&quot;&gt;model page&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/platform/pricing/&quot;&gt;pricing page&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Workers AI platform specifics&lt;/h4&gt;
&lt;p&gt;The model hosted on Workers AI is optimized for speed with a &lt;strong&gt;fixed 4-step inference process&lt;/strong&gt; and supports up to 4 image inputs. Since this is a distilled model, the &lt;code&gt;steps&lt;/code&gt; parameter is fixed at 4 and cannot be adjusted. Like FLUX.2 [dev] and FLUX.2 [klein] 4B, this image model uses multipart form data inputs, even if you just have a prompt.&lt;/p&gt;
&lt;p&gt;With the REST API, the multipart form data input looks like this:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--request&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&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;--url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/black-forest-labs/flux-2-klein-9b&apos;&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Authorization: Bearer {TOKEN}&apos;&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Content-Type: multipart/form-data&apos;&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;--form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;prompt=a sunset at the alps&apos;&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;--form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width=&lt;/span&gt;&lt;span&gt;1024&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;--form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;height=&lt;/span&gt;&lt;span&gt;1024&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;With the Workers AI binding, you can use it as such:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FormData&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;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;prompt&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;a sunset with a dog&quot;&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;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;width&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1024&quot;&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;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;height&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1024&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// FormData doesn&apos;t expose its serialized body or boundary. Passing it to a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Request (or Response) constructor serializes it and generates the Content-Type&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// header with the boundary, which is required for the server to parse the multipart fields.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formResponse&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;form&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formStream&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formResponse&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formContentType&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formResponse&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;content-type&apos;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;@cf/black-forest-labs/flux-2-klein-9b&quot;&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;multipart&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;body&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formStream&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;contentType&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formContentType&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;;&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;The parameters you can send to the model are detailed here:&lt;/p&gt;
&lt;details&gt;&lt;p&gt;&lt;/p&gt;&lt;summary&gt;JSON Schema for Model&lt;/summary&gt;
&lt;strong&gt;Required Parameters&lt;/strong&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;prompt&lt;/code&gt; (string) - Text description of the image to generate&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Optional Parameters&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;input_image_0&lt;/code&gt; (string) - Binary image&lt;/li&gt;
&lt;li&gt;&lt;code&gt;input_image_1&lt;/code&gt; (string) - Binary image&lt;/li&gt;
&lt;li&gt;&lt;code&gt;input_image_2&lt;/code&gt; (string) - Binary image&lt;/li&gt;
&lt;li&gt;&lt;code&gt;input_image_3&lt;/code&gt; (string) - Binary image&lt;/li&gt;
&lt;li&gt;&lt;code&gt;guidance&lt;/code&gt; (float) - Guidance scale for generation. Higher values follow the prompt more closely&lt;/li&gt;
&lt;li&gt;&lt;code&gt;width&lt;/code&gt; (integer) - Width of the image, default &lt;code&gt;1024&lt;/code&gt; Range: 256-1920&lt;/li&gt;
&lt;li&gt;&lt;code&gt;height&lt;/code&gt; (integer) - Height of the image, default &lt;code&gt;768&lt;/code&gt; Range: 256-1920&lt;/li&gt;
&lt;li&gt;&lt;code&gt;seed&lt;/code&gt; (integer) - Seed for reproducibility&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Since this is a distilled model, the &lt;code&gt;steps&lt;/code&gt; parameter is fixed at 4 and cannot be adjusted.&lt;/p&gt;&lt;/details&gt;
&lt;h4&gt;Multi-reference images&lt;/h4&gt;
&lt;p&gt;The FLUX.2 klein-9b model supports generating images based on reference images, just like FLUX.2 [dev] and FLUX.2 [klein] 4B. You can use this feature to apply the style of one image to another, add a new character to an image, or iterate on past generated images. You would use it with the same multipart form data structure, with the input images in binary. The model supports up to 4 input images.&lt;/p&gt;
&lt;p&gt;For the prompt, you can reference the images based on the index, like &lt;code&gt;take the subject of image 1 and style it like image 0&lt;/code&gt; or even use natural language like &lt;code&gt;place the dog beside the woman&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You must name the input parameter as &lt;code&gt;input_image_0&lt;/code&gt;, &lt;code&gt;input_image_1&lt;/code&gt;, &lt;code&gt;input_image_2&lt;/code&gt;, &lt;code&gt;input_image_3&lt;/code&gt; for it to work correctly. All input images must be smaller than 512x512.&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--request&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&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;--url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/black-forest-labs/flux-2-klein-9b&apos;&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Authorization: Bearer {TOKEN}&apos;&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Content-Type: multipart/form-data&apos;&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;--form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;prompt=take the subject of image 1 and style it like image 0&apos;&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;--form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;input_image_0=@/Users/johndoe/Desktop/icedoutkeanu.png&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;--form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;input_image_1=@/Users/johndoe/Desktop/me.png&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;--form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width=&lt;/span&gt;&lt;span&gt;1024&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;--form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;height=&lt;/span&gt;&lt;span&gt;1024&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;Through Workers AI Binding:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;//helper function to convert ReadableStream to Blob&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamToBlob&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;ReadableStream&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;contentType&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;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Blob&lt;/span&gt;&lt;span&gt;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;reader&lt;/span&gt;&lt;span&gt; &lt;/span&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;getReader&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;chunks&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;true&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&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;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;reader&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;read&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;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;break&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;chunks&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&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;/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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Blob&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;chunks&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;contentType&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;/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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;http://image-url&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;http://image-url&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FormData&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image_blob0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamToBlob&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;image0&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;image/png&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image_blob1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamToBlob&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;image1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;image/png&quot;&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;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;input_image_0&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image_blob0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;input_image_1&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image_blob1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;prompt&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;take the subject of image 1 and style it like image 0&apos;&lt;/span&gt;&lt;span&gt;)&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;// FormData doesn&apos;t expose its serialized body or boundary. Passing it to a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Request (or Response) constructor serializes it and generates the Content-Type&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// header with the boundary, which is required for the server to parse the multipart fields.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formResponse&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;form&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formStream&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formResponse&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formContentType&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formResponse&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;content-type&apos;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;@cf/black-forest-labs/flux-2-klein-9b&quot;&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;multipart&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;body&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formStream&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;contentType&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formContentType&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;</description><pubDate>Wed, 28 Jan 2026 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2026.1.89.1)</title><link>https://developers.cloudflare.com/changelog/post/2026-01-27-warp-windows-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-27-warp-windows-beta/</guid><description>&lt;p&gt;A new Beta release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes, improvements, and new features.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improvements to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/windows-multiuser/&quot;&gt;multi-user mode&lt;/a&gt;. Fixed an issue where when switching from a pre-login registration to a user registration, Mobile Device Management (MDM) configuration association could be lost.&lt;/li&gt;
&lt;li&gt;Added a new feature to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#netbios-over-tcpip&quot;&gt;manage NetBIOS over TCP/IP&lt;/a&gt; functionality on the Windows client. NetBIOS over TCP/IP on the Windows client is now disabled by default and can be enabled in &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/device-profiles/&quot;&gt;device profile settings&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Fixed an issue causing failure of the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#allow-users-to-enable-local-network-exclusion&quot;&gt;local network exclusion&lt;/a&gt; feature when configured with a timeout of &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Improvement for the Windows &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/reusable-components/posture-checks/warp-client-checks/client-certificate/&quot;&gt;client certificate posture check&lt;/a&gt; to ensure logged results are from checks that run once users log in.&lt;/li&gt;
&lt;li&gt;Improvement for more accurate reporting of device colocation information in the Cloudflare One dashboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For Windows 11 24H2 users, Microsoft has confirmed a regression that may lead to performance issues like mouse lag, audio cracking, or other slowdowns. Cloudflare recommends users experiencing these issues upgrade to a minimum &lt;a href=&quot;https://support.microsoft.com/en-us/topic/july-8-2025-kb5062553-os-build-26100-4652-523e69cb-051b-43c6-8376-6a76d6caeefd&quot;&gt;Windows 11 24H2 KB5062553&lt;/a&gt; or higher for resolution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with KB5055523 installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 27 Jan 2026 18:47:00 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2026.1.89.1)</title><link>https://developers.cloudflare.com/changelog/post/2026-01-27-warp-macos-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-27-warp-macos-beta/</guid><description>&lt;p&gt;A new Beta release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue causing failure of the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#allow-users-to-enable-local-network-exclusion&quot;&gt;local network exclusion&lt;/a&gt; feature when configured with a timeout of &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Improvement for more accurate reporting of device colocation information in the Cloudflare One dashboard.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 27 Jan 2026 18:46:59 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One, Cloudflare WAN - Configure Cloudflare source IPs (beta)</title><link>https://developers.cloudflare.com/changelog/post/2026-01-27-configure-cloudflare-source-ips/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-27-configure-cloudflare-source-ips/</guid><description>&lt;p&gt;Cloudflare source IPs are the IP addresses used by Cloudflare services (such as Load Balancing, Gateway, and Browser Isolation) when sending traffic to your private networks.&lt;/p&gt;
&lt;p&gt;For customers using legacy mode routing, traffic to private networks is sourced from public Cloudflare IPs, which may cause IP conflicts. For customers using Unified Routing mode (beta), traffic to private networks is sourced from dedicated, non-Internet-routable private IPv4 range to ensure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Symmetric routing over private network connections&lt;/li&gt;
&lt;li&gt;Proper firewall state preservation&lt;/li&gt;
&lt;li&gt;Private traffic stays on secure paths&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Key details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IPv4&lt;/strong&gt;: Sourced from &lt;code&gt;100.64.0.0/12&lt;/code&gt; by default, configurable to any &lt;code&gt;/12&lt;/code&gt; CIDR&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IPv6&lt;/strong&gt;: Sourced from &lt;code&gt;2606:4700:cf1:5000::/64&lt;/code&gt; (not configurable)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Affected connectors&lt;/strong&gt;: GRE, IPsec, CNI, WARP Connector, and WARP Client (Cloudflare Tunnel is not affected)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Configuring Cloudflare source IPs requires Unified Routing (beta) and the &lt;code&gt;Cloudflare One Networks Write&lt;/code&gt; permission.&lt;/p&gt;
&lt;p&gt;For configuration details, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/configuration/manually/how-to/configure-cloudflare-source-ips/&quot;&gt;Configure Cloudflare source IPs&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category><category>Cloudflare WAN</category></item><item><title>Cloudflare Fundamentals - Added Timezone preferences settings</title><link>https://developers.cloudflare.com/changelog/post/2026-01-27-timezone-preferences/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-27-timezone-preferences/</guid><description>&lt;p&gt;You can now set the timezone in the Cloudflare dashboard as Coordinated Universal Time (UTC) or your browser or system&apos;s timezone.&lt;/p&gt;
&lt;h4&gt;What&apos;s New&lt;/h4&gt;
&lt;p&gt;Unless otherwise specified in the user interface, all dates and times in the Cloudflare dashboard are now displayed in the selected timezone.&lt;/p&gt;
&lt;p&gt;You can change the timezone setting from the user profile dropdown.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2026-01-27-set-timezone.CUmMl54E_2ucVUh.webp&quot; alt=&quot;Timezone preference dropdown&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;The page will reload to apply the new timezone setting.&lt;/p&gt;</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Rules - Control request and response body buffering in Configuration Rules</title><link>https://developers.cloudflare.com/changelog/post/2026-01-27-body-buffering-settings/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-27-body-buffering-settings/</guid><description>&lt;p&gt;You can now control how Cloudflare buffers HTTP request and response bodies using two new settings in &lt;a href=&quot;https://developers.cloudflare.com/rules/configuration-rules/&quot;&gt;Configuration Rules&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Request body buffering&lt;/h4&gt;
&lt;p&gt;Controls how Cloudflare buffers HTTP request bodies before forwarding them to your origin server:&lt;/p&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Mode&lt;/th&gt;&lt;th&gt;Behavior&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Standard&lt;/strong&gt; (default)&lt;/td&gt;&lt;td&gt;Cloudflare can inspect a prefix of the request body for enabled functionality such as WAF and Bot Management.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Full&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Buffers the entire request body before sending to origin.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;No buffering — the request body streams directly to origin without inspection.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;Response body buffering&lt;/h4&gt;
&lt;p&gt;Controls how Cloudflare buffers HTTP response bodies before forwarding them to the client:&lt;/p&gt;

















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Mode&lt;/th&gt;&lt;th&gt;Behavior&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Standard&lt;/strong&gt; (default)&lt;/td&gt;&lt;td&gt;Cloudflare can inspect a prefix of the response body for enabled functionality.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;None&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;No buffering — the response body streams directly to the client without inspection.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;aside&gt;&lt;p&gt;Warning&lt;/p&gt;&lt;div&gt;&lt;p&gt;Setting body buffering to &lt;strong&gt;None&lt;/strong&gt; may break security functionality that requires body inspection, including the Web Application Firewall (WAF) and Bot Management. Ensure that any paths where you disable buffering do not require security inspection.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;aside&gt;&lt;p&gt;Availability&lt;/p&gt;&lt;div&gt;&lt;p&gt;These settings only take effect on zones running Cloudflare&apos;s &lt;a href=&quot;https://blog.cloudflare.com/20-percent-internet-upgrade/&quot; target=&quot;_blank&quot;&gt;latest CDN proxy&lt;/a&gt;. Enterprise customers can contact their account team to enable the latest proxy on their zones.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;h4&gt;API example&lt;/h4&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;action&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;set_config&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;action_parameters&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;request_body_buffering&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;standard&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;response_body_buffering&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;none&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;/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/rules/configuration-rules/&quot;&gt;Configuration Rules&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>WAF - WAF Release - 2026-01-26</title><link>https://developers.cloudflare.com/changelog/post/2026-01-26-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-26-waf-release/</guid><description>&lt;p&gt;This week’s release introduces new detections for denial-of-service attempts targeting React CVE-2026-23864 (&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2026-23864&quot; target=&quot;_blank&quot;&gt;https://www.cve.org/CVERecord?id=CVE-2026-23864&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CVE-2026-23864 (&lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2026-23864&quot; target=&quot;_blank&quot;&gt;https://www.cve.org/CVERecord?id=CVE-2026-23864&lt;/a&gt;) affects &lt;code&gt;react-server-dom-parcel&lt;/code&gt;, &lt;code&gt;react-server-dom-turbopack&lt;/code&gt;, and &lt;code&gt;react-server-dom-webpack&lt;/code&gt; packages.&lt;/li&gt;
&lt;li&gt;Attackers can send crafted HTTP requests to Server Function endpoints, causing server crashes, out-of-memory exceptions, or excessive CPU usage.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;aaede80b4d414dc89c443cea61680354 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;React Server - DOS - CVE:CVE-2026-23864 - 1&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;3e93c9faaafa447c83a525f2dcdffcf8 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;React Server - DOS - CVE:CVE-2026-23864 - 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;930020d567684f19b05fb35b349edbc6 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;React Server - DOS - CVE:CVE-2026-23864 - 3&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 26 Jan 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Cloudflare Fundamentals - New 2FA Experience for Login</title><link>https://developers.cloudflare.com/changelog/post/2026-01-23-new-2fa-experience/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-23-new-2fa-experience/</guid><description>&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2026-01-23-2fa-interstitial.TXFGNSth_ZOKoRB.webp&quot; alt=&quot;Screenshot of new 2FA enrollment experience&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;In an effort to improve overall user security, users without 2FA will be prompted upon login to enroll in email 2FA. This will improve user security posture while minimizing friction. Users without email 2FA enabled will see a prompt to secure their account with additional factors upon logging in. Enrolling in 2FA remains optional, but strongly encouraged as it is the best way to prevent account takeovers.&lt;/p&gt;
&lt;p&gt;We also made changes to existing 2FA screens to improve the user experience. Now we have distinct experiences for each 2FA factor type, reflective of the way that factor works.&lt;/p&gt;
&lt;h4&gt;For more information&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/user-profiles/2fa/#configure-email-two-factor-authentication&quot;&gt;Configure Email Two Factor Authentication&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 23 Jan 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Pages - Increased Pages file limit to 100,000 for paid plans</title><link>https://developers.cloudflare.com/changelog/post/2026-01-23-pages-file-limit-increase/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-23-pages-file-limit-increase/</guid><description>&lt;p&gt;Paid plans can now have up to 100,000 files per Pages site, increased from the previous limit of 20,000 files.&lt;/p&gt;
&lt;p&gt;To enable this increased limit, set the environment variable &lt;code&gt;PAGES_WRANGLER_MAJOR_VERSION=4&lt;/code&gt; in your Pages project settings.&lt;/p&gt;
&lt;p&gt;The Free plan remains at 20,000 files per site.&lt;/p&gt;
&lt;p&gt;For more details, refer to the &lt;a href=&quot;https://developers.cloudflare.com/pages/platform/limits/#files&quot;&gt;Pages limits documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 23 Jan 2026 00:00:00 GMT</pubDate><product>Pages</product><category>Pages</category></item><item><title>Vectorize - Vectorize indexes now support up to 10 million vectors</title><link>https://developers.cloudflare.com/changelog/post/2026-01-23-increased-index-capacity/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-23-increased-index-capacity/</guid><description>&lt;p&gt;You can now store up to 10 million vectors in a single Vectorize index, doubling the previous limit of 5 million vectors. This enables larger-scale semantic search, recommendation systems, and retrieval-augmented generation (RAG) applications without splitting data across multiple indexes.&lt;/p&gt;
&lt;p&gt;Vectorize continues to support indexes with up to 1,536 dimensions per vector at 32-bit precision. Refer to the &lt;a href=&quot;https://developers.cloudflare.com/vectorize/platform/limits/&quot;&gt;Vectorize limits documentation&lt;/a&gt; for complete details.&lt;/p&gt;</description><pubDate>Fri, 23 Jan 2026 00:00:00 GMT</pubDate><product>Vectorize</product><category>Vectorize</category></item><item><title>Cloudflare One, Access - Require Access protection for zones</title><link>https://developers.cloudflare.com/changelog/post/2026-01-22-deny-by-default-for-zones/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-22-deny-by-default-for-zones/</guid><description>&lt;p&gt;You can now require Cloudflare Access protection for all hostnames in your account. When enabled, traffic to any hostname that does not have a matching Access application is automatically blocked.&lt;/p&gt;
&lt;p&gt;This deny-by-default approach prevents accidental exposure of internal resources to the public Internet. If a developer deploys a new application or creates a DNS record without configuring an Access application, the traffic is blocked rather than exposed.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/require-cloudflare-access-protection.BAUmTYOs_ZxNecb.webp&quot; alt=&quot;Require Cloudflare Access protection in the dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;How it works&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Blocked by default&lt;/strong&gt;: Traffic to all hostnames in the account is blocked unless an Access application exists for that hostname.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Explicit access required&lt;/strong&gt;: To allow traffic, create an Access application with an Allow or Bypass policy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hostname exemptions&lt;/strong&gt;: You can exempt specific hostnames from this requirement.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To turn on this feature, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/access-settings/require-access-protection/&quot;&gt;Require Access protection&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 22 Jan 2026 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category><category>Access</category></item><item><title>Access - New granular API token permissions for Cloudflare Access</title><link>https://developers.cloudflare.com/changelog/post/2026-01-22-granular-api-token-permissions/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-22-granular-api-token-permissions/</guid><description>&lt;p&gt;Three new API token permissions are available for Cloudflare Access, giving you finer-grained control when building automations and integrations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Access: Organizations Revoke&lt;/strong&gt; — Grants the ability to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/access-settings/session-management/#revoke-user-sessions&quot;&gt;revoke user sessions&lt;/a&gt; in a Zero Trust organization. Use this permission when you need a token that can terminate active sessions without broader write access to organization settings.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Access: Population Read&lt;/strong&gt; — Grants read access to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/users/scim/&quot;&gt;SCIM users and groups&lt;/a&gt; synced from an identity provider to Cloudflare Access. Use this permission for tokens that only need to read synced user and group data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Access: Population Write&lt;/strong&gt; — Grants write access to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/users/scim/&quot;&gt;SCIM users and groups&lt;/a&gt; synced from an identity provider to Cloudflare Access. Use this permission for tokens that need to create or modify synced user and group data.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These permissions are scoped at the account level and can be combined with existing Access permissions.&lt;/p&gt;
&lt;p&gt;For a full list of available permissions, refer to &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/api/reference/permissions/&quot;&gt;API token permissions&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 22 Jan 2026 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Rules - New cryptographic functions — encode_base64() and sha256()</title><link>https://developers.cloudflare.com/changelog/post/2026-01-22-sha256-base64-encode-functions/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-22-sha256-base64-encode-functions/</guid><description>&lt;p&gt;Cloudflare Rulesets now includes &lt;code&gt;encode_base64()&lt;/code&gt; and &lt;code&gt;sha256()&lt;/code&gt; functions, enabling you to generate signed request headers directly in rule expressions. These functions support common patterns like constructing a canonical string from request attributes, computing a SHA256 digest, and Base64-encoding the result.&lt;/p&gt;
&lt;hr&gt;
&lt;h4&gt;New functions&lt;/h4&gt;




















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Function&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Availability&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;encode_base64(input, flags)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Encodes a string to Base64 format. Optional &lt;code&gt;flags&lt;/code&gt; parameter: &lt;code&gt;u&lt;/code&gt; for URL-safe encoding, &lt;code&gt;p&lt;/code&gt; for padding (adds &lt;code&gt;=&lt;/code&gt; characters to make the output length a multiple of 4, as required by some systems). By default, output is standard Base64 without padding.&lt;/td&gt;&lt;td&gt;All plans (in header transform rules)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;sha256(input)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Computes a SHA256 hash of the input string.&lt;/td&gt;&lt;td&gt;Requires enablement&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;The &lt;code&gt;sha256()&lt;/code&gt; function is available as an Enterprise add-on and requires a specific entitlement. Contact your account team to enable it.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;hr&gt;
&lt;h4&gt;Examples&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Encode a string to Base64 format:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;encode_base64(&quot;hello world&quot;)&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;Returns: &lt;code&gt;aGVsbG8gd29ybGQ&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Encode a string to Base64 format with padding:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;encode_base64(&quot;hello world&quot;, &quot;p&quot;)&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;Returns: &lt;code&gt;aGVsbG8gd29ybGQ=&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Perform a URL-safe Base64 encoding of a string:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;encode_base64(&quot;hello world&quot;, &quot;u&quot;)&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;Returns: &lt;code&gt;aGVsbG8gd29ybGQ&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compute the SHA256 hash of a secret token:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;sha256(&quot;my-token&quot;)&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;Returns a hash that your origin can validate to authenticate requests.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compute the SHA256 hash of a string and encode the result to Base64 format:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;encode_base64(sha256(&quot;my-token&quot;))&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;Combines hashing and encoding for systems that expect Base64-encoded signatures.&lt;/p&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/ruleset-engine/rules-language/functions/&quot;&gt;Functions reference&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 22 Jan 2026 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Workers - New Placement Hints for Workers</title><link>https://developers.cloudflare.com/changelog/post/2026-01-22-explicit-placement-hints/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-22-explicit-placement-hints/</guid><description>&lt;p&gt;You can now configure Workers to run close to infrastructure in legacy cloud regions to minimize latency to existing services and databases. This is most useful when your Worker makes multiple round trips.&lt;/p&gt;
&lt;p&gt;To &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/placement/#configure-explicit-placement-hints&quot;&gt;set a placement hint&lt;/a&gt;, set the &lt;code&gt;placement.region&lt;/code&gt; property in your Wrangler configuration file:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;placement&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;region&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;aws:us-east-1&quot;&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;placement&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;region&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;aws:us-east-1&quot;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Placement hints support Amazon Web Services (AWS), Google Cloud Platform (GCP), and Microsoft Azure region identifiers. Workers run in the &lt;a href=&quot;https://www.cloudflare.com/network/&quot; target=&quot;_blank&quot;&gt;Cloudflare data center&lt;/a&gt; with the lowest latency to the specified cloud region.&lt;/p&gt;
&lt;p&gt;If your existing infrastructure is not in these cloud providers, expose it to placement probes with &lt;code&gt;placement.host&lt;/code&gt; for layer 4 checks or &lt;code&gt;placement.hostname&lt;/code&gt; for layer 7 checks. These probes are designed to locate single-homed infrastructure and are not suitable for anycasted or multicasted resources.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;placement&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;host&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_database_host.com:5432&quot;&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;placement&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_database_host.com:5432&quot;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;placement&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;hostname&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_api_server.com&quot;&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;placement&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;hostname&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_api_server.com&quot;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;This is an extension of &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/placement/#enable-smart-placement&quot;&gt;Smart Placement&lt;/a&gt;, which automatically places your Workers closer to back-end APIs based on measured latency. When you do not know the location of your back-end APIs or have multiple back-end APIs, set &lt;code&gt;mode: &quot;smart&quot;&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;placement&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;smart&quot;&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;placement&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;smart&quot;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;</description><pubDate>Thu, 22 Jan 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>AI Search - AI Search path filtering for website and R2 data sources</title><link>https://developers.cloudflare.com/changelog/post/2026-01-20-ai-search-path-filtering/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-20-ai-search-path-filtering/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-search/&quot;&gt;AI Search&lt;/a&gt; now includes &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/path-filtering/&quot;&gt;path filtering&lt;/a&gt; for both &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/data-source/website/#path-filtering&quot;&gt;website&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/data-source/r2/#path-filtering&quot;&gt;R2&lt;/a&gt; data sources. You can now control which content gets indexed by defining include and exclude rules for paths.&lt;/p&gt;
&lt;p&gt;By controlling what gets indexed, you can improve the relevance and quality of your search results. You can also use path filtering to split a single data source across multiple AI Search instances for specialized search experiences.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/path-filtering.BCH7HN-Q_vEVaf.webp&quot; alt=&quot;Path filtering configuration in AI Search&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Path filtering uses &lt;a href=&quot;https://github.com/micromatch/micromatch&quot; target=&quot;_blank&quot;&gt;micromatch&lt;/a&gt; patterns, so you can use &lt;code&gt;*&lt;/code&gt; to match within a directory and &lt;code&gt;**&lt;/code&gt; to match across directories.&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Use case&lt;/th&gt;&lt;th&gt;Include&lt;/th&gt;&lt;th&gt;Exclude&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Index docs but skip drafts&lt;/td&gt;&lt;td&gt;&lt;code&gt;**/docs/**&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;**/docs/drafts/**&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Keep admin pages out of results&lt;/td&gt;&lt;td&gt;—&lt;/td&gt;&lt;td&gt;&lt;code&gt;**/admin/**&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Index only English content&lt;/td&gt;&lt;td&gt;&lt;code&gt;**/en/**&lt;/code&gt;&lt;/td&gt;&lt;td&gt;—&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Configure path filters when creating a new instance or update them anytime from &lt;strong&gt;Settings&lt;/strong&gt;. Check out &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/path-filtering/&quot;&gt;path filtering&lt;/a&gt; to learn more.&lt;/p&gt;</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>AI Search - Create AI Search instances programmatically via REST API</title><link>https://developers.cloudflare.com/changelog/post/2026-01-20-ai-search-simplified-api/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-20-ai-search-simplified-api/</guid><description>&lt;p&gt;You can now create &lt;a href=&quot;https://developers.cloudflare.com/ai-search/&quot;&gt;AI Search&lt;/a&gt; instances programmatically using the &lt;a href=&quot;https://developers.cloudflare.com/ai-search/get-started/api/&quot;&gt;API&lt;/a&gt;. For example, use the API to create instances for each customer in a multi-tenant application or manage AI Search alongside your other infrastructure.&lt;/p&gt;
&lt;p&gt;If you have created an AI Search instance via the &lt;a href=&quot;https://developers.cloudflare.com/ai-search/get-started/dashboard/&quot;&gt;dashboard&lt;/a&gt; before, you already have a &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/service-api-token/&quot;&gt;service API token&lt;/a&gt; registered and can start creating instances programmatically right away. If not, follow the &lt;a href=&quot;https://developers.cloudflare.com/ai-search/get-started/api/&quot;&gt;API guide&lt;/a&gt; to set up your first instance.&lt;/p&gt;
&lt;p&gt;For example, you can now create separate search instances for each language on your website:&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;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;lang&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;en&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fr&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;es&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;de&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span&gt;/ai-search/instances&quot;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Authorization: Bearer &lt;/span&gt;&lt;span&gt;$API_TOKEN&lt;/span&gt;&lt;span&gt;&quot;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Content-Type: application/json&quot;&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;--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;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;id&quot;: &quot;docs-&apos;&quot;&lt;/span&gt;&lt;span&gt;$lang&lt;/span&gt;&lt;span&gt;&quot;&apos;&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;type&quot;: &quot;web-crawler&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;source&quot;: &quot;example.com&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;source_params&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;path_include&quot;: [&quot;**/&apos;&quot;&lt;/span&gt;&lt;span&gt;$lang&lt;/span&gt;&lt;span&gt;&quot;&apos;/**&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;}&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;done&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;Refer to the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/ai_search/subresources/instances/methods/create/&quot;&gt;REST API reference&lt;/a&gt; for additional configuration options.&lt;/p&gt;</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>KV - New Workers KV Dashboard UI</title><link>https://developers.cloudflare.com/changelog/post/2026-01-20-kv-dash-ui-homepage/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-20-kv-dash-ui-homepage/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/kv/&quot;&gt;Workers KV&lt;/a&gt; has an updated dashboard UI with new dashboard styling that makes it easier to navigate and see analytics and settings for a KV namespace.&lt;/p&gt;
&lt;p&gt;The new dashboard features a &lt;strong&gt;streamlined homepage&lt;/strong&gt; for easy access to your namespaces and key operations, with consistent design with the rest of the dashboard UI updates. It also provides an &lt;strong&gt;improved analytics view&lt;/strong&gt;.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/kv-dash-ui-homepage.BT5hNntj_1OgUmv.webp&quot; alt=&quot;New KV Dashboard Homepage&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;The updated dashboard is now available for all Workers KV users. Log in to the &lt;a href=&quot;https://dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Cloudflare Dashboard&lt;/a&gt; to start exploring the new interface.&lt;/p&gt;</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><product>KV</product><category>KV</category></item><item><title>Rules - New functions for array and map operations</title><link>https://developers.cloudflare.com/changelog/post/2026-01-20-array-map-functions/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-20-array-map-functions/</guid><description>&lt;h4&gt;New functions for array and map operations&lt;/h4&gt;
&lt;p&gt;Cloudflare Rulesets now include new functions that enable advanced expression logic for evaluating arrays and maps. These functions allow you to build rules that match against lists of values in request or response headers, enabling use cases like country-based blocking using custom headers.&lt;/p&gt;
&lt;hr&gt;
&lt;h4&gt;New functions&lt;/h4&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Function&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;split(source, delimiter)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Splits a string into an array of strings using the specified delimiter.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;join(array, delimiter)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Joins an array of strings into a single string using the specified delimiter.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;has_key(map, key)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Returns &lt;code&gt;true&lt;/code&gt; if the specified key exists in the map.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;has_value(map, value)&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Returns &lt;code&gt;true&lt;/code&gt; if the specified value exists in the map.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;hr&gt;
&lt;h4&gt;Example use cases&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Check if a country code exists in a header list:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;has_value(split(http.response.headers[&quot;x-allow-country&quot;][0], &quot;,&quot;), ip.src.country)&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;&lt;strong&gt;Check if a specific header key exists:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;has_key(http.request.headers, &quot;x-custom-header&quot;)&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;&lt;strong&gt;Join array values for logging or comparison:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;join(http.request.headers.names, &quot;, &quot;)&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 the &lt;a href=&quot;https://developers.cloudflare.com/ruleset-engine/rules-language/functions/&quot;&gt;Functions reference&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Cloudflare Fundamentals, SDK - Cloudflare Typescript SDK v6.0.0-beta.1 now available</title><link>https://developers.cloudflare.com/changelog/post/2026-01-20-cloudflare-typescript-v600-beta1/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-20-cloudflare-typescript-v600-beta1/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; Please note that v6.0.0-beta.1 is in Beta and we are still testing it for stability.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Full Changelog: &lt;a href=&quot;https://github.com/cloudflare/cloudflare-typescript/compare/v5.2.0...v6.0.0-beta.1&quot; target=&quot;_blank&quot;&gt;v5.2.0...v6.0.0-beta.1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In this release, you&apos;ll see a large number of breaking changes. This is primarily due to a change in OpenAPI definitions, which our libraries are based off of, and codegen updates that we rely on to read those OpenAPI definitions and produce our SDK libraries. As the codegen is always evolving and improving, so are our code bases.&lt;/p&gt;
&lt;p&gt;Some breaking changes were introduced due to bug fixes, also listed below.&lt;/p&gt;
&lt;p&gt;Please ensure you read through the list of changes below before moving to this version - this will help you understand any down or upstream issues it may cause to your environments.&lt;/p&gt;
&lt;hr&gt;
&lt;h4&gt;Breaking Changes&lt;/h4&gt;
&lt;h4&gt;Addressing - Parameter Requirements Changed&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;BGPPrefixCreateParams.cidr&lt;/code&gt;: optional → &lt;strong&gt;required&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PrefixCreateParams.asn&lt;/code&gt;: &lt;code&gt;number | null&lt;/code&gt; → &lt;code&gt;number&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PrefixCreateParams.loa_document_id&lt;/code&gt;: required → &lt;strong&gt;optional&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ServiceBindingCreateParams.cidr&lt;/code&gt;: optional → &lt;strong&gt;required&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ServiceBindingCreateParams.service_id&lt;/code&gt;: optional → &lt;strong&gt;required&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;API Gateway&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ConfigurationUpdateResponse&lt;/code&gt; removed&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PublicSchema&lt;/code&gt; → &lt;code&gt;OldPublicSchema&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SchemaUpload&lt;/code&gt; → &lt;code&gt;UserSchemaCreateResponse&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ConfigurationUpdateParams.properties&lt;/code&gt; removed; use &lt;code&gt;normalize&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;CloudforceOne - Response Type Changes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ThreatEventBulkCreateResponse&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; → complex object with counts and errors&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;D1 Database - Query Parameters&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DatabaseQueryParams&lt;/code&gt;: simple interface → union type (&lt;code&gt;D1SingleQuery | MultipleQueries&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DatabaseRawParams&lt;/code&gt;: same change&lt;/li&gt;
&lt;li&gt;Supports batch queries via &lt;code&gt;batch&lt;/code&gt; array&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;DNS Records - Type Renames (21 types)&lt;/h4&gt;
&lt;p&gt;All record type interfaces renamed from &lt;code&gt;*Record&lt;/code&gt; to short names:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.ARecord&lt;/code&gt; → &lt;code&gt;RecordResponse.A&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.AAAARecord&lt;/code&gt; → &lt;code&gt;RecordResponse.AAAA&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.CNAMERecord&lt;/code&gt; → &lt;code&gt;RecordResponse.CNAME&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.MXRecord&lt;/code&gt; → &lt;code&gt;RecordResponse.MX&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.NSRecord&lt;/code&gt; → &lt;code&gt;RecordResponse.NS&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.PTRRecord&lt;/code&gt; → &lt;code&gt;RecordResponse.PTR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.TXTRecord&lt;/code&gt; → &lt;code&gt;RecordResponse.TXT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.CAARecord&lt;/code&gt; → &lt;code&gt;RecordResponse.CAA&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.CERTRecord&lt;/code&gt; → &lt;code&gt;RecordResponse.CERT&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.DNSKEYRecord&lt;/code&gt; → &lt;code&gt;RecordResponse.DNSKEY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.DSRecord&lt;/code&gt; → &lt;code&gt;RecordResponse.DS&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.HTTPSRecord&lt;/code&gt; → &lt;code&gt;RecordResponse.HTTPS&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.LOCRecord&lt;/code&gt; → &lt;code&gt;RecordResponse.LOC&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.NAPTRRecord&lt;/code&gt; → &lt;code&gt;RecordResponse.NAPTR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.SMIMEARecord&lt;/code&gt; → &lt;code&gt;RecordResponse.SMIMEA&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.SRVRecord&lt;/code&gt; → &lt;code&gt;RecordResponse.SRV&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.SSHFPRecord&lt;/code&gt; → &lt;code&gt;RecordResponse.SSHFP&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.SVCBRecord&lt;/code&gt; → &lt;code&gt;RecordResponse.SVCB&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.TLSARecord&lt;/code&gt; → &lt;code&gt;RecordResponse.TLSA&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.URIRecord&lt;/code&gt; → &lt;code&gt;RecordResponse.URI&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RecordResponse.OpenpgpkeyRecord&lt;/code&gt; → &lt;code&gt;RecordResponse.Openpgpkey&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;IAM Resource Groups&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ResourceGroupCreateResponse.scope&lt;/code&gt;: optional single → &lt;strong&gt;required array&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ResourceGroupCreateResponse.id&lt;/code&gt;: optional → &lt;strong&gt;required&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Origin CA Certificates - Parameter Requirements Changed&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;OriginCACertificateCreateParams.csr&lt;/code&gt;: optional → &lt;strong&gt;required&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OriginCACertificateCreateParams.hostnames&lt;/code&gt;: optional → &lt;strong&gt;required&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OriginCACertificateCreateParams.request_type&lt;/code&gt;: optional → &lt;strong&gt;required&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Pages&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Renamed: &lt;code&gt;DeploymentsSinglePage&lt;/code&gt; → &lt;code&gt;DeploymentListResponsesV4PagePaginationArray&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Domain response fields: many optional → &lt;strong&gt;required&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Pipelines - v0 to v1 Migration&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Entire v0 API deprecated; use v1 methods (&lt;code&gt;createV1&lt;/code&gt;, &lt;code&gt;listV1&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;New sub-resources: &lt;code&gt;Sinks&lt;/code&gt;, &lt;code&gt;Streams&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;R2&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;EventNotificationUpdateParams.rules&lt;/code&gt;: optional → &lt;strong&gt;required&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Super Slurper: &lt;code&gt;bucket&lt;/code&gt;, &lt;code&gt;secret&lt;/code&gt; now required in source params&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Radar&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dataSource&lt;/code&gt;: &lt;code&gt;string&lt;/code&gt; → typed enum (23 values)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;eventType&lt;/code&gt;: &lt;code&gt;string&lt;/code&gt; → typed enum (6 values)&lt;/li&gt;
&lt;li&gt;V2 methods require &lt;code&gt;dimension&lt;/code&gt; parameter (breaking signature change)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Resource Sharing&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Removed: &lt;code&gt;status_message&lt;/code&gt; field from all recipient response types&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Schema Validation&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Consolidated &lt;code&gt;SchemaCreateResponse&lt;/code&gt;, &lt;code&gt;SchemaListResponse&lt;/code&gt;, &lt;code&gt;SchemaEditResponse&lt;/code&gt;, &lt;code&gt;SchemaGetResponse&lt;/code&gt; → &lt;code&gt;PublicSchema&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Renamed: &lt;code&gt;SchemaListResponsesV4PagePaginationArray&lt;/code&gt; → &lt;code&gt;PublicSchemasV4PagePaginationArray&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Spectrum&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Renamed union members: &lt;code&gt;AppListResponse.UnionMember0&lt;/code&gt; → &lt;code&gt;SpectrumConfigAppConfig&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Renamed union members: &lt;code&gt;AppListResponse.UnionMember1&lt;/code&gt; → &lt;code&gt;SpectrumConfigPaygoAppConfig&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Workers&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Removed: &lt;code&gt;WorkersBindingKindTailConsumer&lt;/code&gt; type (all occurrences)&lt;/li&gt;
&lt;li&gt;Renamed: &lt;code&gt;ScriptsSinglePage&lt;/code&gt; → &lt;code&gt;ScriptListResponsesSinglePage&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Removed: &lt;code&gt;DeploymentsSinglePage&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Zero-Trust DLP&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;datasets.create()&lt;/code&gt;, &lt;code&gt;update()&lt;/code&gt;, &lt;code&gt;get()&lt;/code&gt; return types changed&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PredefinedGetResponse&lt;/code&gt; union members renamed to &lt;code&gt;UnionMember0-5&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Zero-Trust Tunnels&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Removed: &lt;code&gt;CloudflaredCreateResponse&lt;/code&gt;, &lt;code&gt;CloudflaredListResponse&lt;/code&gt;, &lt;code&gt;CloudflaredDeleteResponse&lt;/code&gt;, &lt;code&gt;CloudflaredEditResponse&lt;/code&gt;, &lt;code&gt;CloudflaredGetResponse&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Removed: &lt;code&gt;CloudflaredListResponsesV4PagePaginationArray&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Features&lt;/h4&gt;
&lt;h4&gt;Abuse Reports (&lt;code&gt;client.abuseReports&lt;/code&gt;)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reports&lt;/strong&gt;: &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mitigations&lt;/strong&gt;: sub-resource for abuse mitigations&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;AI Search (&lt;code&gt;client.aisearch&lt;/code&gt;)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Instances&lt;/strong&gt;: &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;read&lt;/code&gt;, &lt;code&gt;stats&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Items&lt;/strong&gt;: &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jobs&lt;/strong&gt;: &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;, &lt;code&gt;logs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tokens&lt;/strong&gt;: &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;read&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Connectivity (&lt;code&gt;client.connectivity&lt;/code&gt;)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Directory Services&lt;/strong&gt;: &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Supports IPv4, IPv6, dual-stack, and hostname configurations&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Organizations (&lt;code&gt;client.organizations&lt;/code&gt;)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Organizations&lt;/strong&gt;: &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OrganizationProfile&lt;/strong&gt;: &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Hierarchical organization support with parent/child relationships&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;R2 Data Catalog (&lt;code&gt;client.r2DataCatalog&lt;/code&gt;)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Catalog&lt;/strong&gt;: &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;enable&lt;/code&gt;, &lt;code&gt;disable&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Credentials&lt;/strong&gt;: &lt;code&gt;create&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;MaintenanceConfigs&lt;/strong&gt;: &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Namespaces&lt;/strong&gt;: &lt;code&gt;list&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tables&lt;/strong&gt;: &lt;code&gt;list&lt;/code&gt;, maintenance config management&lt;/li&gt;
&lt;li&gt;Apache Iceberg integration&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Realtime Kit (&lt;code&gt;client.realtimeKit&lt;/code&gt;)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Apps&lt;/strong&gt;: &lt;code&gt;get&lt;/code&gt;, &lt;code&gt;post&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Meetings&lt;/strong&gt;: &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;, participant management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Livestreams&lt;/strong&gt;: 10+ methods for streaming&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recordings&lt;/strong&gt;: start, pause, stop, get&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sessions&lt;/strong&gt;: transcripts, summaries, chat&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Webhooks&lt;/strong&gt;: full CRUD&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ActiveSession&lt;/strong&gt;: polls, kick participants&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analytics&lt;/strong&gt;: organization analytics&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Token Validation (&lt;code&gt;client.tokenValidation&lt;/code&gt;)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Configuration&lt;/strong&gt;: &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;edit&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Credentials&lt;/strong&gt;: &lt;code&gt;update&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rules&lt;/strong&gt;: &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;bulkCreate&lt;/code&gt;, &lt;code&gt;bulkEdit&lt;/code&gt;, &lt;code&gt;edit&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;JWT validation with RS256/384/512, PS256/384/512, ES256, ES384&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Alerting Silences (&lt;code&gt;client.alerting.silences&lt;/code&gt;)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;create&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;IAM SSO (&lt;code&gt;client.iam.sso&lt;/code&gt;)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;create&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;, &lt;code&gt;beginVerification&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Pipelines v1 (&lt;code&gt;client.pipelines&lt;/code&gt;)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sinks&lt;/strong&gt;: &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Streams&lt;/strong&gt;: &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;get&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Zero-Trust AI Controls / MCP (&lt;code&gt;client.zeroTrust.access.aiControls.mcp&lt;/code&gt;)&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Portals&lt;/strong&gt;: &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;read&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Servers&lt;/strong&gt;: &lt;code&gt;create&lt;/code&gt;, &lt;code&gt;update&lt;/code&gt;, &lt;code&gt;list&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, &lt;code&gt;read&lt;/code&gt;, &lt;code&gt;sync&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Accounts&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;managed_by&lt;/code&gt; field with &lt;code&gt;parent_org_id&lt;/code&gt;, &lt;code&gt;parent_org_name&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Addressing LOA Documents&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;auto_generated&lt;/code&gt; field on &lt;code&gt;LOADocumentCreateResponse&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Addressing Prefixes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;delegate_loa_creation&lt;/code&gt;, &lt;code&gt;irr_validation_state&lt;/code&gt;, &lt;code&gt;ownership_validation_state&lt;/code&gt;, &lt;code&gt;ownership_validation_token&lt;/code&gt;, &lt;code&gt;rpki_validation_state&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;AI&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Added &lt;code&gt;toMarkdown.supported()&lt;/code&gt; method to get all supported conversion formats&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;AI Gateway&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;zdr&lt;/code&gt; field added to all responses and params&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Alerting&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;New alert type: &lt;code&gt;abuse_report_alert&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;type&lt;/code&gt; field added to PolicyFilter&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Browser Rendering&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ContentCreateParams&lt;/code&gt;: refined to discriminated union (&lt;code&gt;Variant0 | Variant1&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Split into URL-based and HTML-based parameter variants for better type safety&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Client Certificates&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;reactivate&lt;/code&gt; parameter in edit&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;CloudforceOne&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ThreatEventCreateParams.indicatorType&lt;/code&gt;: required → optional&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hasChildren&lt;/code&gt; field added to all threat event response types&lt;/li&gt;
&lt;li&gt;&lt;code&gt;datasetIds&lt;/code&gt; query parameter on &lt;code&gt;AttackerListParams&lt;/code&gt;, &lt;code&gt;CategoryListParams&lt;/code&gt;, &lt;code&gt;TargetIndustryListParams&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;categoryUuid&lt;/code&gt; field on &lt;code&gt;TagCreateResponse&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;indicators&lt;/code&gt; array for multi-indicator support per event&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uuid&lt;/code&gt; and &lt;code&gt;preserveUuid&lt;/code&gt; fields for UUID preservation in bulk create&lt;/li&gt;
&lt;li&gt;&lt;code&gt;format&lt;/code&gt; query parameter (&lt;code&gt;&apos;json&apos; | &apos;stix2&apos;&lt;/code&gt;) on &lt;code&gt;ThreatEventListParams&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;createdAt&lt;/code&gt;, &lt;code&gt;datasetId&lt;/code&gt; fields on &lt;code&gt;ThreatEventEditParams&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Content Scanning&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Added &lt;code&gt;create()&lt;/code&gt;, &lt;code&gt;update()&lt;/code&gt;, &lt;code&gt;get()&lt;/code&gt; methods&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Custom Pages&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;New page types: &lt;code&gt;basic_challenge&lt;/code&gt;, &lt;code&gt;under_attack&lt;/code&gt;, &lt;code&gt;waf_challenge&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;D1&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;served_by_colo&lt;/code&gt; - colo that handled query&lt;/li&gt;
&lt;li&gt;&lt;code&gt;jurisdiction&lt;/code&gt; - &lt;code&gt;&apos;eu&apos; | &apos;fedramp&apos;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Time Travel&lt;/strong&gt; (&lt;code&gt;client.d1.database.timeTravel&lt;/code&gt;): &lt;code&gt;getBookmark()&lt;/code&gt;, &lt;code&gt;restore()&lt;/code&gt; - point-in-time recovery&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Email Security&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;New fields on &lt;code&gt;InvestigateListResponse&lt;/code&gt;/&lt;code&gt;InvestigateGetResponse&lt;/code&gt;: &lt;code&gt;envelope_from&lt;/code&gt;, &lt;code&gt;envelope_to&lt;/code&gt;, &lt;code&gt;postfix_id_outbound&lt;/code&gt;, &lt;code&gt;replyto&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;New detection classification: &lt;code&gt;&apos;outbound_ndr&apos;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Enhanced &lt;code&gt;Finding&lt;/code&gt; interface with &lt;code&gt;attachment&lt;/code&gt;, &lt;code&gt;detection&lt;/code&gt;, &lt;code&gt;field&lt;/code&gt;, &lt;code&gt;portion&lt;/code&gt;, &lt;code&gt;reason&lt;/code&gt;, &lt;code&gt;score&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Added &lt;code&gt;cursor&lt;/code&gt; query parameter to &lt;code&gt;InvestigateListParams&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Gateway Lists&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;New list types: &lt;code&gt;CATEGORY&lt;/code&gt;, &lt;code&gt;LOCATION&lt;/code&gt;, &lt;code&gt;DEVICE&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Intel&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;New issue type: &lt;code&gt;&apos;configuration_suggestion&apos;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;payload&lt;/code&gt; field: &lt;code&gt;unknown&lt;/code&gt; → typed &lt;code&gt;Payload&lt;/code&gt; interface with &lt;code&gt;detection_method&lt;/code&gt;, &lt;code&gt;zone_tag&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Leaked Credential Checks&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Added &lt;code&gt;detections.get()&lt;/code&gt; method&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Logpush&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;New datasets: &lt;code&gt;dex_application_tests&lt;/code&gt;, &lt;code&gt;dex_device_state_events&lt;/code&gt;, &lt;code&gt;ipsec_logs&lt;/code&gt;, &lt;code&gt;warp_config_changes&lt;/code&gt;, &lt;code&gt;warp_toggle_changes&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Load Balancers&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Monitor.port&lt;/code&gt;: &lt;code&gt;number&lt;/code&gt; → &lt;code&gt;number | null&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Pool.load_shedding&lt;/code&gt;: &lt;code&gt;LoadShedding&lt;/code&gt; → &lt;code&gt;LoadShedding | null&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Pool.origin_steering&lt;/code&gt;: &lt;code&gt;OriginSteering&lt;/code&gt; → &lt;code&gt;OriginSteering | null&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Magic Transit&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;license_key&lt;/code&gt; field on connectors&lt;/li&gt;
&lt;li&gt;&lt;code&gt;provision_license&lt;/code&gt; parameter for auto-provisioning&lt;/li&gt;
&lt;li&gt;IPSec: &lt;code&gt;custom_remote_identities&lt;/code&gt; with FQDN support&lt;/li&gt;
&lt;li&gt;Snapshots: Bond interface, &lt;code&gt;probed_mtu&lt;/code&gt; field&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Pages&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;New response types: &lt;code&gt;ProjectCreateResponse&lt;/code&gt;, &lt;code&gt;ProjectListResponse&lt;/code&gt;, &lt;code&gt;ProjectEditResponse&lt;/code&gt;, &lt;code&gt;ProjectGetResponse&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Deployment methods return specific response types instead of generic &lt;code&gt;Deployment&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Queues&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Added &lt;code&gt;subscriptions.get()&lt;/code&gt; method&lt;/li&gt;
&lt;li&gt;Enhanced &lt;code&gt;SubscriptionGetResponse&lt;/code&gt; with typed event source interfaces&lt;/li&gt;
&lt;li&gt;New event source types: Images, KV, R2, Vectorize, Workers AI, Workers Builds, Workflows&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;R2&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Sippy: new provider &lt;code&gt;s3&lt;/code&gt; (S3-compatible endpoints)&lt;/li&gt;
&lt;li&gt;Sippy: &lt;code&gt;bucketUrl&lt;/code&gt; field for S3-compatible sources&lt;/li&gt;
&lt;li&gt;Super Slurper: &lt;code&gt;keys&lt;/code&gt; field on source response schemas (specify specific keys to migrate)&lt;/li&gt;
&lt;li&gt;Super Slurper: &lt;code&gt;pathPrefix&lt;/code&gt; field on source schemas&lt;/li&gt;
&lt;li&gt;Super Slurper: &lt;code&gt;region&lt;/code&gt; field on S3 source params&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Radar&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Added &lt;code&gt;geolocations.list()&lt;/code&gt;, &lt;code&gt;geolocations.get()&lt;/code&gt; methods&lt;/li&gt;
&lt;li&gt;Added V2 dimension-based methods (&lt;code&gt;summaryV2&lt;/code&gt;, &lt;code&gt;timeseriesGroupsV2&lt;/code&gt;) to radar sub-resources&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Resource Sharing&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Added &lt;code&gt;terminal&lt;/code&gt; boolean field to Resource Error interfaces&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Rules&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Added &lt;code&gt;id&lt;/code&gt; field to &lt;code&gt;ItemDeleteParams.Item&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Rulesets&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;New buffering fields on &lt;code&gt;SetConfigRule&lt;/code&gt;: &lt;code&gt;request_body_buffering&lt;/code&gt;, &lt;code&gt;response_body_buffering&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Secrets Store&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;New scopes: &lt;code&gt;&apos;dex&apos;&lt;/code&gt;, &lt;code&gt;&apos;access&apos;&lt;/code&gt; (in addition to &lt;code&gt;&apos;workers&apos;&lt;/code&gt;, &lt;code&gt;&apos;ai_gateway&apos;&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;SSL Certificate Packs&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Response types now proper interfaces (was &lt;code&gt;unknown&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Fields now required: &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;certificates&lt;/code&gt;, &lt;code&gt;hosts&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;type&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Security Center&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;payload&lt;/code&gt; field: &lt;code&gt;unknown&lt;/code&gt; → typed &lt;code&gt;Payload&lt;/code&gt; interface with &lt;code&gt;detection_method&lt;/code&gt;, &lt;code&gt;zone_tag&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Shared Types&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Added: &lt;code&gt;CloudflareTunnelsV4PagePaginationArray&lt;/code&gt; pagination class&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Workers&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Added &lt;code&gt;subdomains.delete()&lt;/code&gt; method&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Worker.references&lt;/code&gt; - track external dependencies (domains, Durable Objects, queues)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Worker.startup_time_ms&lt;/code&gt; - startup timing&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Script.observability&lt;/code&gt; - observability settings with logging&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Script.tag&lt;/code&gt;, &lt;code&gt;Script.tags&lt;/code&gt; - immutable ID and tags&lt;/li&gt;
&lt;li&gt;Placement: support for region, hostname, host-based placement&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tags&lt;/code&gt;, &lt;code&gt;tail_consumers&lt;/code&gt; now accept &lt;code&gt;| null&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Telemetry: &lt;code&gt;traces&lt;/code&gt; field, &lt;code&gt;$containers&lt;/code&gt; event info, &lt;code&gt;durableObjectId&lt;/code&gt;, &lt;code&gt;transactionName&lt;/code&gt;, &lt;code&gt;abr_level&lt;/code&gt; fields&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Workers for Platforms&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ScriptUpdateResponse&lt;/code&gt;: new fields &lt;code&gt;entry_point&lt;/code&gt;, &lt;code&gt;observability&lt;/code&gt;, &lt;code&gt;tag&lt;/code&gt;, &lt;code&gt;tags&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;placement&lt;/code&gt; field now union of 4 variants (smart mode, region, hostname, host)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tags&lt;/code&gt;, &lt;code&gt;tail_consumers&lt;/code&gt; now nullable&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TagUpdateParams.body&lt;/code&gt; now accepts &lt;code&gt;null&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Workflows&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;instance_retention&lt;/code&gt;: &lt;code&gt;unknown&lt;/code&gt; → typed &lt;code&gt;InstanceRetention&lt;/code&gt; interface with &lt;code&gt;error_retention&lt;/code&gt;, &lt;code&gt;success_retention&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;New status option: &lt;code&gt;&apos;restart&apos;&lt;/code&gt; added to &lt;code&gt;StatusEditParams.status&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Zero-Trust Devices&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;External emergency disconnect settings (4 new fields)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;antivirus&lt;/code&gt; device posture check type&lt;/li&gt;
&lt;li&gt;&lt;code&gt;os_version_extra&lt;/code&gt; documentation improvements&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Zones&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;New response types: &lt;code&gt;SubscriptionCreateResponse&lt;/code&gt;, &lt;code&gt;SubscriptionUpdateResponse&lt;/code&gt;, &lt;code&gt;SubscriptionGetResponse&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Zero-Trust Access Applications&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;New &lt;code&gt;ApplicationType&lt;/code&gt; values: &lt;code&gt;&apos;mcp&apos;&lt;/code&gt;, &lt;code&gt;&apos;mcp_portal&apos;&lt;/code&gt;, &lt;code&gt;&apos;proxy_endpoint&apos;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;New destination type: &lt;code&gt;ViaMcpServerPortalDestination&lt;/code&gt; for MCP server access&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Zero-Trust Gateway&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Added &lt;code&gt;rules.listTenant()&lt;/code&gt; method&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Zero-Trust Gateway - Proxy Endpoints&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ProxyEndpoint&lt;/code&gt;: interface → discriminated union (&lt;code&gt;ZeroTrustGatewayProxyEndpointIP | ZeroTrustGatewayProxyEndpointIdentity&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ProxyEndpointCreateParams&lt;/code&gt;: interface → union type&lt;/li&gt;
&lt;li&gt;Added &lt;code&gt;kind&lt;/code&gt; field: &lt;code&gt;&apos;ip&apos; | &apos;identity&apos;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Zero-Trust Tunnels&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;WARPConnector*Response&lt;/code&gt;: union type → interface&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Deprecations&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;API Gateway&lt;/strong&gt;: &lt;code&gt;UserSchemas&lt;/code&gt;, &lt;code&gt;Settings&lt;/code&gt;, &lt;code&gt;SchemaValidation&lt;/code&gt; resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit Logs&lt;/strong&gt;: &lt;code&gt;auditLogId.not&lt;/code&gt; (use &lt;code&gt;id.not&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CloudforceOne&lt;/strong&gt;: &lt;code&gt;ThreatEvents.get()&lt;/code&gt;, &lt;code&gt;IndicatorTypes.list()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Devices&lt;/strong&gt;: &lt;code&gt;public_ip&lt;/code&gt; field (use DEX API)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email Security&lt;/strong&gt;: &lt;code&gt;item_count&lt;/code&gt; field in Move responses&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pipelines&lt;/strong&gt;: v0 methods (use v1)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Radar&lt;/strong&gt;: old &lt;code&gt;summary()&lt;/code&gt; and &lt;code&gt;timeseriesGroups()&lt;/code&gt; methods (use V2)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rulesets&lt;/strong&gt;: &lt;code&gt;disable_apps&lt;/code&gt;, &lt;code&gt;mirage&lt;/code&gt; fields&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WARP Connector&lt;/strong&gt;: &lt;code&gt;connections&lt;/code&gt; field&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Workers&lt;/strong&gt;: &lt;code&gt;environment&lt;/code&gt; parameter in Domains&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zones&lt;/strong&gt;: &lt;code&gt;ResponseBuffering&lt;/code&gt; page rule&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Bug Fixes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;mcp:&lt;/strong&gt; correct code tool API endpoint (&lt;a href=&quot;https://github.com/cloudflare/cloudflare-typescript/commit/599703c45672dc899455d74b124018efd4b75095&quot; target=&quot;_blank&quot;&gt;599703c&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mcp:&lt;/strong&gt; return correct lines on typescript errors (&lt;a href=&quot;https://github.com/cloudflare/cloudflare-typescript/commit/5d6f9998ed9999aaa95e1bda8cf50929f3555cf1&quot; target=&quot;_blank&quot;&gt;5d6f999&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;organization_profile:&lt;/strong&gt; fix bad reference (&lt;a href=&quot;https://github.com/cloudflare/cloudflare-typescript/commit/d84ea77094400055c06554812b84c2f0c8d00cc4&quot; target=&quot;_blank&quot;&gt;d84ea77&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;schema_validation:&lt;/strong&gt; correctly reflect model to openapi mapping (&lt;a href=&quot;https://github.com/cloudflare/cloudflare-typescript/commit/bb861516774b159d80e0f46a5f3abc5a4c9f9d49&quot; target=&quot;_blank&quot;&gt;bb86151&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers:&lt;/strong&gt; fix tests (&lt;a href=&quot;https://github.com/cloudflare/cloudflare-typescript/commit/2ee37f7adf5a4637d65f61fc225e135eec2579fc&quot; target=&quot;_blank&quot;&gt;2ee37f7&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Documentation&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Added deprecation notices with migration paths&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;api_gateway:&lt;/strong&gt; deprecate API Shield Schema Validation resources (&lt;a href=&quot;https://github.com/cloudflare/cloudflare-typescript/commit/8a4b20f7a572422f74179fbdb4f1c4fb555e3e40&quot; target=&quot;_blank&quot;&gt;8a4b20f&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Improved JSDoc examples across all resources&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers:&lt;/strong&gt; expose subdomain delete documentation (&lt;a href=&quot;https://github.com/cloudflare/cloudflare-typescript/commit/4f7cc1f2b8861a5b8abc193d287f78264a425062&quot; target=&quot;_blank&quot;&gt;4f7cc1f&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>SDK</category></item><item><title>Cloudflare Fundamentals, Terraform - Terraform v5.16.0 now available</title><link>https://developers.cloudflare.com/changelog/post/2026-01-20-terraform-v5160-provider/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-20-terraform-v5160-provider/</guid><description>&lt;p&gt;In January 2025, we announced the launch of the new Terraform v5 Provider. We greatly appreciate the proactive engagement and valuable feedback from the Cloudflare community following the v5 release. In response, we&apos;ve established a consistent and rapid &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5774&quot; target=&quot;_blank&quot;&gt;2-3 week cadence&lt;/a&gt; for releasing targeted improvements, demonstrating our commitment to stability and reliability.&lt;/p&gt;
&lt;p&gt;With the help of the community, we have a growing number of resources that we have marked as &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6237&quot; target=&quot;_blank&quot;&gt;stable&lt;/a&gt;, with that list continuing to grow with every release. The most used &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6237&quot; target=&quot;_blank&quot;&gt;resources&lt;/a&gt; are on track to be stable by the end of March 2026, when we will also be releasing a new migration tool to you migrate from v4 to v5 with ease.&lt;/p&gt;
&lt;p&gt;Thank you for continuing to raise issues. They make our provider stronger and help us build products that reflect your needs.&lt;/p&gt;
&lt;p&gt;This release includes bug fixes, the stabilization of even more popular resources, and more.&lt;/p&gt;
&lt;h4&gt;Features&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;custom_pages:&lt;/strong&gt; add &quot;waf_challenge&quot; as new supported error page type identifier in both resource and data source schemas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;list:&lt;/strong&gt; enhance CIDR validator to check for normalized CIDR notation requiring network address for IPv4 and IPv6&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;magic_wan_gre_tunnel:&lt;/strong&gt; add automatic_return_routing attribute for automatic routing control&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;magic_wan_gre_tunnel:&lt;/strong&gt; add BGP configuration support with new BGP model attribute&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;magic_wan_gre_tunnel:&lt;/strong&gt; add bgp_status computed attribute for BGP connection status information&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;magic_wan_gre_tunnel:&lt;/strong&gt; enhance schema with BGP-related attributes and validators&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;magic_wan_ipsec_tunnel:&lt;/strong&gt; add automatic_return_routing attribute for automatic routing control&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;magic_wan_ipsec_tunnel:&lt;/strong&gt; add BGP configuration support with new BGP model attribute&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;magic_wan_ipsec_tunnel:&lt;/strong&gt; add bgp_status computed attribute for BGP connection status information&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;magic_wan_ipsec_tunnel:&lt;/strong&gt; add custom_remote_identities attribute for custom identity configuration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;magic_wan_ipsec_tunnel:&lt;/strong&gt; enhance schema with BGP and identity-related attributes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ruleset:&lt;/strong&gt; add request body buffering support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ruleset:&lt;/strong&gt; enhance ruleset data source with additional configuration options&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_script:&lt;/strong&gt; add observability logs attributes to list data source model&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_script:&lt;/strong&gt; enhance list data source schema with additional configuration options&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Bug Fixes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;account_member&lt;/strong&gt;: fix resource importability issues&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dns_record:&lt;/strong&gt; remove unnecessary fmt.Sprintf wrapper around LoadTestCase call in test configuration helper function&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;load_balancer:&lt;/strong&gt; fix session_affinity_ttl type expectations to match Float64 in initial creation and Int64 after migration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_kv:&lt;/strong&gt; handle special characters correctly in URL encoding&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Documentation&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;account_subscription:&lt;/strong&gt; update schema description for rate_plan.sets attribute to clarify it returns an array of strings&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;api_shield:&lt;/strong&gt; add resource-level description for API Shield management of auth ID characteristics&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;api_shield:&lt;/strong&gt; enhance auth_id_characteristics.name attribute description to include JWT token configuration format requirements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;api_shield:&lt;/strong&gt; specify JSONPath expression format for JWT claim locations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;hyperdrive_config:&lt;/strong&gt; add description attribute to name attribute explaining its purpose in dashboard and API identification&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;hyperdrive_config:&lt;/strong&gt; apply description improvements across resource, data source, and list data source schemas&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;hyperdrive_config:&lt;/strong&gt; improve schema descriptions for cache settings to clarify default values&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;hyperdrive_config:&lt;/strong&gt; update port description to clarify defaults for different database types&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;For more information&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;Terraform Provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/terraform/&quot;&gt;Documentation on using Terraform with Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6237&quot; target=&quot;_blank&quot;&gt;List of stabilized resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Terraform</category></item><item><title>WAF - WAF Release - 2026-01-20</title><link>https://developers.cloudflare.com/changelog/post/2026-01-20-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-20-waf-release/</guid><description>&lt;p&gt;This week&apos;s release focuses on improvements to existing detections to enhance coverage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Existing rule enhancements have been deployed to improve detection resilience against SQL injection.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;a291bd530fa346d18cc1ce5a68d90c8f &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;SQLi - Comment - Beta&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This rule is merged into the original rule &quot;SQLi - Comment&quot; (ID: 42c424998d2a42c9808ab49c6d8d8fe4 )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;da289f9e692e4f5397d915fbfaa045cf &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;SQLi - Comparison - Beta&lt;/td&gt;
&lt;td&gt;Log&lt;/td&gt;
&lt;td&gt;Block&lt;/td&gt;
&lt;td&gt;This rule is merged into the original rule &quot;SQLi - Comparison&quot; (ID: 8166da327a614849bfa29317e7907480 )&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Use auxiliary Workers alongside full-stack frameworks</title><link>https://developers.cloudflare.com/changelog/post/2026-01-20-auxiliary-workers/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-20-auxiliary-workers/</guid><description>&lt;p&gt;Auxiliary Workers are now fully supported when using full-stack frameworks, such as &lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/web-apps/react-router/&quot;&gt;React Router&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/web-apps/tanstack-start/&quot;&gt;TanStack Start&lt;/a&gt;, that integrate with the &lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/reference/api/&quot;&gt;Cloudflare Vite plugin&lt;/a&gt;.
They are included alongside the framework&apos;s build output in the build output directory.
Note that this feature requires Vite 7 or above.&lt;/p&gt;
&lt;p&gt;Auxiliary Workers are additional Workers that can be called via &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings/&quot;&gt;service bindings&lt;/a&gt; from your main (entry) Worker.
They are defined in the plugin config, as in the example below:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;vite&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tanstackStart&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@tanstack/react-start/plugin/vite&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&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;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/vite-plugin&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&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;plugins&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;tanstackStart&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;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;&lt;/span&gt;&lt;span&gt;viteEnvironment&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ssr&quot;&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;auxiliaryWorkers&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; configPath&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./wrangler.aux.jsonc&quot;&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;)&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;;&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;See the Vite plugin &lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/reference/api/&quot;&gt;API docs&lt;/a&gt; for more info.&lt;/p&gt;</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Import SQL files as additional modules by default</title><link>https://developers.cloudflare.com/changelog/post/2026-01-20-sql-module-rule/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-20-sql-module-rule/</guid><description>&lt;p&gt;The &lt;code&gt;.sql&lt;/code&gt; file extension is now automatically configured to be importable in your Worker code when using &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/bundling/#including-non-javascript-modules&quot;&gt;Wrangler&lt;/a&gt; or the &lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/reference/non-javascript-modules/&quot;&gt;Cloudflare Vite plugin&lt;/a&gt;.
This is particular useful for importing migrations in Durable Objects and means you no longer need to configure custom rules when using &lt;a href=&quot;https://orm.drizzle.team/docs/connect-cloudflare-do&quot; target=&quot;_blank&quot;&gt;Drizzle&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;SQL files are imported as JavaScript strings:&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;// `example` will be a JavaScript string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;example&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;./example.sql&quot;&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;</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare Fundamentals - Enhanced HTTP/3 request cancellation visibility</title><link>https://developers.cloudflare.com/changelog/post/2026-01-19-http3-499-reporting-improvement/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-19-http3-499-reporting-improvement/</guid><description>&lt;h4&gt;Enhanced HTTP/3 request cancellation visibility&lt;/h4&gt;
&lt;p&gt;Cloudflare now provides more accurate visibility into HTTP/3 client request cancellations, giving you better insight into real client behavior and reducing unnecessary load on your origins.&lt;/p&gt;
&lt;p&gt;Previously, when an HTTP/3 client cancelled a request, the cancellation was not always actioned immediately. This meant requests could continue through the CDN — potentially all the way to your origin — even after the client had abandoned them. In these cases, logs would show the upstream response status (such as &lt;code&gt;200&lt;/code&gt; or a timeout-related code) rather than reflecting the client cancellation.&lt;/p&gt;
&lt;p&gt;Now, Cloudflare terminates cancelled HTTP/3 requests immediately and accurately logs them with a &lt;code&gt;499&lt;/code&gt; status code.&lt;/p&gt;
&lt;hr&gt;
&lt;h4&gt;Better observability for client behavior&lt;/h4&gt;
&lt;p&gt;When HTTP/3 clients cancel requests, Cloudflare now immediately reflects this in your logs with a &lt;code&gt;499&lt;/code&gt; status code. This gives you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;More accurate traffic analysis&lt;/strong&gt;: Understand exactly when and how often clients cancel requests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Clearer debugging&lt;/strong&gt;: Distinguish between true errors and intentional client cancellations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Better availability metrics&lt;/strong&gt;: Separate client-initiated cancellations from server-side issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Reduced origin load&lt;/h4&gt;
&lt;p&gt;Cloudflare now terminates cancelled requests faster, which means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Less wasted compute&lt;/strong&gt;: Your origin no longer processes requests that clients have already abandoned.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lower bandwidth usage&lt;/strong&gt;: Responses are no longer generated and transmitted for cancelled requests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved efficiency&lt;/strong&gt;: Resources are freed up to handle active requests.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;What to expect in your logs&lt;/h4&gt;
&lt;p&gt;You may notice an increase in &lt;code&gt;499&lt;/code&gt; status codes for HTTP/3 traffic. For HTTP/3, a &lt;code&gt;499&lt;/code&gt; indicates the client &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc9114#section-4.1.1&quot; target=&quot;_blank&quot;&gt;cancelled the request stream&lt;/a&gt; before receiving a complete response — the underlying connection may remain open. This is a normal part of web traffic.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: If you use &lt;code&gt;499&lt;/code&gt; codes in availability calculations, consider whether client-initiated cancellations should be excluded from error rates. These typically represent normal user behavior — such as closing a browser, navigating away from a page, mobile network drops, or cancelling a download — rather than service issues.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/support/troubleshooting/http-status-codes/4xx-client-error/error-499/&quot;&gt;Error 499&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 19 Jan 2026 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Magic Transit, Cloudflare Network Firewall, Cloudflare WAN, Network Flow - Network Services navigation update</title><link>https://developers.cloudflare.com/changelog/post/2026-01-15-networking-navigation-update/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-15-networking-navigation-update/</guid><description>&lt;p&gt;The Network Services menu structure in Cloudflare&apos;s dashboard has been updated to reflect solutions and capabilities instead of product names. This will make it easier for you to find what you need and better reflects how our services work together.&lt;/p&gt;
&lt;p&gt;Your existing configurations will remain the same, and you will have access to all of the same features and functionality.&lt;/p&gt;
&lt;p&gt;The changes visible in your dashboard may vary based on the products you use. Overall, changes relate to &lt;a href=&quot;https://developers.cloudflare.com/magic-transit/&quot; target=&quot;_blank&quot;&gt;Magic Transit&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/magic-wan/&quot; target=&quot;_blank&quot;&gt;Magic WAN&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-network-firewall/&quot; target=&quot;_blank&quot;&gt;Magic Firewall&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summary of changes:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A new &lt;strong&gt;Overview&lt;/strong&gt; page provides access to the most common tasks across Magic Transit and Magic WAN.&lt;/li&gt;
&lt;li&gt;Product names have been removed from top-level navigation.&lt;/li&gt;
&lt;li&gt;Magic Transit and Magic WAN configuration is now organized under &lt;strong&gt;Routes&lt;/strong&gt; and &lt;strong&gt;Connectors&lt;/strong&gt;. For example, you will find IP Prefixes under &lt;strong&gt;Routes&lt;/strong&gt;, and your GRE/IPsec Tunnels under &lt;strong&gt;Connectors.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Magic Firewall policies are now called &lt;strong&gt;Firewall Policies.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Magic WAN Connectors and Connector On-Ramps are now referenced in the dashboard as &lt;strong&gt;Appliances&lt;/strong&gt; and &lt;strong&gt;Appliance profiles.&lt;/strong&gt; They can be found under &lt;strong&gt;Connectors &gt; Appliances.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Network analytics, network health, and real-time analytics are now available under &lt;strong&gt;Insights.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Packet Captures are found under &lt;strong&gt;Insights &gt; Diagnostics.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;You can manage your Sites from &lt;strong&gt;Insights &gt; Network health.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;You can find Magic Network Monitoring under &lt;strong&gt;Insights &gt; Network flow&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you would like to provide feedback, complete &lt;a href=&quot;https://forms.gle/htWyjRsTjw1usdis5&quot; target=&quot;_blank&quot;&gt;this form&lt;/a&gt;. You can also find these details in the January 7, 2026 email titled &lt;strong&gt;[FYI] Upcoming Network Services Dashboard Navigation Update&lt;/strong&gt;.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/networking-overview-and-navigation.CeMgEFaZ_Z20HKl.webp&quot; alt=&quot;Networking Navigation&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate><product>Magic Transit</product><category>Magic Transit</category><category>Cloudflare Network Firewall</category><category>Cloudflare WAN</category><category>Network Flow</category></item><item><title>Risk Score - Support for CrowdStrike device scores in User Risk Scoring</title><link>https://developers.cloudflare.com/changelog/post/2026-1-15-crowdstrike-score/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-1-15-crowdstrike-score/</guid><description>&lt;p&gt;Cloudflare One has expanded its [User Risk Scoring] (/cloudflare-one/insights/risk-score/) capabilities by introducing two new behaviors for organizations using the [CrowdStrike integration] (/cloudflare-one/integrations/service-providers/crowdstrike/).&lt;/p&gt;
&lt;p&gt;Administrators can now automatically escalate the risk score of a user if their device matches specific CrowdStrike Zero Trust Assessment (ZTA) score ranges. This allows for more granular security policies that respond dynamically to the health of the endpoint.&lt;/p&gt;
&lt;p&gt;New risk behaviors
The following risk scoring behaviors are now available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CrowdStrike low device score: Automatically increases a user&apos;s risk score when the connected device reports a &quot;Low&quot; score from CrowdStrike.&lt;/li&gt;
&lt;li&gt;CrowdStrike medium device score: Automatically increases a user&apos;s risk score when the connected device reports a &quot;Medium&quot; score from CrowdStrike.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These scores are derived from [CrowdStrike device posture attributes] (/cloudflare-one/integrations/service-providers/crowdstrike/#device-posture-attributes), including OS signals and sensor configurations.&lt;/p&gt;</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate><product>Risk Score</product><category>Risk Score</category></item><item><title>Cloudflare Tunnel, Cloudflare Tunnel for SASE - Verify WARP Connector connectivity with a simple ping</title><link>https://developers.cloudflare.com/changelog/post/2026-01-15-warp-connector-ping-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-15-warp-connector-ping-support/</guid><description>&lt;p&gt;We have made it easier to validate connectivity when deploying &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/warp-connector/&quot;&gt;WARP Connector&lt;/a&gt; as part of your &lt;a href=&quot;https://developers.cloudflare.com/reference-architecture/architectures/sase/#connecting-networks&quot;&gt;software-defined private network&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can now &lt;code&gt;ping&lt;/code&gt; the WARP Connector host directly on its LAN IP address immediately after installation. This provides a fast, familiar way to confirm that the Connector is online and reachable within your network before testing access to downstream services.&lt;/p&gt;
&lt;p&gt;Starting with &lt;a href=&quot;https://developers.cloudflare.com/changelog/2026-01-13-warp-linux-ga/&quot;&gt;version 2025.10.186.0&lt;/a&gt;, WARP Connector responds to traffic addressed to its own LAN IP, giving you immediate visibility into Connector reachability.&lt;/p&gt;
&lt;p&gt;Learn more about deploying &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/warp-connector/&quot;&gt;WARP Connector&lt;/a&gt; and building private network connectivity with &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/&quot;&gt;Cloudflare One&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate><product>Cloudflare Tunnel</product><category>Cloudflare Tunnel</category><category>Cloudflare Tunnel for SASE</category></item><item><title>WAF - WAF Release - 2026-01-15</title><link>https://developers.cloudflare.com/changelog/post/2026-01-15-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-15-waf-release/</guid><description>&lt;p&gt;This week&apos;s release focuses on improvements to existing detections to enhance coverage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Existing rule enhancements have been deployed to improve detection resilience against SQL Injection.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;eb3f44c07266448b9fa54ee7ad7dad3e &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;SQLi - String Function - Beta&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This rule is merged into the original rule &quot;SQLi - String Function&quot; (ID: 63e03eecddfc4b3fb0cad587d32b798c )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;adf076af09b2484ca9e7881f9e553ad3 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;SQLi - Sub Query - Beta&lt;/td&gt;
&lt;td&gt;Log&lt;/td&gt;
&lt;td&gt;Block&lt;/td&gt;
&lt;td&gt;This rule is merged into the original rule &quot;SQLi - Sub Query&quot; (ID: 6ec5ecf52c094330aff99a38743e66b1 )&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers AI - Launching FLUX.2 [klein] 4B on Workers AI</title><link>https://developers.cloudflare.com/changelog/post/2026-01-15-flux-2-klein-4b-workers-ai/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-15-flux-2-klein-4b-workers-ai/</guid><description>&lt;p&gt;We&apos;ve partnered with Black Forest Labs (BFL) again to bring their optimized FLUX.2 [klein] 4B model to Workers AI! This distilled model offers faster generation and cost-effective pricing, while maintaining great output quality. With a fixed 4-step inference process, Klein 4B is ideal for rapid prototyping and real-time applications where speed matters.&lt;/p&gt;
&lt;p&gt;Read the &lt;a href=&quot;https://bfl.ai/blog&quot; target=&quot;_blank&quot;&gt;BFL blog&lt;/a&gt; to learn more about the model itself, or try it out yourself on our &lt;a href=&quot;https://multi-modal.ai.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;multi modal playground&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pricing documentation is available on the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/flux-2-klein-4b/&quot;&gt;model page&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/platform/pricing/&quot;&gt;pricing page&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Workers AI Platform specifics&lt;/h4&gt;
&lt;p&gt;The model hosted on Workers AI is optimized for speed with a &lt;strong&gt;fixed 4-step inference process&lt;/strong&gt; and supports up to 4 image inputs. Since this is a distilled model, the &lt;code&gt;steps&lt;/code&gt; parameter is fixed at 4 and cannot be adjusted. Like FLUX.2 [dev], this image model uses multipart form data inputs, even if you just have a prompt.&lt;/p&gt;
&lt;p&gt;With the REST API, the multipart form data input looks like this:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--request&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&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;--url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/black-forest-labs/flux-2-klein-4b&apos;&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Authorization: Bearer {TOKEN}&apos;&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Content-Type: multipart/form-data&apos;&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;--form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;prompt=a sunset at the alps&apos;&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;--form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width=&lt;/span&gt;&lt;span&gt;1024&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;--form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;height=&lt;/span&gt;&lt;span&gt;1024&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;With the Workers AI binding, you can use it as such:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FormData&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;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;prompt&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;a sunset with a dog&quot;&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;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;width&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1024&quot;&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;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;height&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1024&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// FormData doesn&apos;t expose its serialized body or boundary. Passing it to a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Request (or Response) constructor serializes it and generates the Content-Type&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// header with the boundary, which is required for the server to parse the multipart fields.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formResponse&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;form&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formStream&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formResponse&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formContentType&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formResponse&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;content-type&apos;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;@cf/black-forest-labs/flux-2-klein-4b&quot;&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;multipart&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;body&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formStream&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;contentType&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formContentType&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;;&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;The parameters you can send to the model are detailed here:&lt;/p&gt;
&lt;details&gt;&lt;p&gt;&lt;/p&gt;&lt;summary&gt;JSON Schema for Model&lt;/summary&gt;
&lt;strong&gt;Required Parameters&lt;/strong&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;prompt&lt;/code&gt; (string) - Text description of the image to generate&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Optional Parameters&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;input_image_0&lt;/code&gt; (string) - Binary image&lt;/li&gt;
&lt;li&gt;&lt;code&gt;input_image_1&lt;/code&gt; (string) - Binary image&lt;/li&gt;
&lt;li&gt;&lt;code&gt;input_image_2&lt;/code&gt; (string) - Binary image&lt;/li&gt;
&lt;li&gt;&lt;code&gt;input_image_3&lt;/code&gt; (string) - Binary image&lt;/li&gt;
&lt;li&gt;&lt;code&gt;guidance&lt;/code&gt; (float) - Guidance scale for generation. Higher values follow the prompt more closely&lt;/li&gt;
&lt;li&gt;&lt;code&gt;width&lt;/code&gt; (integer) - Width of the image, default &lt;code&gt;1024&lt;/code&gt; Range: 256-1920&lt;/li&gt;
&lt;li&gt;&lt;code&gt;height&lt;/code&gt; (integer) - Height of the image, default &lt;code&gt;768&lt;/code&gt; Range: 256-1920&lt;/li&gt;
&lt;li&gt;&lt;code&gt;seed&lt;/code&gt; (integer) - Seed for reproducibility&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Since this is a distilled model, the &lt;code&gt;steps&lt;/code&gt; parameter is fixed at 4 and cannot be adjusted.&lt;/p&gt;&lt;/details&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;## Multi-Reference Images&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;The FLUX.2 klein-4b model supports generating images based on reference images, just like FLUX.2 [dev]. You can use this feature to apply the style of one image to another, add a new character to an image, or iterate on past generated images. You would use it with the same multipart form data structure, with the input images in binary. The model supports up to 4 input images.&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;For the prompt, you can reference the images based on the index, like `take the subject of image 1 and style it like image 0` or even use natural language like `place the dog beside the woman`.&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;Note: you have to name the input parameter as `input_image_0`, `input_image_1`, `input_image_2`, `input_image_3` for it to work correctly. All input images must be smaller than 512x512.&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;```bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl --request POST \&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;--url &apos;https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/black-forest-labs/flux-2-klein-4b&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;&lt;/span&gt;&lt;span&gt;--header &apos;Authorization: Bearer {TOKEN}&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;&lt;/span&gt;&lt;span&gt;--header &apos;Content-Type: multipart/form-data&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;&lt;/span&gt;&lt;span&gt;--form &apos;prompt=take the subject of image 1 and style it like image 0&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;&lt;/span&gt;&lt;span&gt;--form input_image_0=@/Users/johndoe/Desktop/icedoutkeanu.png \&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;--form input_image_1=@/Users/johndoe/Desktop/me.png \&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;--form width=1024 \&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;--form height=1024&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;Through Workers AI Binding:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;//helper function to convert ReadableStream to Blob&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamToBlob&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;ReadableStream&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;contentType&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;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Blob&lt;/span&gt;&lt;span&gt;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;reader&lt;/span&gt;&lt;span&gt; &lt;/span&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;getReader&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;chunks&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;true&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&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;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;reader&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;read&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;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;break&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;chunks&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&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;/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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Blob&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;chunks&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;contentType&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;/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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;http://image-url&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;http://image-url&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FormData&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image_blob0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamToBlob&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;image0&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;image/png&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image_blob1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamToBlob&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;image1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;image/png&quot;&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;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;input_image_0&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image_blob0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;input_image_1&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image_blob1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;prompt&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;take the subject of image 1 and style it like image 0&apos;&lt;/span&gt;&lt;span&gt;)&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;// FormData doesn&apos;t expose its serialized body or boundary. Passing it to a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Request (or Response) constructor serializes it and generates the Content-Type&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// header with the boundary, which is required for the server to parse the multipart fields.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formResponse&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;form&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formStream&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formResponse&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formContentType&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formResponse&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;content-type&apos;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;@cf/black-forest-labs/flux-2-klein-4b&quot;&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;multipart&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;body&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formStream&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;contentType&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formContentType&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>Security Center - URL Scanner now supports PDF report downloads</title><link>https://developers.cloudflare.com/changelog/post/2026-01-14-download-url-scanner-report-pdf/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-14-download-url-scanner-report-pdf/</guid><description>&lt;p&gt;We have expanded the reporting capabilities of the Cloudflare URL Scanner. In addition to existing JSON and HAR exports, users can now generate and download a &lt;strong&gt;PDF report&lt;/strong&gt; directly from the Cloudflare dashboard.
This update streamlines how security analysts can share findings with stakeholders who may not have access to the Cloudflare dashboard or specialized tools to parse JSON and HAR files.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Benefits:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Consolidate scan results, including screenshots, security signatures, and metadata, into a single, portable document&lt;/li&gt;
&lt;li&gt;Easily share professional-grade summaries with non-technical stakeholders or legal teams for faster incident response&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What’s new:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PDF Export Button:&lt;/strong&gt; A new download option is available in the URL Scanner results page within the Cloudflare dashboard&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unified Documentation:&lt;/strong&gt; Access all scan details—from high-level summaries to specific security flags—in one offline-friendly file&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get started with the URL Scanner and explore our reporting capabilities, visit the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/url_scanner/&quot; target=&quot;_blank&quot;&gt;URL Scanner API documentation&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;</description><pubDate>Wed, 14 Jan 2026 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.10.186.0)</title><link>https://developers.cloudflare.com/changelog/post/2026-01-13-warp-windows-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-13-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes, improvements, and new features. New features include the ability to manage WARP client connectivity for all devices in your fleet using an &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/external-disconnect/&quot;&gt;external signal&lt;/a&gt;, and a new WARP client device posture check for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/reusable-components/posture-checks/warp-client-checks/antivirus/&quot;&gt;Antivirus&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added a new feature to manage WARP client connectivity for all devices using an &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/external-disconnect/&quot;&gt;external signal&lt;/a&gt;. This feature allows administrators to send a global signal from an on-premises HTTPS endpoint that force disconnects or reconnects all WARP clients in an account based on configuration set on the endpoint.&lt;/li&gt;
&lt;li&gt;Fixed an issue that caused occasional audio degradation and increased CPU usage on Windows by optimizing route configurations for large &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/split-tunnels/#domain-based-split-tunnels&quot;&gt;domain-based split tunnel rules&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/&quot;&gt;Local Domain Fallback&lt;/a&gt; feature has been fixed for devices running WARP client version 2025.4.929.0 and newer. Previously, these devices could experience failures with Local Domain Fallback unless a fallback server was explicitly configured. This configuration is no longer a requirement for the feature to function correctly.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode&quot;&gt;Proxy mode&lt;/a&gt; now supports transparent HTTP proxying in addition to CONNECT-based proxying.&lt;/li&gt;
&lt;li&gt;Fixed an issue where sending large messages to the daemon by Inter-Process Communication (IPC) could cause the daemon to fail and result in service interruptions.&lt;/li&gt;
&lt;li&gt;Added support for a new WARP client device posture check for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/reusable-components/posture-checks/warp-client-checks/antivirus/&quot;&gt;Antivirus&lt;/a&gt;. The check confirms the presence of an antivirus program on a Windows device with the option to check if the antivirus is up to date.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For Windows 11 24H2 users, Microsoft has confirmed a regression that may lead to performance issues like mouse lag, audio cracking, or other slowdowns. Cloudflare recommends users experiencing these issues upgrade to a minimum &lt;a href=&quot;https://support.microsoft.com/en-us/topic/july-8-2025-kb5062553-os-build-26100-4652-523e69cb-051b-43c6-8376-6a76d6caeefd&quot;&gt;Windows 11 24H2 KB5062553&lt;/a&gt; or higher for resolution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with KB5055523 installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 13 Jan 2026 15:48:19 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.10.186.0)</title><link>https://developers.cloudflare.com/changelog/post/2026-01-13-warp-macos-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-13-warp-macos-ga/</guid><description>&lt;p&gt;A new GA release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes, improvements, and new features, including the ability to manage WARP client connectivity for all devices in your fleet using an &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/external-disconnect/&quot;&gt;external signal&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/&quot;&gt;Local Domain Fallback&lt;/a&gt; feature has been fixed for devices running WARP client version 2025.4.929.0 and newer. Previously, these devices could experience failures with Local Domain Fallback unless a fallback server was explicitly configured. This configuration is no longer a requirement for the feature to function correctly.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode&quot;&gt;Proxy mode&lt;/a&gt; now supports transparent HTTP proxying in addition to CONNECT-based proxying.&lt;/li&gt;
&lt;li&gt;Added a new feature to manage WARP client connectivity for all devices using an &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/external-disconnect/&quot;&gt;external signal&lt;/a&gt;. This feature allows administrators to send a global signal from an on-premises HTTPS endpoint that force disconnects or reconnects all WARP clients in an account based on configuration set on the endpoint.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 13 Jan 2026 15:48:17 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for Linux (version 2025.10.186.0)</title><link>https://developers.cloudflare.com/changelog/post/2026-01-13-warp-linux-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-13-warp-linux-ga/</guid><description>&lt;p&gt;A new GA release for the Linux WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes, improvements, and new features, including the ability to manage WARP client connectivity for all devices in your fleet using an &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/external-disconnect/&quot;&gt;external signal&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;WARP client version 2025.8.779.0 introduced an updated public key for Linux packages. The public key must be updated if it was installed before September 12, 2025 to ensure the repository remains functional after December 4, 2025. Instructions to make this update are available at &lt;a href=&quot;https://pkg.cloudflareclient.com&quot;&gt;pkg.cloudflareclient.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/&quot;&gt;Local Domain Fallback&lt;/a&gt; feature has been fixed for devices running WARP client version 2025.4.929.0 and newer. Previously, these devices could experience failures with Local Domain Fallback unless a fallback server was explicitly configured. This configuration is no longer a requirement for the feature to function correctly.&lt;/li&gt;
&lt;li&gt;Linux &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/reusable-components/posture-checks/warp-client-checks/disk-encryption/&quot;&gt;disk encryption posture check&lt;/a&gt; now supports non-filesystem encryption types like &lt;code&gt;dm-crypt&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode&quot;&gt;Proxy mode&lt;/a&gt; now supports transparent HTTP proxying in addition to CONNECT-based proxying.&lt;/li&gt;
&lt;li&gt;Fixed an issue where the GUI becomes unresponsive when the &lt;strong&gt;Re-Authenticate in browser&lt;/strong&gt; button is clicked.&lt;/li&gt;
&lt;li&gt;Added a new feature to manage WARP client connectivity for all devices using an &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/external-disconnect/&quot;&gt;external signal&lt;/a&gt;. This feature allows administrators to send a global signal from an on-premises HTTPS endpoint that force disconnects or reconnects all WARP clients in an account based on configuration set on the endpoint.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 13 Jan 2026 01:53:14 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>AI Crawl Control - AI Crawl Control Read Only role now available</title><link>https://developers.cloudflare.com/changelog/post/2026-01-13-ai-crawl-control-read-only-role/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-13-ai-crawl-control-read-only-role/</guid><description>&lt;p&gt;Account administrators can now assign the &lt;strong&gt;AI Crawl Control Read Only&lt;/strong&gt; role to provide read-only access to AI Crawl Control at the domain level.&lt;/p&gt;
&lt;p&gt;Users with this role can view the &lt;strong&gt;Overview&lt;/strong&gt;, &lt;strong&gt;Crawlers&lt;/strong&gt;, &lt;strong&gt;Metrics&lt;/strong&gt;, &lt;strong&gt;Robots.txt&lt;/strong&gt;, and &lt;strong&gt;Settings&lt;/strong&gt; tabs but cannot modify crawler actions or settings.&lt;/p&gt;
&lt;p&gt;This role is specific for AI Crawl Control. You still require correct permissions to access other areas / features of the dashboard.&lt;/p&gt;
&lt;p&gt;To assign, go to &lt;strong&gt;Manage Account&lt;/strong&gt; &gt; &lt;strong&gt;Members&lt;/strong&gt; and add a policy with the &lt;strong&gt;AI Crawl Control Read Only&lt;/strong&gt; role scoped to the desired domain.&lt;/p&gt;</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><product>AI Crawl Control</product><category>AI Crawl Control</category></item><item><title>Workers - `wrangler types` now generates types for all environments</title><link>https://developers.cloudflare.com/changelog/post/2026-01-13-wrangler-types-multi-environment/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-13-wrangler-types-multi-environment/</guid><description>&lt;p&gt;The &lt;code&gt;wrangler types&lt;/code&gt; command now generates TypeScript types for bindings from &lt;strong&gt;all environments&lt;/strong&gt; defined in your Wrangler configuration file by default.&lt;/p&gt;
&lt;p&gt;Previously, &lt;code&gt;wrangler types&lt;/code&gt; only generated types for bindings in the top-level configuration (or a single environment when using the &lt;code&gt;--env&lt;/code&gt; flag). This meant that if you had environment-specific bindings — for example, a KV namespace only in production or an R2 bucket only in staging — those bindings would be missing from your generated types, causing TypeScript errors when accessing them.&lt;/p&gt;
&lt;p&gt;Now, running &lt;code&gt;wrangler types&lt;/code&gt; collects bindings from all environments and includes them in the generated &lt;code&gt;Env&lt;/code&gt; type. This ensures your types are complete regardless of which environment you deploy to.&lt;/p&gt;
&lt;h4&gt;Generating types for a specific environment&lt;/h4&gt;
&lt;p&gt;If you want the previous behavior of generating types for only a specific environment, you can use the &lt;code&gt;--env&lt;/code&gt; flag:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;types&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;production&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;Learn more about &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/general/#types&quot;&gt;generating types for your Worker&lt;/a&gt; in the Wrangler documentation.&lt;/p&gt;</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Email security - Enhanced visibility for post-delivery actions</title><link>https://developers.cloudflare.com/changelog/post/2026-01-12-enhanced-visibility-post-delivery-actions/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-12-enhanced-visibility-post-delivery-actions/</guid><description>&lt;p&gt;The Action Log now provides enriched data for post-delivery actions to improve troubleshooting. In addition to success confirmations, failed actions now display the targeted Destination folder and a specific failure reason within the Activity field.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;Error messages will vary depending on whether you are using Google Workspace or Microsoft 365.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/enhanced-visibility-post-delivery-actions.BNiyPtJU_GFx2V.webp&quot; alt=&quot;failure-log-example&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;This update allows you to see the full lifecycle of a failed action. For instance, if an administrator tries to move an email that has already been deleted or moved manually, the log will now show the multiple retry attempts and the specific destination error.&lt;/p&gt;
&lt;p&gt;This applies to all Email Security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 12 Jan 2026 11:15:33 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>Rules - Metro code field now available in Rules</title><link>https://developers.cloudflare.com/changelog/post/2026-01-12-dma-metro-code-field/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-12-dma-metro-code-field/</guid><description>&lt;p&gt;The &lt;code&gt;ip.src.metro_code&lt;/code&gt; field in the Ruleset Engine is now populated with DMA (Designated Market Area) data.&lt;/p&gt;
&lt;p&gt;You can use this field to build rules that target traffic based on geographic market areas, enabling more granular location-based policies for your applications.&lt;/p&gt;
&lt;h4&gt;Field details&lt;/h4&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Field&lt;/th&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;ip.src.metro_code&lt;/code&gt;&lt;/td&gt;&lt;td&gt;String | null&lt;/td&gt;&lt;td&gt;The metro code (DMA) of the incoming request&apos;s IP address. Returns the designated market area code for the client&apos;s location.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Example filter expression:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ip.src.metro_code eq &quot;501&quot;&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 the &lt;a href=&quot;https://developers.cloudflare.com/ruleset-engine/rules-language/fields/reference/ip.src.metro_code/&quot;&gt;Fields reference&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 12 Jan 2026 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Security Center - Cloudflare Threat Events now support STIX2 format</title><link>https://developers.cloudflare.com/changelog/post/2026-01-12-stix2-available-for-threat-events-api/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-12-stix2-available-for-threat-events-api/</guid><description>&lt;p&gt;We are excited to announce that &lt;strong&gt;Cloudflare Threat Events&lt;/strong&gt; now supports the &lt;strong&gt;STIX2 (Structured Threat Information Expression)&lt;/strong&gt; format. This was a highly requested feature designed to streamline how security teams consume and act upon our threat intelligence.&lt;/p&gt;
&lt;p&gt;By adopting this industry-standard format, you can now integrate Cloudflare&apos;s threat events data more effectively into your existing security ecosystem.&lt;/p&gt;
&lt;h4&gt;Key benefits&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Eliminate the need for custom parsers, as STIX2 allows for &quot;out of the box&quot; ingestion into major &lt;strong&gt;Threat Intel Platforms (TIPs)&lt;/strong&gt;, &lt;strong&gt;SIEMs&lt;/strong&gt;, and &lt;strong&gt;SOAR&lt;/strong&gt; tools.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;STIX2 provides a standardized way to represent relationships between indicators, sightings, and threat actors, giving your analysts a clearer picture of the threat landscape.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For technical details on how to query events using this format, please refer to our &lt;a href=&quot;https://developers.cloudflare.com/api/resources/cloudforce_one/subresources/threat_events/methods/list/&quot; target=&quot;_blank&quot;&gt;Threat Events API Documentation&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;</description><pubDate>Mon, 12 Jan 2026 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>WAF - WAF Release - 2026-01-12</title><link>https://developers.cloudflare.com/changelog/post/2026-01-12-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-12-waf-release/</guid><description>&lt;p&gt;This week&apos;s release focuses on improvements to existing detections to enhance coverage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Existing rule enhancements have been deployed to improve detection resilience against SQL Injection.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;72963b917ef74697b5bde02f48a1841a &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;SQLi - AND/OR MAKE_SET/ELT - Beta&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This rule is merged into the original rule &quot;SQLi - AND/OR MAKE_SET/ELT&quot; (ID: 0f41a593c8fe42c38a26f709252d3934 )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;adf076af09b2484ca9e7881f9e553ad3 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;SQLi - Benchmark Function - Beta&lt;/td&gt;
&lt;td&gt;Log&lt;/td&gt;
&lt;td&gt;Block&lt;/td&gt;
&lt;td&gt;This rule is merged into the original rule &quot;SQLi - Benchmark Function&quot; (ID: ac4e9ebfb43a4f3998f6072d2ebc44ad )&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 12 Jan 2026 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Validate your generated types with `wrangler types --check`</title><link>https://developers.cloudflare.com/changelog/post/2026-01-11-wrangler-types-check/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-11-wrangler-types-check/</guid><description>&lt;p&gt;Wrangler now supports a &lt;code&gt;--check&lt;/code&gt; flag for the &lt;code&gt;wrangler types&lt;/code&gt; command. This flag validates that your generated types are up to date without writing any changes to disk.&lt;/p&gt;
&lt;p&gt;This is useful in CI/CD pipelines where you want to ensure that developers have regenerated their types after making changes to their Wrangler configuration. If the types are out of date, the command will exit with a non-zero status code.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&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;types&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--check&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;If your types are up to date, the command will succeed silently. If they are out of date, you&apos;ll see an error message indicating which files need to be regenerated.&lt;/p&gt;
&lt;p&gt;For more information, see the &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/general/#types&quot;&gt;Wrangler types documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 12 Jan 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers, Queues - Get notified when your Workers builds succeed or fail</title><link>https://developers.cloudflare.com/changelog/post/2025-12-11-builds-event-subscriptions/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-11-builds-event-subscriptions/</guid><description>&lt;p&gt;You can now receive notifications when your Workers&apos; builds start, succeed, fail, or get cancelled using &lt;a href=&quot;https://developers.cloudflare.com/queues/event-subscriptions/&quot;&gt;Event Subscriptions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/&quot;&gt;Workers Builds&lt;/a&gt; publishes events to a &lt;a href=&quot;https://developers.cloudflare.com/queues/&quot;&gt;Queue&lt;/a&gt; that your Worker can read messages from, and then send notifications wherever you need — Slack, Discord, email, or any webhook endpoint.&lt;/p&gt;
&lt;p&gt;You can deploy &lt;a href=&quot;https://github.com/cloudflare/templates/tree/main/workers-builds-notifications-template&quot; target=&quot;_blank&quot;&gt;this Worker&lt;/a&gt; to your own Cloudflare account to send build notifications to Slack:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/templates/tree/main/workers-builds-notifications-template&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://deploy.workers.cloudflare.com/button&quot; alt=&quot;Deploy to Cloudflare&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The template includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build status with Preview/Live URLs for successful deployments&lt;/li&gt;
&lt;li&gt;Inline error messages for failed builds&lt;/li&gt;
&lt;li&gt;Branch, commit hash, and author name&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/builds-notifications-slack.rcRiU95L_169ufw.webp&quot; alt=&quot;Slack notifications showing build events&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;For setup instructions, refer to the &lt;a href=&quot;https://github.com/cloudflare/templates/tree/main/workers-builds-notifications-template#readme&quot; target=&quot;_blank&quot;&gt;template README&lt;/a&gt; or the &lt;a href=&quot;https://developers.cloudflare.com/queues/event-subscriptions/manage-event-subscriptions/&quot;&gt;Event Subscriptions documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 09 Jan 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category><category>Queues</category></item><item><title>Workers - Shell tab completions for Wrangler CLI</title><link>https://developers.cloudflare.com/changelog/post/2026-01-09-wrangler-tab-completion/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-09-wrangler-tab-completion/</guid><description>&lt;p&gt;Wrangler now includes built-in shell tab completion support, making it faster and easier to navigate commands without memorizing every option. Press Tab as you type to autocomplete commands, subcommands, flags, and even option values like log levels.&lt;/p&gt;
&lt;p&gt;Tab completions are supported for Bash, Zsh, Fish, and PowerShell.&lt;/p&gt;
&lt;h4&gt;Setup&lt;/h4&gt;
&lt;p&gt;Generate the completion script for your shell and add it to your configuration file:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;complete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bash&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;~/.bashrc&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;# Zsh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;complete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;zsh&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;~/.zshrc&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;# Fish&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;complete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fish&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;~/.config/fish/config.fish&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;# PowerShell&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;complete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;powershell&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$PROFILE&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;After adding the script, restart your terminal or source your configuration file for the changes to take effect. Then you can simply press Tab to see available completions:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;d&amp;#x3C;TAB&gt;&lt;/span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;# completes to &apos;deploy&apos;, &apos;dev&apos;, &apos;d1&apos;, etc.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;kv&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;TAB&gt;&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;# shows subcommands: namespace, key, bulk&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;Tab completions are dynamically generated from Wrangler&apos;s command registry, so they stay up-to-date as new commands and options are added. This feature is powered by &lt;a href=&quot;https://github.com/bombshell-dev/tab/&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;@bomb.sh/tab&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See the &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/general/#complete&quot;&gt;&lt;code&gt;wrangler complete&lt;/code&gt; documentation&lt;/a&gt; for more details.&lt;/p&gt;</description><pubDate>Fri, 09 Jan 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Access - Cloudflare admin activity logs capture creation of DNS over HTTP (DoH) users</title><link>https://developers.cloudflare.com/changelog/post/2026-01-08-access-audit-log-for-doh-users/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-08-access-audit-log-for-doh-users/</guid><description>&lt;p&gt;Cloudflare &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/logs/&quot;&gt;admin activity logs&lt;/a&gt; now capture each time a &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/resolvers-and-proxies/dns/dns-over-https/&quot;&gt;DNS over HTTP (DoH) user&lt;/a&gt; is created.&lt;/p&gt;
&lt;p&gt;These logs can be viewed from the &lt;a href=&quot;https://one.dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Cloudflare One dashboard&lt;/a&gt;, pulled via the &lt;a href=&quot;https://developers.cloudflare.com/api/&quot;&gt;Cloudflare API&lt;/a&gt;, and exported through &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/logs/logpush/&quot;&gt;Logpush&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 08 Jan 2026 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Workers Analytics Engine, Workers - Workers Analytics Engine SQL now supports filtering using HAVING and LIKE</title><link>https://developers.cloudflare.com/changelog/post/2026-01-07-analytics-engine-support-for-like-and-having/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-07-analytics-engine-support-for-like-and-having/</guid><description>&lt;p&gt;You can now use the &lt;code&gt;HAVING&lt;/code&gt; clause and &lt;code&gt;LIKE&lt;/code&gt; pattern matching operators in &lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/&quot; target=&quot;_blank&quot;&gt;Workers Analytics Engine&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Workers Analytics Engine allows you to ingest and store high-cardinality data at scale and query your data through a simple SQL API.&lt;/p&gt;
&lt;h4&gt;Filtering using &lt;code&gt;HAVING&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;HAVING&lt;/code&gt; clause complements the &lt;code&gt;WHERE&lt;/code&gt; clause by enabling you to filter groups based on aggregate values. While &lt;code&gt;WHERE&lt;/code&gt; filters rows before aggregation, &lt;code&gt;HAVING&lt;/code&gt; filters groups after aggregation is complete.&lt;/p&gt;
&lt;p&gt;You can use &lt;code&gt;HAVING&lt;/code&gt; to filter groups where the average exceeds a threshold:&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;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;blob1 &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; probe_name,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;avg&lt;/span&gt;&lt;span&gt;(double1) &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; average_temp&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; temperature_readings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;GROUP BY&lt;/span&gt;&lt;span&gt; probe_name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HAVING&lt;/span&gt;&lt;span&gt; average_temp &lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&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;You can also filter groups based on aggregates such as the number of items in the group:&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;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;blob1 &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; probe_name,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;count&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;AS&lt;/span&gt;&lt;span&gt; num_readings&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; temperature_readings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;GROUP BY&lt;/span&gt;&lt;span&gt; probe_name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HAVING&lt;/span&gt;&lt;span&gt; num_readings &lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&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;h4&gt;Pattern matching using &lt;code&gt;LIKE&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;The new pattern matching operators enable you to search for strings that match specific patterns using wildcard characters:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;LIKE&lt;/code&gt; - case-sensitive pattern matching&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NOT LIKE&lt;/code&gt; - case-sensitive pattern exclusion&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ILIKE&lt;/code&gt; - case-insensitive pattern matching&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NOT ILIKE&lt;/code&gt; - case-insensitive pattern exclusion&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pattern matching supports two wildcard characters: &lt;code&gt;%&lt;/code&gt; (matches zero or more characters) and &lt;code&gt;_&lt;/code&gt; (matches exactly one character).&lt;/p&gt;
&lt;p&gt;You can match strings starting with a prefix:&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;SELECT&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;FROM&lt;/span&gt;&lt;span&gt; logs&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; blob1 &lt;/span&gt;&lt;span&gt;LIKE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;error%&apos;&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;You can also match file extensions (case-insensitive):&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;SELECT&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;FROM&lt;/span&gt;&lt;span&gt; requests&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; blob2 ILIKE &lt;/span&gt;&lt;span&gt;&apos;%.jpg&apos;&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;Another example is excluding strings containing specific text:&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;SELECT&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;FROM&lt;/span&gt;&lt;span&gt; events&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; blob3 &lt;/span&gt;&lt;span&gt;NOT&lt;/span&gt;&lt;span&gt; ILIKE &lt;/span&gt;&lt;span&gt;&apos;%debug%&apos;&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;h4&gt;Ready to get started?&lt;/h4&gt;
&lt;p&gt;Learn more about the &lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/statements/#having-clause&quot;&gt;&lt;code&gt;HAVING&lt;/code&gt; clause&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/operators/#pattern-matching-operators&quot;&gt;pattern matching operators&lt;/a&gt; in the Workers Analytics Engine SQL reference documentation.&lt;/p&gt;</description><pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate><product>Workers Analytics Engine</product><category>Workers Analytics Engine</category><category>Workers</category></item><item><title>Containers - Custom container instance types now available for all users</title><link>https://developers.cloudflare.com/changelog/post/2026-01-05-custom-instance-types/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-05-custom-instance-types/</guid><description>&lt;p&gt;Custom instance types are now enabled for all &lt;a href=&quot;https://developers.cloudflare.com/containers&quot;&gt;Cloudflare Containers&lt;/a&gt; users. You can now specify specific vCPU, memory, and disk amounts, rather than being limited to pre-defined &lt;a href=&quot;https://developers.cloudflare.com/containers/platform-details/limits/#instance-types&quot;&gt;instance types&lt;/a&gt;. Previously, only select Enterprise customers were able to customize their instance type.&lt;/p&gt;
&lt;p&gt;To use a custom instance type, specify the &lt;code&gt;instance_type&lt;/code&gt; property as an object with &lt;code&gt;vcpu&lt;/code&gt;, &lt;code&gt;memory_mib&lt;/code&gt;, and &lt;code&gt;disk_mb&lt;/code&gt; fields in your Wrangler configuration:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[[&lt;/span&gt;&lt;span&gt;containers&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;image&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./Dockerfile&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;instance_type&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;span&gt; &lt;/span&gt;&lt;span&gt;vcpu&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;memory_mib&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;6144&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;disk_mb&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;12000&lt;/span&gt;&lt;span&gt; &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;Individual limits for custom instance types are based on the &lt;code&gt;standard-4&lt;/code&gt; instance type (4 vCPU, 12 GiB memory, 20 GB disk). You must allocate at least 1 vCPU for custom instance types. For workloads requiring less than 1 vCPU, use the predefined instance types like &lt;code&gt;lite&lt;/code&gt; or &lt;code&gt;basic&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;See the &lt;a href=&quot;https://developers.cloudflare.com/containers/platform-details/limits/#custom-instance-types&quot;&gt;limits documentation&lt;/a&gt; for the full list of constraints on custom instance types.
See the &lt;a href=&quot;https://developers.cloudflare.com/containers/get-started/&quot;&gt;getting started guide&lt;/a&gt; to deploy your first Container,&lt;/p&gt;</description><pubDate>Mon, 05 Jan 2026 00:00:00 GMT</pubDate><product>Containers</product><category>Containers</category></item><item><title>Workers - Build microfrontend applications on Workers</title><link>https://developers.cloudflare.com/changelog/post/2026-01-01-microfrontends/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2026-01-01-microfrontends/</guid><description>&lt;p&gt;You can now deploy microfrontends to Cloudflare, splitting a single application into smaller, independently deployable units that render as one cohesive application. This lets different teams using different frameworks develop, test, and deploy each microfrontend without coordinating releases.&lt;/p&gt;
&lt;p&gt;Microfrontends solve several challenges for large-scale applications:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Independent deployments&lt;/strong&gt;: Teams deploy updates on their own schedule without redeploying the entire application&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Framework flexibility&lt;/strong&gt;: Build multi-framework applications (for example, Astro, Remix, and Next.js in one app)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gradual migration&lt;/strong&gt;: Migrate from a monolith to a distributed architecture incrementally&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Create a microfrontend project:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers-and-pages/create?type=vmfe&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://deploy.workers.cloudflare.com/button&quot; alt=&quot;Deploy to Cloudflare&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This template automatically creates a router worker with pre-configured routing logic, and lets you configure &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings/&quot;&gt;Service bindings&lt;/a&gt; to Workers you have already deployed to your Cloudflare account. The router Worker analyzes incoming requests, matches them against configured routes, and forwards requests to the appropriate microfrontend via service bindings. The router automatically rewrites HTML, CSS, and headers to ensure assets load correctly from each microfrontend&apos;s mount path. The router includes advanced features like preloading for faster navigation between microfrontends, smooth page transitions using the View Transitions API, and automatic path rewriting for assets, redirects, and cookies.&lt;/p&gt;
&lt;p&gt;Each microfrontend can be a full-framework application, a static site with Workers Static Assets, or any other Worker-based application.&lt;/p&gt;
&lt;p&gt;Get started with the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers-and-pages/create?type=vmfe&quot; target=&quot;_blank&quot;&gt;microfrontends template&lt;/a&gt;, or read the &lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/web-apps/microfrontends/&quot;&gt;microfrontends documentation&lt;/a&gt; for implementation details.&lt;/p&gt;</description><pubDate>Thu, 01 Jan 2026 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare One, Cloudflare WAN - Breakout traffic visibility via NetFlow</title><link>https://developers.cloudflare.com/changelog/post/2025-12-31-connector-breakout-traffic-netflow/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-31-connector-breakout-traffic-netflow/</guid><description>&lt;p&gt;Magic WAN Connector now exports NetFlow data for breakout traffic to Magic Network Monitoring (MNM), providing visibility into traffic that bypasses Cloudflare&apos;s security filtering.&lt;/p&gt;
&lt;p&gt;This feature allows you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Monitor breakout traffic statistics in the Cloudflare dashboard.&lt;/li&gt;
&lt;li&gt;View traffic patterns for applications configured to bypass Cloudflare.&lt;/li&gt;
&lt;li&gt;Maintain visibility across all traffic passing through your Magic WAN Connector.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/analytics/netflow-analytics/&quot;&gt;NetFlow statistics&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 31 Dec 2025 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category><category>Cloudflare WAN</category></item><item><title>Agents, Workers - Agents SDK v0.3.0, workers-ai-provider v3.0.0, and ai-gateway-provider v3.0.0 with AI SDK v6 support</title><link>https://developers.cloudflare.com/changelog/post/2025-12-22-agents-sdk-ai-sdk-v6/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-22-agents-sdk-ai-sdk-v6/</guid><description>&lt;p&gt;We&apos;ve shipped a new release for the &lt;a href=&quot;https://github.com/cloudflare/agents&quot; target=&quot;_blank&quot;&gt;Agents SDK&lt;/a&gt; v0.3.0 bringing full compatibility with &lt;a href=&quot;https://ai-sdk.dev/docs/introduction&quot; target=&quot;_blank&quot;&gt;AI SDK v6&lt;/a&gt; and introducing the unified tool pattern, dynamic tool approval, and enhanced React hooks with improved tool handling.&lt;/p&gt;
&lt;p&gt;This release includes improved streaming and tool support, dynamic tool approval (for &quot;human in the loop&quot; systems), enhanced React hooks with &lt;code&gt;onToolCall&lt;/code&gt; callback, improved error handling for streaming responses, and seamless migration from v5 patterns.&lt;/p&gt;
&lt;p&gt;This makes it ideal for building production AI chat interfaces with Cloudflare Workers AI models, agent workflows, human-in-the-loop systems, or any application requiring reliable tool execution and approval workflows.&lt;/p&gt;
&lt;p&gt;Additionally, we&apos;ve updated &lt;strong&gt;workers-ai-provider v3.0.0&lt;/strong&gt;, the official provider for Cloudflare Workers AI models, and &lt;strong&gt;ai-gateway-provider v3.0.0&lt;/strong&gt;, the provider for Cloudflare AI Gateway, to be compatible with AI SDK v6.&lt;/p&gt;
&lt;h4&gt;Agents SDK v0.3.0&lt;/h4&gt;
&lt;h4&gt;Unified Tool Pattern&lt;/h4&gt;
&lt;p&gt;AI SDK v6 introduces a unified tool pattern where all tools are defined on the server using the &lt;code&gt;tool()&lt;/code&gt; function. This replaces the previous client-side &lt;code&gt;AITool&lt;/code&gt; pattern.&lt;/p&gt;
&lt;h4&gt;Server-Side Tool Definition&lt;/h4&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;ai&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;zod&quot;&lt;/span&gt;&lt;span&gt;;&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;// Server: Define ALL tools on the server&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tools&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;// Server-executed tool&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;getWeather&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tool&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;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Get weather for a city&quot;&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;inputSchema&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;object&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; city&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;string&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;execute&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;city&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetchWeather&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;city&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Client-executed tool (no execute = client handles via onToolCall)&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;getLocation&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tool&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;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Get user location from browser&quot;&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;inputSchema&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;object&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;// No execute function&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Tool requiring approval (dynamic based on input)&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;processPayment&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tool&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;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Process a payment&quot;&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;inputSchema&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;object&lt;/span&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;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;number&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;needsApproval&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&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; &lt;/span&gt;&lt;span&gt;=&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;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&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;execute&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&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; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;charge&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;amount&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;h4&gt;Client-Side Tool Handling&lt;/h4&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;// Client: Handle client-side tools via onToolCall callback&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useAgentChat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;agents/ai-react&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sendMessage&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;addToolOutput&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;span&gt; &lt;/span&gt;&lt;span&gt;useAgentChat&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;agent&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;onToolCall&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;toolCall&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;addToolOutput&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;toolCall&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toolName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;getLocation&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;position&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;reject&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;navigator&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;geolocation&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getCurrentPosition&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;resolve&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;reject&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;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;addToolOutput&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;toolCallId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;toolCall&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toolCallId&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;output&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;lat&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;position&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;coords&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;latitude&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;lng&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;position&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;coords&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;longitude&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;)&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;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;&lt;strong&gt;Key benefits of the unified tool pattern:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Server-defined tools&lt;/strong&gt;: All tools are defined in one place on the server&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic approval&lt;/strong&gt;: Use &lt;code&gt;needsApproval&lt;/code&gt; to conditionally require user confirmation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cleaner client code&lt;/strong&gt;: Use &lt;code&gt;onToolCall&lt;/code&gt; callback instead of managing tool configs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type safety&lt;/strong&gt;: Full TypeScript support with proper tool typing&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;useAgentChat(options)&lt;/h4&gt;
&lt;p&gt;Creates a new chat interface with enhanced v6 capabilities.&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;// Basic chat setup with onToolCall&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sendMessage&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;addToolOutput&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;span&gt; &lt;/span&gt;&lt;span&gt;useAgentChat&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;agent&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;onToolCall&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;toolCall&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;addToolOutput&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;// Handle client-side tool execution&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;addToolOutput&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;toolCallId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;toolCall&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toolCallId&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;output&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; result&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;success&quot;&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;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;;&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;h4&gt;Dynamic Tool Approval&lt;/h4&gt;
&lt;p&gt;Use &lt;code&gt;needsApproval&lt;/code&gt; on server tools to conditionally require user confirmation:&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;paymentTool&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tool&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;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Process a payment&quot;&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;inputSchema&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;object&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;amount&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;number&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;recipient&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&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;)&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;needsApproval&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&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; &lt;/span&gt;&lt;span&gt;=&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;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1000&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;execute&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&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;recipient&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;processPayment&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;recipient&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;/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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4&gt;Tool Confirmation Detection&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;isToolUIPart&lt;/code&gt; and &lt;code&gt;getToolName&lt;/code&gt; functions now check both static and dynamic tool parts:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isToolUIPart&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getToolName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;ai&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pendingToolCallConfirmation&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;some&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;m&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &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;m&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parts&lt;/span&gt;&lt;span&gt;?.&lt;/span&gt;&lt;span&gt;some&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;part&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isToolUIPart&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;part&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;part&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;input-available&quot;&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;/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;// Handle tool confirmation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;pendingToolCallConfirmation&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;addToolOutput&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;toolCallId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;part&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toolCallId&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;output&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;User approved the action&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;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;If you need the v5 behavior (static-only checks), use the new functions:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isStaticToolUIPart&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getStaticToolName&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;ai&quot;&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;h4&gt;convertToModelMessages() is now async&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;convertToModelMessages()&lt;/code&gt; function is now asynchronous. Update all calls to await the result:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;convertToModelMessages&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;ai&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamText&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;messages&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;convertToModelMessages&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;messages&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;model&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;openai&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;gpt-4o&quot;&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4&gt;ModelMessage type&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;CoreMessage&lt;/code&gt; type has been removed. Use &lt;code&gt;ModelMessage&lt;/code&gt; instead:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;convertToModelMessages&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; type &lt;/span&gt;&lt;span&gt;ModelMessage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;ai&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;modelMessages&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ModelMessage&lt;/span&gt;&lt;span&gt;[] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;convertToModelMessages&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;)&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;h4&gt;generateObject mode option removed&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;mode&lt;/code&gt; option for &lt;code&gt;generateObject&lt;/code&gt; has been removed:&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;// Before (v5)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generateObject&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;mode&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;json&quot;&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;model&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;schema&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;prompt&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// After (v6)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generateObject&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;model&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;schema&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;prompt&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4&gt;Structured Output with generateText&lt;/h4&gt;
&lt;p&gt;While &lt;code&gt;generateObject&lt;/code&gt; and &lt;code&gt;streamObject&lt;/code&gt; are still functional, the recommended approach is to use &lt;code&gt;generateText&lt;/code&gt;/&lt;code&gt;streamText&lt;/code&gt; with the &lt;code&gt;Output.object()&lt;/code&gt; helper:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generateText&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Output&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stepCountIs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;ai&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;output&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;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generateText&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;model&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;openai&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;gpt-4&quot;&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;output&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Output&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;object&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;schema&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;object&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;string&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;)&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;stopWhen&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stepCountIs&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2&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;prompt&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Generate a name&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: When using structured output with &lt;code&gt;generateText&lt;/code&gt;, you must configure multiple steps with &lt;code&gt;stopWhen&lt;/code&gt; because generating the structured output is itself a step.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;workers-ai-provider v3.0.0&lt;/h4&gt;
&lt;p&gt;Seamless integration with Cloudflare Workers AI models through the updated workers-ai-provider v3.0.0 with AI SDK v6 support.&lt;/p&gt;
&lt;h4&gt;Model Setup with Workers AI&lt;/h4&gt;
&lt;p&gt;Use Cloudflare Workers AI models directly in your agent workflows:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createWorkersAI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;workers-ai-provider&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useAgentChat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;agents/ai-react&quot;&lt;/span&gt;&lt;span&gt;;&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;// Create Workers AI model (v3.0.0 - enhanced v6 internals)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createWorkersAI&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;binding&lt;/span&gt;&lt;span&gt;:&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;AI&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;@cf/meta/llama-3.2-3b-instruct&quot;&lt;/span&gt;&lt;span&gt;)&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;h4&gt;Enhanced File and Image Support&lt;/h4&gt;
&lt;p&gt;Workers AI models now support v6 file handling with automatic conversion:&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;// Send images and files to Workers AI models&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;sendMessage&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;role&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&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;parts&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; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; text&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Analyze this image:&quot;&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;/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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;file&quot;&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;data&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageBuffer&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;mediaType&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;image/jpeg&quot;&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;]&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Workers AI provider automatically converts to proper format&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;h4&gt;Streaming with Workers AI&lt;/h4&gt;
&lt;p&gt;Enhanced streaming support with automatic warning detection:&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;// Streaming with Workers AI models&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamText&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;model&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createWorkersAI&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; binding&lt;/span&gt;&lt;span&gt;:&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;AI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;span&gt;&quot;@cf/meta/llama-3.2-3b-instruct&quot;&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;messages&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;convertToModelMessages&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;messages&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;onChunk&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;chunk&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;// Enhanced streaming with warning handling&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;chunk&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;/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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4&gt;ai-gateway-provider v3.0.0&lt;/h4&gt;
&lt;p&gt;The ai-gateway-provider v3.0.0 now supports AI SDK v6, enabling you to use Cloudflare AI Gateway with multiple AI providers including Anthropic, Azure, AWS Bedrock, Google Vertex, and Perplexity.&lt;/p&gt;
&lt;h4&gt;AI Gateway Setup&lt;/h4&gt;
&lt;p&gt;Use Cloudflare AI Gateway to add analytics, caching, and rate limiting to your AI applications:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createAIGateway&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;ai-gateway-provider&quot;&lt;/span&gt;&lt;span&gt;;&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;// Create AI Gateway provider (v3.0.0 - enhanced v6 internals)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createAIGateway&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;gatewayUrl&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://gateway.ai.cloudflare.com/v1/your-account-id/gateway&quot;&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;headers&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;&quot;Authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`Bearer &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;AI_GATEWAY_TOKEN&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;/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;provider&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;openai&quot;&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;model&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;gpt-4o&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4&gt;Migration from v5&lt;/h4&gt;
&lt;h4&gt;Deprecated APIs&lt;/h4&gt;
&lt;p&gt;The following APIs are deprecated in favor of the unified tool pattern:&lt;/p&gt;





































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Deprecated&lt;/th&gt;&lt;th&gt;Replacement&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;AITool&lt;/code&gt; type&lt;/td&gt;&lt;td&gt;Use AI SDK&apos;s &lt;code&gt;tool()&lt;/code&gt; function on server&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;extractClientToolSchemas()&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Define tools on server, no client schemas needed&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;createToolsFromClientSchemas()&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Define tools on server with &lt;code&gt;tool()&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;toolsRequiringConfirmation&lt;/code&gt; option&lt;/td&gt;&lt;td&gt;Use &lt;code&gt;needsApproval&lt;/code&gt; on server tools&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;experimental_automaticToolResolution&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Use &lt;code&gt;onToolCall&lt;/code&gt; callback&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;tools&lt;/code&gt; option in &lt;code&gt;useAgentChat&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Use &lt;code&gt;onToolCall&lt;/code&gt; for client-side execution&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;addToolResult()&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Use &lt;code&gt;addToolOutput()&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;Breaking Changes Summary&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Unified Tool Pattern&lt;/strong&gt;: All tools must be defined on the server using &lt;code&gt;tool()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;convertToModelMessages()&lt;/code&gt; is async&lt;/strong&gt;: Add &lt;code&gt;await&lt;/code&gt; to all calls&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;CoreMessage&lt;/code&gt; removed&lt;/strong&gt;: Use &lt;code&gt;ModelMessage&lt;/code&gt; instead&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;generateObject&lt;/code&gt; mode removed&lt;/strong&gt;: Remove &lt;code&gt;mode&lt;/code&gt; option&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;isToolUIPart&lt;/code&gt; behavior changed&lt;/strong&gt;: Now checks both static and dynamic tool parts&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Installation&lt;/h4&gt;
&lt;p&gt;Update your dependencies to use the latest versions:&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;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agents@^0.3.0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workers-ai-provider@^3.0.0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ai-gateway-provider@^3.0.0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ai@^6.0.0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@ai-sdk/react@^3.0.0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;@ai-sdk/openai@^3.0.0&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;h4&gt;Resources&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/agents/blob/main/docs/migration-to-ai-sdk-v6.md&quot; target=&quot;_blank&quot;&gt;Migration Guide&lt;/a&gt; - Comprehensive migration documentation from v5 to v6&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ai-sdk.dev/docs/migration-guides/migration-guide-6-0&quot; target=&quot;_blank&quot;&gt;AI SDK v6 Documentation&lt;/a&gt; - Official AI SDK migration guide&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vercel.com/blog/ai-sdk-6&quot; target=&quot;_blank&quot;&gt;AI SDK v6 Announcement&lt;/a&gt; - Learn about new features in v6&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sdk.vercel.ai/docs&quot; target=&quot;_blank&quot;&gt;AI SDK Documentation&lt;/a&gt; - Complete AI SDK reference&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/agents/issues&quot; target=&quot;_blank&quot;&gt;GitHub Issues&lt;/a&gt; - Report bugs or request features&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Feedback Welcome&lt;/h4&gt;
&lt;p&gt;We&apos;d love your feedback! We&apos;re particularly interested in feedback on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Migration experience&lt;/strong&gt; - How smooth was the upgrade from v5 to v6?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unified tool pattern&lt;/strong&gt; - How does the new server-defined tool pattern work for you?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic tool approval&lt;/strong&gt; - Does the &lt;code&gt;needsApproval&lt;/code&gt; feature meet your needs?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI Gateway integration&lt;/strong&gt; - How well does the new provider work with your setup?&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 22 Dec 2025 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>Cloudflare Fundamentals, Terraform - Terraform v5.15.0 now available</title><link>https://developers.cloudflare.com/changelog/post/2025-12-19-terraform-v5150-provider/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-19-terraform-v5150-provider/</guid><description>&lt;p&gt;Earlier this year, we announced the launch of the new Terraform v5 Provider. We are aware of the high number of issues reported by the Cloudflare community related to the v5 release. We have committed to releasing improvements on a &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5774&quot; target=&quot;_blank&quot;&gt;2-3 week cadence&lt;/a&gt; to ensure its stability and reliability, including the v5.15 release. We have also pivoted from an &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6237&quot; target=&quot;_blank&quot;&gt;issue-to-issue approach to a resource-per-resource approach&lt;/a&gt; - we will be focusing on specific resources to not only stabilize the resource but also ensure it is migration-friendly for those migrating from v4 to v5.&lt;/p&gt;
&lt;p&gt;Thank you for continuing to raise issues. They make our provider stronger and help us build products that reflect your needs.&lt;/p&gt;
&lt;p&gt;This release includes bug fixes, the stabilization of even more popular resources, and more.&lt;/p&gt;
&lt;h4&gt;Features&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ai_search:&lt;/strong&gt; Add AI Search endpoints (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/6f02adb420e872457f71f95b49cb527663388915&quot; target=&quot;_blank&quot;&gt;6f02adb&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;certificate_pack:&lt;/strong&gt; Ensure proper Terraform resource ID handling for path parameters in API calls (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/081f32acab4ce9a194a7ff51c8e9fcabd349895a&quot; target=&quot;_blank&quot;&gt;081f32a&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;worker_version:&lt;/strong&gt; Support &lt;code&gt;startup_time_ms&lt;/code&gt; (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/286ab55bea8d5be0faa5a2b5b8b157e4a2214eba&quot; target=&quot;_blank&quot;&gt;286ab55&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_dlp_custom_entry:&lt;/strong&gt; Support &lt;code&gt;upload_status&lt;/code&gt; (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/7dc0fe3b23726ead8dc075f86728a0540846d90c&quot; target=&quot;_blank&quot;&gt;7dc0fe3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_dlp_entry:&lt;/strong&gt; Support &lt;code&gt;upload_status&lt;/code&gt; (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/7dc0fe3b23726ead8dc075f86728a0540846d90c&quot; target=&quot;_blank&quot;&gt;7dc0fe3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_dlp_integration_entry:&lt;/strong&gt; Support &lt;code&gt;upload_status&lt;/code&gt; (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/7dc0fe3b23726ead8dc075f86728a0540846d90c&quot; target=&quot;_blank&quot;&gt;7dc0fe3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_dlp_predefined_entry:&lt;/strong&gt; Support &lt;code&gt;upload_status&lt;/code&gt; (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/7dc0fe3b23726ead8dc075f86728a0540846d90c&quot; target=&quot;_blank&quot;&gt;7dc0fe3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_gateway_policy:&lt;/strong&gt; Support &lt;code&gt;forensic_copy&lt;/code&gt; (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/5741fd0ed9f7270d20731cc47ec45eb0403a628b&quot; target=&quot;_blank&quot;&gt;5741fd0&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_list:&lt;/strong&gt; Support additional types (category, location, device) (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/5741fd0ed9f7270d20731cc47ec45eb0403a628b&quot; target=&quot;_blank&quot;&gt;5741fd0&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Bug fixes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;access_rules:&lt;/strong&gt; Add validation to prevent state drift. Ideally, we&apos;d use Semantic Equality but since that isn&apos;t an option, this will remove a foot-gun. (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/44577911b3cbe45de6279aefa657bdee73c0794d&quot; target=&quot;_blank&quot;&gt;4457791&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_pages_project:&lt;/strong&gt; Addressing drift issues (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/6edffcfcf187fdc9b10b624b9a9b90aed2fb2b2e&quot; target=&quot;_blank&quot;&gt;6edffcf&lt;/a&gt;) (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/3db318e747423bf10ce587d9149e90edcd8a77b0&quot; target=&quot;_blank&quot;&gt;3db318e&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_worker:&lt;/strong&gt; Can be cleanly imported (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/4859b52968bb25570b680df9813f8e07fd50728f&quot; target=&quot;_blank&quot;&gt;4859b52&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_worker:&lt;/strong&gt; Ensure clean imports (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/5b525bc478a4e2c9c0d4fd659b92cc7f7c18016a&quot; target=&quot;_blank&quot;&gt;5b525bc&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;list_items:&lt;/strong&gt; Add validation for IP List items to avoid inconsistent state (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/b6733dc4be909a5ab35895a88e519fc2582ccada&quot; target=&quot;_blank&quot;&gt;b6733dc&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_access_application:&lt;/strong&gt; Remove all conditions from sweeper (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/3197f1aed61be326d507d9e9e3b795b9f1d18fd7&quot; target=&quot;_blank&quot;&gt;3197f1a&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;spectrum_application:&lt;/strong&gt; Map missing fields during spectrum resource import (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6495&quot; target=&quot;_blank&quot;&gt;#6495&lt;/a&gt;) (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/commit/ddb4e722b82c735825a549d651a9da219c142efa&quot; target=&quot;_blank&quot;&gt;ddb4e72&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Upgrade to newer version&lt;/h4&gt;
&lt;p&gt;We suggest waiting to migrate to v5 while we work on stabilization. This helps with avoiding any blocking issues while the Terraform resources are actively being &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6237&quot; target=&quot;_blank&quot;&gt;stabilized&lt;/a&gt;. We will be releasing a new migration tool in March 2026 to help support v4 to v5 transitions for our most popular resources.&lt;/p&gt;
&lt;h4&gt;For more information&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;Terraform Provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/terraform/&quot;&gt;Documentation on using Terraform with Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 19 Dec 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Terraform</category></item><item><title>Workers - Static prerendering support for TanStack Start</title><link>https://developers.cloudflare.com/changelog/post/2025-12-19-tanstack-start-prerendering/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-19-tanstack-start-prerendering/</guid><description>&lt;p&gt;&lt;a href=&quot;https://tanstack.com/start/&quot; target=&quot;_blank&quot;&gt;TanStack Start&lt;/a&gt; apps can now prerender routes to static HTML at build time with access to build time environment variables
and bindings,  and serve them as &lt;a href=&quot;https://developers.cloudflare.com/workers/static-assets/&quot;&gt;static assets&lt;/a&gt;. To enable prerendering, configure the &lt;code&gt;prerender&lt;/code&gt; option of the TanStack Start plugin in your Vite config:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;vite&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&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;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/vite-plugin&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tanstackStart&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@tanstack/react-start/plugin/vite&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&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;plugins&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;cloudflare&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; viteEnvironment&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ssr&quot;&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;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;tanstackStart&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;prerender&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;enabled&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;)&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;;&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;This feature requires &lt;code&gt;@tanstack/react-start&lt;/code&gt; v1.138.0 or later. See the &lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/web-apps/tanstack-start/#static-prerendering&quot;&gt;TanStack Start framework guide&lt;/a&gt; for more details.&lt;/p&gt;</description><pubDate>Fri, 19 Dec 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>AI Crawl Control - New AI Crawl Control Overview tab</title><link>https://developers.cloudflare.com/changelog/post/2025-12-18-overview-tab/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-18-overview-tab/</guid><description>&lt;p&gt;The &lt;strong&gt;Overview&lt;/strong&gt; tab is now the default view in AI Crawl Control. The previous default view with controls for individual AI crawlers is available in the &lt;strong&gt;Crawlers&lt;/strong&gt; tab.&lt;/p&gt;
&lt;h4&gt;What&apos;s new&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Executive summary&lt;/strong&gt; — Monitor total requests, volume change, most common status code, most popular path, and high-volume activity&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operator grouping&lt;/strong&gt; — Track crawlers by their operating companies (OpenAI, Microsoft, Google, ByteDance, Anthropic, Meta)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customizable filters&lt;/strong&gt; — Filter your snapshot by date range, crawler, operator, hostname, or path&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ai-crawl-control-overview-tab.Duwqq4bm_ZmNhCs.webp&quot; alt=&quot;AI Crawl Control Overview tab showing executive summary, metrics, and crawler groups&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Log in to the Cloudflare dashboard and select your account and domain.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;AI Crawl Control&lt;/strong&gt;, where the &lt;strong&gt;Overview&lt;/strong&gt; tab opens by default with your activity snapshot.&lt;/li&gt;
&lt;li&gt;Use filters to customize your view by date range, crawler, operator, hostname, or path.&lt;/li&gt;
&lt;li&gt;Navigate to the &lt;strong&gt;Crawlers&lt;/strong&gt; tab to manage controls for individual crawlers.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Learn more about &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/analyze-ai-traffic/&quot;&gt;analyzing AI traffic&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/manage-ai-crawlers/&quot;&gt;managing AI crawlers&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate><product>AI Crawl Control</product><category>AI Crawl Control</category></item><item><title>Analytics - Improved accuracy of cached request classification in analytics</title><link>https://developers.cloudflare.com/changelog/post/2025-12-18-cached-request-classification/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-18-cached-request-classification/</guid><description>&lt;p&gt;The cached/uncached classification logic used in Zone Overview analytics has been updated to improve accuracy.&lt;/p&gt;
&lt;p&gt;Previously, requests were classified as &quot;cached&quot; based on an overly broad condition that included blocked 403 responses, Snippets requests, and other non-cache request types. This caused inflated cache hit ratios — in some cases showing near-100% cached — and affected approximately 15% of requests classified as cached in rollups.&lt;/p&gt;
&lt;p&gt;The condition has been removed from the Zone Overview page. Cached/uncached classification now aligns with the heuristics used in &lt;a href=&quot;https://developers.cloudflare.com/analytics/account-and-zone-analytics/zone-analytics/&quot;&gt;HTTP Analytics&lt;/a&gt;, so only requests genuinely served from cache are counted as cached.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What changed:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zone Overview&lt;/strong&gt; — Cache ratios now reflect actual cache performance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTP Analytics&lt;/strong&gt; — No change. HTTP Analytics already used the correct classification logic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Historical data&lt;/strong&gt; — This fix applies to new requests only. Previously logged data is not retroactively updated.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate><product>Analytics</product><category>Analytics</category></item><item><title>R2 - R2 Data Catalog now supports automatic snapshot expiration</title><link>https://developers.cloudflare.com/changelog/post/2025-12-18-r2-data-catalog-snapshot-expiration/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-18-r2-data-catalog-snapshot-expiration/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/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;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;# Enable catalog-level snapshot expiration&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Expire snapshots older than 7 days, always retain at least 10 recent snapshots&lt;/span&gt;&lt;/div&gt;&lt;/div&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;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;catalog&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;snapshot-expiration&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-bucket&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;--older-than-days&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;7&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;--retain-last&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10&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;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.cloudflare.com/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;To learn more about snapshot expiration and how to configure it, visit our &lt;a href=&quot;https://developers.cloudflare.com/r2/data-catalog/table-maintenance/&quot;&gt;table maintenance documentation&lt;/a&gt; or see &lt;a href=&quot;https://developers.cloudflare.com/r2/data-catalog/manage-catalogs/&quot;&gt;how to 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></item><item><title>WAF - WAF Release - 2025-12-18</title><link>https://developers.cloudflare.com/changelog/post/2025-12-18-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-18-waf-release/</guid><description>&lt;p&gt;This week&apos;s release focuses on improvements to existing detections to enhance coverage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Existing rule enhancements have been deployed to improve detection resilience against broad classes of web attacks and strengthen behavioral coverage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;6429f7386b1546cf9dfce631be5ec20c &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Atlassian Confluence - Code Injection - CVE:CVE-2021-26084 - Beta&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This rule is merged into the original rule &quot;Atlassian Confluence - Code Injection - CVE:CVE-2021-26084&quot; (ID: e8c550810618437c953cf3a969e0b97a )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;9108ddb347b3497e9f9351640d9206e3 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;PostgreSQL - SQLi - Copy - Beta&lt;/td&gt;
&lt;td&gt;Log&lt;/td&gt;
&lt;td&gt;Block&lt;/td&gt;
&lt;td&gt;This rule is merged into the original rule &quot;PostgreSQL - SQLi - COPY&quot; (ID: 705a6b5569d5472596910e3ce7265a4e )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;cb687d73cc954092b58b90b00cd00ba7 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Generic Rules - Command Execution - Body&lt;/td&gt;
&lt;td&gt;Log&lt;/td&gt;
&lt;td&gt;Disabled&lt;/td&gt;
&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;bf30657ffa2a424cbf6570dbcd679ad4 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic Rules - Command Execution - Header&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;6df040f716194070a242967cfd181fb3 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic Rules - Command Execution - URI&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;39a4fdc37be948709fa7492e7a95bc3a &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;SQLi - Tautology - URI - Beta&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This rule is merged into the original rule &quot;SQLi - Tautology - URI&quot; (ID: 4c580ea1b5174183b7f5e940b3de2e0a )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;810e0ffe1dd84e67b159129b432ac90d &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;SQLi - WaitFor Function - Beta&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This rule is merged into the original rule &quot;SQLi - WaitFor Function&quot; (ID: b16fe708799441dea3049a99d5faba59 )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;80690005fef342e0ad6bc9af596c741e &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;SQLi - AND/OR Digit Operator Digit 2 - Beta&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This rule is merged into the original rule &quot;SQLi - AND/OR Digit Operator Digit&quot; (ID: 98e7e08ae64247e2801ca4b388d80772 )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;eaf11ab80b0d491cbb7186f303b2f3fe &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;SQLi - Equation 2 - Beta&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This rule is merged into the original rule &quot;SQLi - Equation&quot; (ID: 133c6f83cdf14509a4ca6b82a72a6b3a )&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers for Platforms - Workers for Platforms - Dashboard Improvements</title><link>https://developers.cloudflare.com/changelog/post/2025-12-18-dashboard-improvements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-18-dashboard-improvements/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/&quot;&gt;Workers for Platforms&lt;/a&gt; lets you build multi-tenant platforms on &lt;a href=&quot;https://developers.cloudflare.com/workers/&quot;&gt;Cloudflare Workers&lt;/a&gt;, allowing your end users to deploy and run their own code on your platform. It&apos;s designed for anyone building an AI vibe coding platform, e-commerce platform, website builder, or any product that needs to securely execute user-generated code at scale.&lt;/p&gt;
&lt;p&gt;Previously, setting up Workers for Platforms required using the API. Now, the Workers for Platforms UI supports namespace creation, dispatch worker templates, and tag management, making it easier for Workers for Platforms customers to build and manage multi-tenant platforms directly from the Cloudflare dashboard.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/dashboard-improvements.ChVWUo88_ZNokyq.webp&quot; alt=&quot;Workers for Platforms Dashboard Improvements&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;Key improvements&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Namespace Management:&lt;/strong&gt; You can now create and configure &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/how-workers-for-platforms-works/#dispatch-namespace&quot;&gt;dispatch namespaces&lt;/a&gt; directly within the dashboard to start a new platform setup.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dispatch Worker Templates:&lt;/strong&gt; New Dispatch Worker templates allow you to quickly define how traffic is routed to individual Workers within your namespace. Refer to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/configuration/dynamic-dispatch/&quot;&gt;Dynamic Dispatch documentation&lt;/a&gt; for more examples.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tag Management:&lt;/strong&gt; You can now set and update &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/configuration/tags/&quot;&gt;tags&lt;/a&gt; on User Workers, making it easier to group and manage your Workers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Binding Visibility:&lt;/strong&gt; &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/configuration/bindings/&quot;&gt;Bindings&lt;/a&gt; attached to User Workers are now visible directly within the User Worker view.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deploy Vibe Coding Platform in one-click:&lt;/strong&gt; Deploy a &lt;a href=&quot;https://developers.cloudflare.com/reference-architecture/diagrams/ai/ai-vibe-coding-platform/&quot;&gt;reference implementation&lt;/a&gt; of an AI vibe coding platform directly from the dashboard. Powered by the Cloudflare&apos;s &lt;a href=&quot;https://github.com/cloudflare/vibesdk&quot; target=&quot;_blank&quot;&gt;VibeSDK&lt;/a&gt;, this starter kit integrates with Workers for Platforms to handle the deployment of AI-generated projects at scale.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get started, go to &lt;strong&gt;Workers for Platforms&lt;/strong&gt; under &lt;strong&gt;Compute &amp;#x26; AI&lt;/strong&gt; in the &lt;a href=&quot;https://dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Cloudflare dashboard&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate><product>Workers for Platforms</product><category>Workers for Platforms</category></item><item><title>Workers - Build image policies for Workers Builds and Cloudflare Pages</title><link>https://developers.cloudflare.com/changelog/post/2025-12-01-build-image-policies-dev-plat/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-01-build-image-policies-dev-plat/</guid><description>&lt;p&gt;We&apos;ve published build image policies for &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/build-image/#build-image-policy&quot;&gt;Workers Builds&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/pages/configuration/build-image/#build-image-policy&quot;&gt;Cloudflare Pages&lt;/a&gt;, which establish:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Minor version updates&lt;/strong&gt;: We typically update preinstalled software to the latest available minor version without notice. For tools that don&apos;t follow semantic versioning (e.g., Bun or Hugo), we provide 3 months’ notice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Major version updates&lt;/strong&gt;: Before preinstalled software reaches end-of-life, we update to the next stable LTS version with 3 months’ notice.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build image version deprecation (Pages only)&lt;/strong&gt;: We provide 6 months’ notice before deprecation. Projects on v1 or v2 will be automatically moved to v3 on their specified deprecation dates.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To prepare for updates, monitor the &lt;a href=&quot;https://developers.cloudflare.com/changelog/&quot; target=&quot;_blank&quot;&gt;Cloudflare Changelog&lt;/a&gt;, dashboard notifications, and email. You can also &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/build-image/#overriding-default-versions&quot;&gt;override default versions&lt;/a&gt; to maintain specific versions.&lt;/p&gt;</description><pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Retrieve your authentication token with `wrangler auth token`</title><link>https://developers.cloudflare.com/changelog/post/2025-12-18-wrangler-auth-token/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-18-wrangler-auth-token/</guid><description>&lt;p&gt;Wrangler now includes a new &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/general/#auth-token&quot;&gt;&lt;code&gt;wrangler auth token&lt;/code&gt;&lt;/a&gt; command that retrieves your current authentication token or credentials for use with other tools and scripts.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;auth&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;token&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;The command returns whichever authentication method is currently configured, in priority order: API token from &lt;code&gt;CLOUDFLARE_API_TOKEN&lt;/code&gt;, or OAuth token from &lt;code&gt;wrangler login&lt;/code&gt; (automatically refreshed if expired).&lt;/p&gt;
&lt;p&gt;Use the &lt;code&gt;--json&lt;/code&gt; flag to get structured output including the token type:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;auth&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--json&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;The JSON output includes the authentication type:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// API token&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;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;api_token&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;...&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// OAuth token&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;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;oauth&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;...&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// API key/email (only available with --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; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;api_key&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;...&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;email&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;...&quot;&lt;/span&gt;&lt;span&gt; &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;API key/email credentials from &lt;code&gt;CLOUDFLARE_API_KEY&lt;/code&gt; and &lt;code&gt;CLOUDFLARE_EMAIL&lt;/code&gt; require the &lt;code&gt;--json&lt;/code&gt; flag since this method uses two values instead of a single token.&lt;/p&gt;</description><pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Gateway, Cloudflare One - Shadow IT - domain level SaaS analytics</title><link>https://developers.cloudflare.com/changelog/post/2025-12-17-shadow-it-domain-analytics/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-17-shadow-it-domain-analytics/</guid><description>&lt;p&gt;Zero Trust has again upgraded its &lt;strong&gt;Shadow IT analytics&lt;/strong&gt;, providing you with unprecedented visibility into your organizations use of SaaS tools. With this dashboard, you can review who is using an application and volumes of data transfer to the application.&lt;/p&gt;
&lt;p&gt;With this update, you can review data transfer metrics at the domain level, rather than just the application level, providing more granular insight into your data transfer patterns.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/shadow-it-domain.DoZnGAtf_Z1mHw4r.webp&quot; alt=&quot;New Domain Level Metrics&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;These metrics can be filtered by all available filters on the dashboard, including user, application, or content category.&lt;/p&gt;
&lt;p&gt;Both the analytics and policies are accessible in the Cloudflare &lt;a href=&quot;https://one.dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Zero Trust dashboard&lt;/a&gt;, empowering organizations with better visibility and control.&lt;/p&gt;</description><pubDate>Wed, 17 Dec 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category><category>Cloudflare One</category></item><item><title>Cloudflare One - New duplicate action for supported Cloudflare One resources</title><link>https://developers.cloudflare.com/changelog/post/2025-12-16-new-duplicate-action-for-supported-cloudflare-one-resources/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-16-new-duplicate-action-for-supported-cloudflare-one-resources/</guid><description>&lt;p&gt;You can now duplicate specific Cloudflare One resources with a single click from the dashboard.&lt;/p&gt;
&lt;p&gt;Initially supported resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Access Applications&lt;/li&gt;
&lt;li&gt;Access Policies&lt;/li&gt;
&lt;li&gt;Gateway Policies&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To try this out, simply click on the overflow menu (⋮) from the resource table and click &lt;i&gt;Duplicate&lt;/i&gt;. We will continue to add the Duplicate action for resources throughout 2026.&lt;/p&gt;</description><pubDate>Tue, 16 Dec 2025 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category></item><item><title>Workers - Support for ctx.exports in @cloudflare/vitest-pool-workers</title><link>https://developers.cloudflare.com/changelog/post/2025-12-16-vitest-ctx-exports-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-16-vitest-ctx-exports-support/</guid><description>&lt;p&gt;The &lt;a href=&quot;https://developers.cloudflare.com/workers/testing/vitest-integration/&quot;&gt;&lt;code&gt;@cloudflare/vitest-pool-workers&lt;/code&gt;&lt;/a&gt; package now supports the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/context/#exports&quot;&gt;&lt;code&gt;ctx.exports&lt;/code&gt; API&lt;/a&gt;, allowing you to access your Worker&apos;s top-level exports during tests.&lt;/p&gt;
&lt;p&gt;You can access &lt;code&gt;ctx.exports&lt;/code&gt; in unit tests by calling &lt;code&gt;createExecutionContext()&lt;/code&gt;:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createExecutionContext&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;cloudflare:test&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;vitest&quot;&lt;/span&gt;&lt;span&gt;;&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;it&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;can access ctx.exports&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createExecutionContext&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;exports&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;MyEntryPoint&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;myMethod&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;expect&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toBe&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;expected value&quot;&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;/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;Alternatively, you can import &lt;code&gt;exports&lt;/code&gt; directly from &lt;code&gt;cloudflare:workers&lt;/code&gt;:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;exports&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;cloudflare:workers&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;vitest&quot;&lt;/span&gt;&lt;span&gt;;&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;it&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;can access imported exports&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;exports&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;MyEntryPoint&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;myMethod&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;expect&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toBe&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;expected value&quot;&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;/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;See the &lt;a href=&quot;https://github.com/cloudflare/workers-sdk/tree/main/fixtures/vitest-pool-workers-examples/context-exports&quot; target=&quot;_blank&quot;&gt;context-exports fixture&lt;/a&gt; for a complete example.&lt;/p&gt;</description><pubDate>Tue, 16 Dec 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Configure your framework for Cloudflare automatically</title><link>https://developers.cloudflare.com/changelog/post/2025-12-16-wrangler-autoconfig/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-16-wrangler-autoconfig/</guid><description>&lt;p&gt;Wrangler now supports automatic configuration for popular web frameworks in experimental mode, making it even easier to deploy to Cloudflare Workers.&lt;/p&gt;
&lt;p&gt;Previously, if you wanted to deploy an application using a popular web framework like Next.js or Astro, you had to follow tutorials to set up your application for deployment to Cloudflare Workers. This usually involved creating a Wrangler file, installing adapters, or changing configuration options.&lt;/p&gt;
&lt;p&gt;Now &lt;code&gt;wrangler deploy&lt;/code&gt; does this for you. Starting with Wrangler 4.55, you can use &lt;code&gt;npx wrangler deploy --x-autoconfig&lt;/code&gt; in the directory of any web application using one of the supported frameworks. Wrangler will then proceed to configure and deploy it to your Cloudflare account.&lt;/p&gt;
&lt;p&gt;You can also configure your application without deploying it by using the new &lt;code&gt;npx wrangler setup&lt;/code&gt; command. This enables you to easily review what changes we are making so your application is ready for Cloudflare Workers.&lt;/p&gt;
&lt;p&gt;The following application frameworks are supported starting today:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;Astro&lt;/li&gt;
&lt;li&gt;Nuxt&lt;/li&gt;
&lt;li&gt;TanStack Start&lt;/li&gt;
&lt;li&gt;SolidStart&lt;/li&gt;
&lt;li&gt;React Router&lt;/li&gt;
&lt;li&gt;SvelteKit&lt;/li&gt;
&lt;li&gt;Docusaurus&lt;/li&gt;
&lt;li&gt;Qwik&lt;/li&gt;
&lt;li&gt;Analog&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Automatic configuration also supports static sites by detecting the assets directory and build command. From a single index.html file to the output of a generator like Jekyll or Hugo, you can just run &lt;code&gt;npx wrangler deploy --x-autoconfig&lt;/code&gt; to upload to Cloudflare.&lt;/p&gt;
&lt;p&gt;We&apos;re really excited to bring you automatic configuration so you can do more with Workers. Please let us know if you run into challenges using this experimentally. We’ve opened a &lt;a href=&quot;https://github.com/cloudflare/workers-sdk/discussions/11667&quot; target=&quot;_blank&quot;&gt;GitHub discussion&lt;/a&gt; and would love to hear your feedback.&lt;/p&gt;</description><pubDate>Tue, 16 Dec 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Durable Objects, Workers - New Best Practices guide for Durable Objects</title><link>https://developers.cloudflare.com/changelog/post/2025-12-15-rules-of-durable-objects/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-15-rules-of-durable-objects/</guid><description>&lt;p&gt;A new &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/best-practices/rules-of-durable-objects/&quot;&gt;Rules of Durable Objects&lt;/a&gt; guide is now available, providing opinionated best practices for building effective Durable Objects applications. This guide covers design patterns, storage strategies, concurrency, and common anti-patterns to avoid.&lt;/p&gt;
&lt;p&gt;Key guidance includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Design around your &quot;atom&quot; of coordination&lt;/strong&gt; — Create one Durable Object per logical unit (chat room, game session, user) instead of a global singleton that becomes a bottleneck.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use SQLite storage with RPC methods&lt;/strong&gt; — SQLite-backed Durable Objects with typed RPC methods provide the best developer experience and performance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Understand input and output gates&lt;/strong&gt; — Learn how Cloudflare&apos;s runtime prevents data races by default, how write coalescing works, and when to use &lt;code&gt;blockConcurrencyWhile()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leverage Hibernatable WebSockets&lt;/strong&gt; — Reduce costs for real-time applications by allowing Durable Objects to sleep while maintaining WebSocket connections.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/examples/testing-with-durable-objects/&quot;&gt;testing documentation&lt;/a&gt; has also been updated with modern patterns using &lt;code&gt;@cloudflare/vitest-pool-workers&lt;/code&gt;, including examples for testing SQLite storage, alarms, and direct instance access:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&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;span&gt; &lt;/span&gt;&lt;span&gt;runDurableObjectAlarm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;cloudflare:test&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;vitest&quot;&lt;/span&gt;&lt;span&gt;;&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;it&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;can test Durable Objects with isolated storage&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;COUNTER&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getByName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;test&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Call RPC methods directly on the stub&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;increment&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;expect&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getCount&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toBe&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Trigger alarms immediately without waiting&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;runDurableObjectAlarm&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;stub&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&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;span&gt; &lt;/span&gt;&lt;span&gt;runDurableObjectAlarm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;cloudflare:test&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;it&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;vitest&quot;&lt;/span&gt;&lt;span&gt;;&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;it&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;can test Durable Objects with isolated storage&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;COUNTER&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getByName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;test&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Call RPC methods directly on the stub&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;increment&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;expect&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getCount&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toBe&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Trigger alarms immediately without waiting&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;runDurableObjectAlarm&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;stub&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;</description><pubDate>Mon, 15 Dec 2025 00:00:00 GMT</pubDate><product>Durable Objects</product><category>Durable Objects</category><category>Workers</category></item><item><title>Durable Objects, Workers - Billing for SQLite Storage</title><link>https://developers.cloudflare.com/changelog/post/2025-12-12-durable-objects-sqlite-storage-billing/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-12-durable-objects-sqlite-storage-billing/</guid><description>&lt;p&gt;Storage billing for SQLite-backed Durable Objects will be enabled in January 2026, with a target date of January 7, 2026 (no earlier).&lt;/p&gt;
&lt;p&gt;To view your SQLite storage usage, go to the &lt;strong&gt;Durable Objects&lt;/strong&gt; page&lt;/p&gt;
&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers/durable-objects&quot; target=&quot;_blank&quot;&gt;  Go to &lt;strong&gt;Durable Objects&lt;/strong&gt;  &lt;/a&gt;
&lt;p&gt;If you do not want to incur costs, please take action such as optimizing queries or deleting unnecessary stored data in order to reduce your SQLite storage usage ahead of the January 7th target. Only usage on and after the billing target date will incur charges.&lt;/p&gt;
&lt;p&gt;Developers on the Workers Paid plan with Durable Object&apos;s SQLite storage usage beyond included limits will incur charges according to &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/platform/pricing/#sqlite-storage-backend&quot;&gt;SQLite storage pricing&lt;/a&gt; announced in September 2024 with the &lt;a href=&quot;https://blog.cloudflare.com/sqlite-in-durable-objects/&quot; target=&quot;_blank&quot;&gt;public beta&lt;/a&gt;. Developers on the Workers Free plan will not be charged.&lt;/p&gt;
&lt;p&gt;Compute billing for SQLite-backed Durable Objects has been enabled since the initial public beta. SQLite-backed Durable Objects currently incur &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/platform/pricing/#compute-billing&quot;&gt;charges for requests and duration&lt;/a&gt;, and no changes are being made to compute billing.&lt;/p&gt;
&lt;p&gt;For more information about SQLite storage pricing and limits, refer to the &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/platform/pricing/#sqlite-storage-backend&quot;&gt;Durable Objects pricing documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 12 Dec 2025 00:00:00 GMT</pubDate><product>Durable Objects</product><category>Durable Objects</category><category>Workers</category></item><item><title>R2 SQL - R2 SQL now supports aggregations and schema discovery</title><link>https://developers.cloudflare.com/changelog/post/2025-12-12-aggregation-support-and-more/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-12-aggregation-support-and-more/</guid><description>&lt;p&gt;R2 SQL now supports aggregation functions, &lt;code&gt;GROUP BY&lt;/code&gt;, &lt;code&gt;HAVING&lt;/code&gt;, along with schema discovery commands to make it easy to explore your data catalog.&lt;/p&gt;
&lt;h4&gt;Aggregation Functions&lt;/h4&gt;
&lt;p&gt;You can now perform aggregations on Apache Iceberg tables in &lt;a href=&quot;https://developers.cloudflare.com/r2/data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt; using standard SQL functions including &lt;code&gt;COUNT(*)&lt;/code&gt;, &lt;code&gt;SUM()&lt;/code&gt;, &lt;code&gt;AVG()&lt;/code&gt;, &lt;code&gt;MIN()&lt;/code&gt;, and &lt;code&gt;MAX()&lt;/code&gt;. Combine these with &lt;code&gt;GROUP BY&lt;/code&gt; to analyze data across dimensions, and use &lt;code&gt;HAVING&lt;/code&gt; to filter aggregated results.&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;-- Calculate average transaction amounts by department&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; department, &lt;/span&gt;&lt;span&gt;COUNT&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;), &lt;/span&gt;&lt;span&gt;AVG&lt;/span&gt;&lt;span&gt;(total_amount)&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; my_namespace.sales_data&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; region &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;North&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;GROUP BY&lt;/span&gt;&lt;span&gt; department&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HAVING&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;COUNT&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;50&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ORDER BY&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AVG&lt;/span&gt;&lt;span&gt;(total_amount) &lt;/span&gt;&lt;span&gt;DESC&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;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;-- Find high-value departments&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;SELECT&lt;/span&gt;&lt;span&gt; department, &lt;/span&gt;&lt;span&gt;SUM&lt;/span&gt;&lt;span&gt;(total_amount)&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; my_namespace.sales_data&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;GROUP BY&lt;/span&gt;&lt;span&gt; department&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HAVING&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SUM&lt;/span&gt;&lt;span&gt;(total_amount) &lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;50000&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;h4&gt;Schema Discovery&lt;/h4&gt;
&lt;p&gt;New metadata commands make it easy to explore your data catalog and understand table structures:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SHOW DATABASES&lt;/code&gt; or &lt;code&gt;SHOW NAMESPACES&lt;/code&gt; - List all available namespaces&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SHOW TABLES IN namespace_name&lt;/code&gt; - List tables within a namespace&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DESCRIBE namespace_name.table_name&lt;/code&gt; - View table schema and column types&lt;/li&gt;
&lt;/ul&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&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;sql&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;{ACCOUNT_ID}_{BUCKET_NAME}&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;DESCRIBE default.sales_data;&quot;&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; &lt;/span&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4.54.0&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;/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;column_name&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;required&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;initial_default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;write_default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;doc&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;div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sale_id&lt;/span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BIGINT&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;span&gt;               &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Unique&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;identifier&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;each&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sales&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;transaction&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;div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sale_timestamp&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TIMESTAMPTZ&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;span&gt;               &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Exact&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;time&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sale&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;occurred&lt;/span&gt;&lt;span&gt; (used &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;partitioning&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;div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;department&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TEXT&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;span&gt;               &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Product&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;department&lt;/span&gt;&lt;span&gt; (8 &lt;/span&gt;&lt;span&gt;categories:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Electronics,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Beauty,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Home,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Toys,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Sports,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Food,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Clothing,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Books&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;div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;category&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TEXT&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;span&gt;               &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Product&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;category&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;grouping&lt;/span&gt;&lt;span&gt; (4 &lt;/span&gt;&lt;span&gt;categories:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Premium,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Standard,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Budget,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Clearance&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;div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;region&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TEXT&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;span&gt;               &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Geographic&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sales&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;region&lt;/span&gt;&lt;span&gt; (5 &lt;/span&gt;&lt;span&gt;regions:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;North,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;South,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;East,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;West,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Central&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;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; &lt;/span&gt;&lt;span&gt;INT&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;span&gt;               &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Unique&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;identifier&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;product&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sold&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;div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;quantity&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;INT&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;span&gt;               &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;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;units&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sold&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;transaction&lt;/span&gt;&lt;span&gt; (range: &lt;/span&gt;&lt;span&gt;1-50&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;div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;unit_price&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DECIMAL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&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;span&gt;false&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;span&gt;               &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Price&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;per&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;unit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dollars&lt;/span&gt;&lt;span&gt; (range: &lt;/span&gt;&lt;span&gt;$5&lt;/span&gt;&lt;span&gt;.00-&lt;/span&gt;&lt;span&gt;$500&lt;/span&gt;&lt;span&gt;.00&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;div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;total_amount&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DECIMAL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&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;span&gt;false&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;span&gt;               &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Total&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sale&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;before&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tax&lt;/span&gt;&lt;span&gt; (quantity &lt;/span&gt;&lt;span&gt;×&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;unit_price&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;discounts&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;applied&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;div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;discount_percent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;INT&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;span&gt;               &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Discount&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;percentage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;applied&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;this&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sale&lt;/span&gt;&lt;span&gt; (0-50%)                                                  │&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;tax_amount&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DECIMAL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&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;span&gt;false&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;span&gt;               &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Tax&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;collected&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sale&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;div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;profit_margin&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DECIMAL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;10,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&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;span&gt;false&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;span&gt;               &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Profit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;margin&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sale&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;decimal&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;percentage&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;div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;customer_id&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;INT&lt;/span&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;span&gt;               &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Unique&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;identifier&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;customer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;who&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;made&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;purchase&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;div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;is_online_sale&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BOOLEAN&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;span&gt;               &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Boolean&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;flag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;indicating&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sale&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;was&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;made&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;online&lt;/span&gt;&lt;span&gt; (true) or in-store (&lt;/span&gt;&lt;span&gt;false&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;div&gt;&lt;div&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sale_date&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DATE&lt;/span&gt;&lt;span&gt;           &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;span&gt;               &lt;/span&gt;&lt;span&gt;│&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Calendar&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sale&lt;/span&gt;&lt;span&gt; (extracted &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sale_timestamp&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;div&gt;&lt;div&gt;&lt;span&gt;Read&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;B&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;across&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&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;On&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;average,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;B&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;s&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;To learn more about the new aggregation capabilities and schema discovery commands, check out the &lt;a href=&quot;https://developers.cloudflare.com/r2-sql/sql-reference/&quot;&gt;SQL reference&lt;/a&gt;. If you&apos;re new to R2 SQL, visit our &lt;a href=&quot;https://developers.cloudflare.com/r2-sql/get-started/&quot;&gt;getting started guide&lt;/a&gt; to begin querying your data.&lt;/p&gt;</description><pubDate>Fri, 12 Dec 2025 00:00:00 GMT</pubDate><product>R2 SQL</product><category>R2 SQL</category></item><item><title>Logs - SentinelOne as Logpush destination</title><link>https://developers.cloudflare.com/changelog/post/2025-12-11-sentinelone-destination/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-11-sentinelone-destination/</guid><description>&lt;p&gt;Cloudflare Logpush now supports &lt;strong&gt;SentinelOne&lt;/strong&gt; as a native destination.&lt;/p&gt;
&lt;p&gt;Logs from Cloudflare can be sent to &lt;a href=&quot;https://www.sentinelone.com/&quot; target=&quot;_blank&quot;&gt;SentinelOne AI SIEM&lt;/a&gt; via &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/&quot;&gt;Logpush&lt;/a&gt;. The destination can be configured through the Logpush UI in the Cloudflare dashboard or by using the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/logpush/subresources/jobs/&quot;&gt;Logpush API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/enable-destinations/sentinelone/&quot;&gt;Destination Configuration&lt;/a&gt; documentation.&lt;/p&gt;</description><pubDate>Thu, 11 Dec 2025 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>WAF - WAF Release - 2025-12-11 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-12-11-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-11-emergency-waf-release/</guid><description>&lt;p&gt;This emergency release introduces rules for CVE-2025-55183 and CVE-2025-55184, targeting server-side function exposure and resource-exhaustion patterns, respectively.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Added coverage for Leaking Server Functions (CVE-2025-55183) and React Function DoS detection (CVE-2025-55184).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These updates strengthen protection for server-function abuse techniques (CVE-2025-55183, CVE-2025-55184) that may expose internal logic or disrupt application availability.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;17c5123f1ac049818765ebf2fefb4e9b &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;React - Leaking Server Functions - CVE:CVE-2025-55183&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This was labeled as Generic - Server Function Source Code Exposure.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Free Ruleset&lt;/td&gt;&lt;td&gt;3114709a3c3b4e3685052c7b251e86aa &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;React - Leaking Server Functions - CVE:CVE-2025-55183&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This was labeled as Generic - Server Function Source Code Exposure.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;2694f1610c0b471393b21aef102ec699 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;React - DoS - CVE:CVE-2025-55184&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This was labeled as Generic – Server Function Resource Exhaustion.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Thu, 11 Dec 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>AI Crawl Control - Pay Per Crawl (Private beta) - Discovery API, custom pricing, and advanced configuration</title><link>https://developers.cloudflare.com/changelog/post/2025-12-10-pay-per-crawl-enhancements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-10-pay-per-crawl-enhancements/</guid><description>&lt;p&gt;Pay Per Crawl is introducing enhancements for both AI crawler operators and site owners, focusing on programmatic discovery, flexible pricing models, and granular configuration control.&lt;/p&gt;
&lt;h4&gt;For AI crawler operators&lt;/h4&gt;
&lt;h4&gt;Discovery API&lt;/h4&gt;
&lt;p&gt;A new authenticated API endpoint allows verified crawlers to programmatically discover domains participating in Pay Per Crawl. Crawlers can use this to build optimized crawl queues, cache domain lists, and identify new participating sites. This eliminates the need to discover payable content through trial requests.&lt;/p&gt;
&lt;p&gt;The API endpoint is &lt;code&gt;GET https://crawlers-api.ai-audit.cfdata.org/charged_zones&lt;/code&gt; and requires Web Bot Auth authentication. Refer to &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/discover-payable-content/&quot;&gt;Discover payable content&lt;/a&gt; for authentication steps, request parameters, and response schema.&lt;/p&gt;
&lt;h4&gt;Payment header signature requirement&lt;/h4&gt;
&lt;p&gt;Payment headers (&lt;code&gt;crawler-exact-price&lt;/code&gt; or &lt;code&gt;crawler-max-price&lt;/code&gt;) must now be included in the Web Bot Auth &lt;code&gt;signature-input&lt;/code&gt; header components. This security enhancement prevents payment header tampering, ensures authenticated payment intent, validates crawler identity with payment commitment, and protects against replay attacks with modified pricing. Crawlers must add their payment header to the list of signed components when &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/crawl-pages/#22-sign-your-request-with-web-bot-auth&quot;&gt;constructing the signature-input header&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;New &lt;code&gt;crawler-error&lt;/code&gt; header&lt;/h4&gt;
&lt;p&gt;Pay Per Crawl error responses now include a new &lt;code&gt;crawler-error&lt;/code&gt; header with 11 specific &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/error-codes/&quot;&gt;error codes&lt;/a&gt; for programmatic handling. Error response bodies remain unchanged for compatibility. These codes enable robust error handling, automated retry logic, and accurate spending tracking.&lt;/p&gt;
&lt;h4&gt;For site owners&lt;/h4&gt;
&lt;h4&gt;Configure free pages&lt;/h4&gt;
&lt;p&gt;Site owners can now offer free access to specific pages like homepages, navigation, or discovery pages while charging for other content. Create a &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-site-owner/advanced-configuration/#disable-pay-per-crawl-by-uri-pattern&quot;&gt;Configuration Rule&lt;/a&gt; in &lt;strong&gt;Rules&lt;/strong&gt; &gt; &lt;strong&gt;Configuration Rules&lt;/strong&gt;, set your URI pattern using wildcard, exact, or prefix matching on the &lt;strong&gt;URI Full&lt;/strong&gt; field, and enable the &lt;strong&gt;Disable Pay Per Crawl&lt;/strong&gt; setting. When disabled for a URI pattern, crawler requests pass through without blocking or charging.&lt;/p&gt;
&lt;p&gt;Some paths are always free to crawl. These paths are: &lt;code&gt;/robots.txt&lt;/code&gt;, &lt;code&gt;/sitemap.xml&lt;/code&gt;, &lt;code&gt;/security.txt&lt;/code&gt;, &lt;code&gt;/.well-known/security.txt&lt;/code&gt;, &lt;code&gt;/crawlers.json&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;AI crawler operators&lt;/strong&gt;: &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/discover-payable-content/&quot;&gt;Discover payable content&lt;/a&gt; | &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/crawl-pages/&quot;&gt;Crawl pages&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Site owners&lt;/strong&gt;: &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-site-owner/advanced-configuration/&quot;&gt;Advanced configuration&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 10 Dec 2025 00:00:00 GMT</pubDate><product>AI Crawl Control</product><category>AI Crawl Control</category></item><item><title>WAF - WAF Release - 2025-12-10 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-12-10-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-10-emergency-waf-release/</guid><description>&lt;p&gt;This additional week&apos;s emergency release introduces improvements to our existing rule for React – Remote Code Execution – CVE-2025-55182 - 2, along with two new generic detections covering server-side function exposure and resource-exhaustion patterns.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Enhanced detection logic for React – RCE – CVE-2025-55182, added Generic – Server Function Source Code Exposure, and added Generic – Server Function Resource Exhaustion.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These updates strengthen protection against React RCE exploitation attempts and broaden coverage for common server-function abuse techniques that may expose internal logic or disrupt application availability.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;bc1aee59731c488ca8b5314615fce168 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;React - Remote Code Execution - CVE:CVE-2025-55182 - 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is an improved detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Free Ruleset&lt;/td&gt;&lt;td&gt;cbdd3f48396e4b7389d6efd174746aff &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;React - Remote Code Execution - CVE:CVE-2025-55182 - 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is an improved detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;17c5123f1ac049818765ebf2fefb4e9b &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic - Server Function Source Code Exposure&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Free Ruleset&lt;/td&gt;&lt;td&gt;3114709a3c3b4e3685052c7b251e86aa &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic - Server Function Source Code Exposure&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;2694f1610c0b471393b21aef102ec699 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic - Server Function Resource Exhaustion&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Wed, 10 Dec 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.10.118.1)</title><link>https://developers.cloudflare.com/changelog/post/2025-12-09-warp-windows-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-09-warp-windows-beta/</guid><description>&lt;p&gt;A new Beta release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/&quot;&gt;Local Domain Fallback&lt;/a&gt; feature has been fixed for devices running WARP client version 2025.4.929.0 and newer. Previously, these devices could experience failures with Local Domain Fallback unless a fallback server was explicitly configured. This configuration is no longer a requirement for the feature to function correctly.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode&quot;&gt;Proxy mode&lt;/a&gt; now supports transparent HTTP proxying in addition to CONNECT-based proxying.&lt;/li&gt;
&lt;li&gt;Fixed an issue where sending large messages to the WARP daemon by Inter-Process Communication (IPC) could cause WARP to crash and result in service interruptions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For Windows 11 24H2 users, Microsoft has confirmed a regression that may lead to performance issues like mouse lag, audio cracking, or other slowdowns. Cloudflare recommends users experiencing these issues upgrade to a minimum &lt;a href=&quot;https://support.microsoft.com/en-us/topic/july-8-2025-kb5062553-os-build-26100-4652-523e69cb-051b-43c6-8376-6a76d6caeefd&quot;&gt;Windows 11 24H2 KB5062553&lt;/a&gt; or higher for resolution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with KB5055523 installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 09 Dec 2025 23:03:10 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.10.118.1)</title><link>https://developers.cloudflare.com/changelog/post/2025-12-09-warp-macos-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-09-warp-macos-beta/</guid><description>&lt;p&gt;A new Beta release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/&quot;&gt;Local Domain Fallback&lt;/a&gt; feature has been fixed for devices running WARP client version 2025.4.929.0 and newer. Previously, these devices could experience failures with Local Domain Fallback unless a fallback server was explicitly configured. This configuration is no longer a requirement for the feature to function correctly.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode&quot;&gt;Proxy mode&lt;/a&gt; now supports transparent HTTP proxying in addition to CONNECT-based proxying.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 09 Dec 2025 23:02:28 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Workers - Python cold start improvements</title><link>https://developers.cloudflare.com/changelog/post/2025-12-08-python-cold-start-improvements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-08-python-cold-start-improvements/</guid><description>&lt;p&gt;Python Workers now feature improved cold start performance, reducing initialization time for new Worker instances.
This improvement is particularly noticeable for Workers with larger dependency sets or complex initialization logic.&lt;/p&gt;
&lt;p&gt;Every time you deploy a Python Worker, a memory snapshot is captured after the top level of the Worker is executed.
This snapshot captures all imports, including package imports that are often costly to load. The memory snapshot is loaded
when the Worker is first started, avoiding the need to reload the Python runtime and all dependencies on each cold start.&lt;/p&gt;
&lt;p&gt;We set up a benchmark that imports common packages (&lt;a href=&quot;https://www.python-httpx.org/&quot; target=&quot;_blank&quot;&gt;httpx&lt;/a&gt;,
&lt;a href=&quot;https://fastapi.tiangolo.com/&quot; target=&quot;_blank&quot;&gt;fastapi&lt;/a&gt; and &lt;a href=&quot;https://docs.pydantic.dev/latest/&quot; target=&quot;_blank&quot;&gt;pydantic&lt;/a&gt;)
to see how Python Workers stack up against other platforms:&lt;/p&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Platform&lt;/th&gt;&lt;th&gt;Mean Cold Start (ms)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Python Workers&lt;/td&gt;&lt;td&gt;1027&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AWS Lambda&lt;/td&gt;&lt;td&gt;2502&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Google Cloud Run&lt;/td&gt;&lt;td&gt;3069&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;These benchmarks run continuously. You can view the results and the methodology on our &lt;a href=&quot;https://cold.edgeworker.net&quot; target=&quot;_blank&quot;&gt;benchmark page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In additional testing, we have found that without any memory snapshot, the cold start for this benchmark takes around 10 seconds, so this change improves cold start performance by roughly a factor of 10.&lt;/p&gt;
&lt;p&gt;To get started with Python Workers, check out our &lt;a href=&quot;https://developers.cloudflare.com/workers/languages/python/&quot;&gt;Python Workers overview&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 08 Dec 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Easy Python package management with Pywrangler</title><link>https://developers.cloudflare.com/changelog/post/2025-12-08-python-pywrangler/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-08-python-pywrangler/</guid><description>&lt;p&gt;We are introducing a brand new tool called Pywrangler, which simplifies package management in Python Workers by
automatically installing Workers-compatible Python packages into your project.&lt;/p&gt;
&lt;p&gt;With Pywrangler, you specify your Worker&apos;s Python dependencies in your &lt;code&gt;pyproject.toml&lt;/code&gt; file:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt;]&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;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;python-beautifulsoup-worker&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;0.1.0&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;A simple Worker using beautifulsoup4&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;requires-python&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&gt;=3.12&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;dependencies&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;&quot;beautifulsoup4&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;dependency-groups&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;dev&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;&quot;workers-py&quot;&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;&quot;workers-runtime-sdk&quot;&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;You can then develop and deploy your Worker using the following commands:&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;uv&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pywrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;uv&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pywrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&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;Pywrangler automatically downloads and vendors the necessary packages for your Worker, and these packages are bundled with the Worker when you deploy.&lt;/p&gt;
&lt;p&gt;Consult the &lt;a href=&quot;https://developers.cloudflare.com/workers/languages/python/packages/&quot;&gt;Python packages documentation&lt;/a&gt; for full details on Pywrangler and Python package management in Workers.&lt;/p&gt;</description><pubDate>Mon, 08 Dec 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Wrangler config is optional when using Vite plugin</title><link>https://developers.cloudflare.com/changelog/post/2025-12-08-vite-optional-config/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-08-vite-optional-config/</guid><description>&lt;p&gt;When using the &lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/&quot;&gt;Cloudflare Vite plugin&lt;/a&gt; to build and deploy Workers, a Wrangler configuration file is now optional for assets-only (static) sites. If no &lt;code&gt;wrangler.toml&lt;/code&gt;, &lt;code&gt;wrangler.json&lt;/code&gt;, or &lt;code&gt;wrangler.jsonc&lt;/code&gt; file is found, the plugin generates sensible defaults for an assets-only site. The &lt;code&gt;name&lt;/code&gt; is based on the &lt;code&gt;package.json&lt;/code&gt; or the project directory name, and the &lt;code&gt;compatibility_date&lt;/code&gt; uses the latest date supported by your installed Miniflare version.&lt;/p&gt;
&lt;p&gt;This allows easier setup for static sites using Vite. Note that SPAs will still need to &lt;a href=&quot;https://developers.cloudflare.com/workers/static-assets/routing/single-page-application/&quot; target=&quot;_blank&quot;&gt;set &lt;code&gt;assets.not_found_handling&lt;/code&gt; to &lt;code&gt;single-page-application&lt;/code&gt;&lt;/a&gt; in order to function correctly.&lt;/p&gt;</description><pubDate>Mon, 08 Dec 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Configure Workers programmatically using the Vite plugin</title><link>https://developers.cloudflare.com/changelog/post/2025-12-08-vite-programmatic-config/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-08-vite-programmatic-config/</guid><description>&lt;p&gt;The &lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/&quot;&gt;Cloudflare Vite plugin&lt;/a&gt; now supports programmatic configuration of Workers without a Wrangler configuration file. You can use the &lt;code&gt;config&lt;/code&gt; option to define Worker settings directly in your Vite configuration, or to modify existing configuration loaded from a Wrangler config file. This is particularly useful when integrating with other build tools or frameworks, as it allows them to control Worker configuration without needing users to manage a separate config file.&lt;/p&gt;
&lt;h4&gt;The &lt;code&gt;config&lt;/code&gt; option&lt;/h4&gt;
&lt;p&gt;The Vite plugin&apos;s new &lt;code&gt;config&lt;/code&gt; option accepts either a partial configuration object or a function that receives the current configuration and returns overrides. This option is applied after any config file is loaded, allowing the plugin to override specific values or define Worker configuration entirely in code.&lt;/p&gt;
&lt;h4&gt;Example usage&lt;/h4&gt;
&lt;p&gt;Setting &lt;code&gt;config&lt;/code&gt; to an object to provide configuration values that merge with defaults and config file settings:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;vite&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&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;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/vite-plugin&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&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;plugins&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;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;&lt;/span&gt;&lt;span&gt;config&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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-worker&quot;&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;compatibility_flags&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;nodejs_compat&quot;&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;send_email&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;/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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;EMAIL&quot;&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;]&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;)&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;;&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;Use a function to modify the existing configuration:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;vite&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&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;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/vite-plugin&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&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;plugins&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;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;config&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;userConfig&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;userConfig&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;compatibility_flags&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;)&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;;&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;Return an object with values to merge:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;vite&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&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;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/vite-plugin&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&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;plugins&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;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;config&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;userConfig&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;userConfig&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;compatibility_flags&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;includes&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;no_nodejs_compat&quot;&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; compatibility_flags&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;nodejs_compat&quot;&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;/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;)&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;;&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;h4&gt;Auxiliary Workers&lt;/h4&gt;
&lt;p&gt;Auxiliary Workers also support the &lt;code&gt;config&lt;/code&gt; option, enabling multi-Worker architectures without config files.&lt;/p&gt;
&lt;p&gt;Define auxiliary Workers without config files using &lt;code&gt;config&lt;/code&gt; inside the &lt;code&gt;auxiliaryWorkers&lt;/code&gt; array:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;vite&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&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;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/vite-plugin&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&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;plugins&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;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;&lt;/span&gt;&lt;span&gt;config&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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;entry-worker&quot;&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;main&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./src/entry.ts&quot;&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;services&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; binding&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;API&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; service&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;api-worker&quot;&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;/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;auxiliaryWorkers&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;/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;config&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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;api-worker&quot;&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;main&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./src/api.ts&quot;&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;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;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;;&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 details and examples, see &lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/reference/programmatic-configuration/&quot;&gt;Programmatic configuration&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 08 Dec 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare Fundamentals, Terraform - Terraform v5.14.0 now available</title><link>https://developers.cloudflare.com/changelog/post/2025-12-05-terraform-v5140-provider/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-05-terraform-v5140-provider/</guid><description>&lt;p&gt;Earlier this year, we announced the launch of the new Terraform v5 Provider. We are aware of the high number of issues reported by the Cloudflare community related to the v5 release. We have committed to releasing improvements on a &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5774&quot; target=&quot;_blank&quot;&gt;2-3 week cadence&lt;/a&gt; to ensure its stability and reliability, including the v5.14 release. We have also pivoted from an &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6237&quot; target=&quot;_blank&quot;&gt;issue-to-issue approach to a resource-per-resource approach&lt;/a&gt; - we will be focusing on specific resources to not only stabilize the resource but also ensure it is migration-friendly for those migrating from v4 to v5.&lt;/p&gt;
&lt;p&gt;Thank you for continuing to raise issues. They make our provider stronger and help us build products that reflect your needs.&lt;/p&gt;
&lt;p&gt;This release includes bug fixes, the stabilization of even more popular resources, and more.&lt;/p&gt;
&lt;h4&gt;Deprecation notice&lt;/h4&gt;
&lt;p&gt;Resource affected: &lt;code&gt;api_shield_discovery_operation&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Cloudflare continuously discovers and updates API endpoints and web assets of your web applications. To improve the maintainability of these dynamic resources, we are working on reducing the need to actively engage with discovered operations.&lt;/p&gt;
&lt;p&gt;The corresponding public API endpoint of &lt;a href=&quot;https://developers.cloudflare.com/api/resources/api_gateway/subresources/discovery/subresources/operations/&quot; target=&quot;_blank&quot;&gt;discovered operations&lt;/a&gt; is not affected and will continue to be supported.&lt;/p&gt;
&lt;h4&gt;Features&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;pages_project&lt;/strong&gt;: Add v4 -&gt; v5 migration tests (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/pull/6506&quot; target=&quot;_blank&quot;&gt;#6506&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Bug fixes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;account_members&lt;/strong&gt;: Makes member policies a set (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6488&quot; target=&quot;_blank&quot;&gt;#6488&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pages_project&lt;/strong&gt;: Ensures non empty refresh plans (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6515&quot; target=&quot;_blank&quot;&gt;#6515&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;R2&lt;/strong&gt;: Improves sweeper (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6512&quot; target=&quot;_blank&quot;&gt;#6512&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_kv&lt;/strong&gt;: Ignores value import state for verify (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6521&quot; target=&quot;_blank&quot;&gt;#6521&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_script&lt;/strong&gt;: No longer treats the migrations attribute as WriteOnly (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6489&quot; target=&quot;_blank&quot;&gt;#6489&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_script&lt;/strong&gt;: Resolves resource drift when worker has unmanaged secret (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6504&quot; target=&quot;_blank&quot;&gt;#6504&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_device_posture_rule&lt;/strong&gt;: Preserves input.version and other fields (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6500&quot; target=&quot;_blank&quot;&gt;#6500&lt;/a&gt;) and (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6503&quot; target=&quot;_blank&quot;&gt;#6503&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_dlp_custom_profile&lt;/strong&gt;: Adds sweepers for &lt;code&gt;dlp_custom_profile&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zone_subscription|account_subscription&lt;/strong&gt;: Adds &lt;code&gt;partners_ent&lt;/code&gt; as valid enum for &lt;code&gt;rate_plan.id&lt;/code&gt; (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6505&quot; target=&quot;_blank&quot;&gt;#6505&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zone&lt;/strong&gt;: Ensures datasource model schema parity (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6487&quot; target=&quot;_blank&quot;&gt;#6487&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;subscription&lt;/strong&gt;: Updates import signature to accept account_id/subscription_id to import account subscription (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6510&quot; target=&quot;_blank&quot;&gt;#6510&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Upgrade to newer version&lt;/h4&gt;
&lt;p&gt;We suggest waiting to migrate to v5 while we work on stabilization. This helps with avoiding any blocking issues while the Terraform resources are actively being &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6237&quot; target=&quot;_blank&quot;&gt;stabilized&lt;/a&gt;. We will be releasing a new migration tool in March 2026 to help support v4 to v5 transitions for our most popular resources.&lt;/p&gt;
&lt;h4&gt;For more information&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;Terraform Provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/terraform/&quot; target=&quot;_blank&quot;&gt;Documentation on using Terraform with Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 05 Dec 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Terraform</category></item><item><title>WAF - Increased WAF payload limit for all plans</title><link>https://developers.cloudflare.com/changelog/post/2025-12-05-rcs-vuln/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-05-rcs-vuln/</guid><description>&lt;p&gt;Cloudflare WAF now inspects request-payload size of up to 1 MB across all plans to enhance our detection capabilities for React RCE (CVE-2025-55182).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;React payloads commonly have a default maximum size of 1 MB. Cloudflare WAF previously inspected up to 128 KB on Enterprise plans, with even lower limits on other plans.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; We later reinstated the maximum request-payload size the Cloudflare WAF inspects. Refer to &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-12-05-waf-max-payload-size-change/&quot;&gt;Updating the WAF maximum payload values&lt;/a&gt; for details.&lt;/p&gt;</description><pubDate>Fri, 05 Dec 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>WAF - Updating the WAF maximum payload values</title><link>https://developers.cloudflare.com/changelog/post/2025-12-05-waf-max-payload-size-change/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-05-waf-max-payload-size-change/</guid><description>&lt;p&gt;We are reinstating the maximum request-payload size the Cloudflare WAF inspects, with WAF on Enterprise zones inspecting up to 128 KB.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-12-05-rcs-vuln/&quot;&gt;December 5, 2025&lt;/a&gt;, we initially attempted to increase the maximum WAF payload limit to 1 MB across all plans. However, an automatic rollout for all customers proved impractical because the increase led to a surge in false positives for existing managed rules.&lt;/p&gt;
&lt;p&gt;This issue was particularly notable within the Cloudflare Managed Ruleset and the Cloudflare OWASP Core Ruleset, impacting customer traffic.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Customers on paid plans can increase the limit to 1 MB for any of their zones by contacting Cloudflare Support. Free zones are already protected up to 1 MB and do not require any action.&lt;/p&gt;</description><pubDate>Fri, 05 Dec 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Hyperdrive - Connect to remote databases during local development with wrangler dev</title><link>https://developers.cloudflare.com/changelog/post/2025-12-04-hyperdrive-remote-database-local-dev/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-04-hyperdrive-remote-database-local-dev/</guid><description>&lt;p&gt;You can now connect directly to remote databases and databases requiring TLS with &lt;code&gt;wrangler dev&lt;/code&gt;.
This lets you run your Worker code locally while connecting to remote databases, without needing to use &lt;code&gt;wrangler dev --remote&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;localConnectionString&lt;/code&gt; field and &lt;code&gt;CLOUDFLARE_HYPERDRIVE_LOCAL_CONNECTION_STRING_&amp;#x3C;BINDING_NAME&gt;&lt;/code&gt; environment variable can be used to configure the connection string used by &lt;code&gt;wrangler dev&lt;/code&gt;.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;hyperdrive&lt;/span&gt;&lt;span&gt;&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;HYPERDRIVE&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;your-hyperdrive-id&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;localConnectionString&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;postgres://user:password@remote-host.example.com:5432/database?sslmode=require&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;/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;Learn more about &lt;a href=&quot;https://developers.cloudflare.com/hyperdrive/configuration/local-development/&quot;&gt;local development with Hyperdrive&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 04 Dec 2025 00:00:00 GMT</pubDate><product>Hyperdrive</product><category>Hyperdrive</category></item><item><title>Workers - One-click Access protection for Workers now creates reusable Cloudflare Access policies</title><link>https://developers.cloudflare.com/changelog/post/2025-12-03-reusable-access-policies/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-03-reusable-access-policies/</guid><description>&lt;p&gt;Workers applications now use reusable &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/policies/&quot;&gt;Cloudflare Access policies&lt;/a&gt; to reduce duplication and simplify access management across multiple Workers.&lt;/p&gt;
&lt;p&gt;Previously, enabling Cloudflare Access on a Worker created per-application policies, unique to each application. Now, we create reusable policies that can be shared across applications:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Preview URLs&lt;/strong&gt;: All Workers preview URLs share a single &quot;Cloudflare Workers Preview URLs&quot; policy across your account. This policy is automatically created the first time you enable Access on any preview URL. By sharing a single policy across all preview URLs, you can configure access rules once and have them apply company-wide to all Workers which protect preview URLs. This makes it much easier to manage who can access preview environments without having to update individual policies for each Worker.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Production workers.dev URLs&lt;/strong&gt;: When enabled, each Worker gets its own reusable policy (named &lt;code&gt;&amp;#x3C;worker-name&gt; - Production&lt;/code&gt;) by default. We recognize production services often have different access requirements and having individual policies here makes it easier to configure service-to-service authentication or protect internal dashboards or applications with specific user groups. Keeping these policies separate gives you the flexibility to configure exactly the right access rules for each production service. When you disable Access on a production Worker, the associated policy is automatically cleaned up if it&apos;s not being used by other applications.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This change reduces policy duplication, simplifies cross-company access management for preview environments, and provides the flexibility needed for production services. You can still customize access rules by editing the reusable policies in the Zero Trust dashboard.&lt;/p&gt;
&lt;p&gt;To enable Cloudflare Access on your Worker:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In the Cloudflare dashboard, go to &lt;strong&gt;Workers &amp;#x26; Pages&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select your Worker.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings&lt;/strong&gt; &gt; &lt;strong&gt;Domains &amp;#x26; Routes&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;For &lt;code&gt;workers.dev&lt;/code&gt; or Preview URLs, click &lt;strong&gt;Enable Cloudflare Access&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Optionally, click &lt;strong&gt;Manage Cloudflare Access&lt;/strong&gt; to customize the policy.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For more information on configuring Cloudflare Access for Workers, refer to the &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/routing/workers-dev/#manage-access-to-workersdev&quot;&gt;Workers Access documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 04 Dec 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Email security - Reclassifications to Submissions</title><link>https://developers.cloudflare.com/changelog/post/2025-12-03-submission-terminology-update/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-03-submission-terminology-update/</guid><description>&lt;p&gt;We have updated the terminology “Reclassify” and “Reclassifications” to “Submit” and “Submissions” respectively. This update more accurately reflects the outcome of providing these items to Cloudflare.&lt;/p&gt;
&lt;p&gt;Submissions are leveraged to tune future variants of campaigns. To respect data sanctity, providing a submission does not change the original disposition of the emails submitted.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/reclassification-submission.B6nL5Hw7_Z2qliyJ.webp&quot; alt=&quot;nav_example&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;This applies to all Email Security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Advantage&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 03 Dec 2025 21:11:33 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>WAF - WAF Release - 2025-12-03 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-12-03-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-03-emergency-waf-release/</guid><description>&lt;p&gt;The WAF rule deployed yesterday to block unsafe deserialization-based RCE has been updated. The rule description now reads “React – RCE – CVE-2025-55182”, explicitly mapping to the recently disclosed React Server Components vulnerability. Detection logic remains unchanged.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rule description updated to reference React – RCE – CVE-2025-55182 while retaining existing unsafe-deserialization detection.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Improved classification and traceability with no change to coverage against remote code execution attempts.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;33aa8a8a948b48b28d40450c5fb92fba &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;React - RCE - CVE:CVE-2025-55182&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;Rule metadata description changed. Detection unchanged.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Free Ruleset&lt;/td&gt;&lt;td&gt;2b5d06e34a814a889bee9a0699702280 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;React - RCE - CVE:CVE-2025-55182&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;Rule metadata description changed. Detection unchanged.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Wed, 03 Dec 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>WAF - WAF Release - 2025-12-02 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-12-02-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-02-emergency-waf-release/</guid><description>&lt;p&gt;This week&apos;s emergency release introduces a new rule to block a critical RCE vulnerability in widely-used web frameworks through unsafe deserialization patterns.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;New WAF rule deployed for RCE Generic Framework to block malicious POST requests containing unsafe deserialization patterns. If successfully exploited, this vulnerability allows attackers with network access via HTTP to execute arbitrary code remotely.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Successful exploitation allows unauthenticated attackers to execute arbitrary code remotely through crafted serialization payloads, enabling complete system compromise, data exfiltration, and potential lateral movement within affected environments.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;33aa8a8a948b48b28d40450c5fb92fba &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;RCE Generic - Framework&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Free Ruleset&lt;/td&gt;&lt;td&gt;2b5d06e34a814a889bee9a0699702280 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;RCE Generic - Framework&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Tue, 02 Dec 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>WAF - WAF Release - 2025-12-01</title><link>https://developers.cloudflare.com/changelog/post/2025-12-01-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-12-01-waf-release/</guid><description>&lt;p&gt;This week’s release introduces new detections for remote code execution attempts targeting Monsta FTP (CVE-2025-34299), alongside improvements to an existing XSS detection to enhance coverage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CVE-2025-34299 is a critical remote code execution flaw in Monsta FTP, arising from improper handling of user-supplied parameters within the file-handling interface. Certain builds allow crafted requests to bypass sanitization and reach backend PHP functions that execute arbitrary commands. Attackers can send manipulated parameters through the web panel to trigger command execution within the application’s runtime environment.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If exploited, the vulnerability enables full remote command execution on the underlying server, allowing takeover of the hosting environment, unauthorized file access, and potential lateral movement. As the flaw can be triggered without authentication on exposed Monsta FTP instances, it represents a severe risk for publicly reachable deployments.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;480da5e7984542a6b8d8d88da4fcc8a8 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Monsta FTP - Remote Code Execution - CVE:CVE-2025-34299&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;2380b125c53d42ac94479c42b7492846 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;XSS - JS Context Escape - Beta&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This rule is merged into the original rule &quot;XSS - JS Context Escape&quot; (ID: c1ad1bc37caa4cbeb104f44f7a3769d3 )&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 01 Dec 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Agents, Workers - Agents SDK v0.2.24 with resumable streaming, MCP improvements, and schedule fixes</title><link>https://developers.cloudflare.com/changelog/post/2025-11-26-agents-resumable-streaming/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-26-agents-resumable-streaming/</guid><description>&lt;p&gt;The latest release of &lt;a href=&quot;https://github.com/cloudflare/agents&quot; target=&quot;_blank&quot;&gt;@cloudflare/agents&lt;/a&gt; brings resumable streaming, significant MCP client improvements, and critical fixes for schedules and Durable Object lifecycle management.&lt;/p&gt;
&lt;h4&gt;Resumable streaming&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;AIChatAgent&lt;/code&gt; now supports resumable streaming, allowing clients to reconnect and continue receiving streamed responses without losing data. This is useful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Long-running AI responses&lt;/li&gt;
&lt;li&gt;Users on unreliable networks&lt;/li&gt;
&lt;li&gt;Users switching between devices mid-conversation&lt;/li&gt;
&lt;li&gt;Background tasks where users navigate away and return&lt;/li&gt;
&lt;li&gt;Real-time collaboration where multiple clients need to stay in sync&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Streams are maintained across page refreshes, broken connections, and syncing across open tabs and devices.&lt;/p&gt;
&lt;h4&gt;Other improvements&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Default JSON schema validator added to MCP client&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/agents/api-reference/schedule-tasks/&quot; target=&quot;_blank&quot;&gt;Schedules&lt;/a&gt; can now safely destroy the agent&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;MCP client API improvements&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;MCPClientManager&lt;/code&gt; API has been redesigned for better clarity and control:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;New &lt;code&gt;registerServer()&lt;/code&gt; method&lt;/strong&gt;: Register MCP servers without immediately connecting&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New &lt;code&gt;connectToServer()&lt;/code&gt; method&lt;/strong&gt;: Establish connections to registered servers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved reconnect logic&lt;/strong&gt;: &lt;code&gt;restoreConnectionsFromStorage()&lt;/code&gt; now properly handles failed connections&lt;/li&gt;
&lt;/ul&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;// Register a server to Agent&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&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;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mcp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;registerServer&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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-server&quot;&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;url&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://my-mcp-server.example.com&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Connect when ready&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mcp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;connectToServer&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Discover tools, prompts and resources&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mcp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;discoverIfConnected&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;)&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;The SDK now includes a formalized &lt;code&gt;MCPConnectionState&lt;/code&gt; enum with states: &lt;code&gt;idle&lt;/code&gt;, &lt;code&gt;connecting&lt;/code&gt;, &lt;code&gt;authenticating&lt;/code&gt;, &lt;code&gt;connected&lt;/code&gt;, &lt;code&gt;discovering&lt;/code&gt;, and &lt;code&gt;ready&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Enhanced MCP discovery&lt;/h4&gt;
&lt;p&gt;MCP discovery fetches the available tools, prompts, and resources from an MCP server so your agent knows what capabilities are available. The &lt;code&gt;MCPClientConnection&lt;/code&gt; class now includes a dedicated &lt;code&gt;discover()&lt;/code&gt; method with improved reliability:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Supports cancellation via AbortController&lt;/li&gt;
&lt;li&gt;Configurable timeout (default 15s)&lt;/li&gt;
&lt;li&gt;Discovery failures now throw errors immediately instead of silently continuing&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Bug fixes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Fixed a bug where &lt;a href=&quot;https://developers.cloudflare.com/agents/api-reference/schedule-tasks/&quot; target=&quot;_blank&quot;&gt;schedules&lt;/a&gt; meant to fire immediately with this.schedule(0, ...) or &lt;code&gt;this.schedule(new Date(), ...)&lt;/code&gt; would not fire&lt;/li&gt;
&lt;li&gt;Fixed an issue where schedules that took longer than 30 seconds would occasionally time out&lt;/li&gt;
&lt;li&gt;Fixed SSE transport now properly forwards session IDs and request headers&lt;/li&gt;
&lt;li&gt;Fixed AI SDK stream events convertion to UIMessageStreamPart&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Upgrade&lt;/h4&gt;
&lt;p&gt;To update to the latest version:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agents@latest&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;</description><pubDate>Wed, 26 Nov 2025 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>Cache - Audit Logs for Cache Purge Events</title><link>https://developers.cloudflare.com/changelog/post/2025-11-25-audit-logs-for-cache-purge-events/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-25-audit-logs-for-cache-purge-events/</guid><description>&lt;p&gt;You can now review detailed audit logs for cache purge events, giving you visibility into what purge requests were sent, what they contained, and by whom. Audit your purge requests via the Dashboard or API for all purge methods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Purge everything&lt;/li&gt;
&lt;li&gt;List of prefixes&lt;/li&gt;
&lt;li&gt;List of tags&lt;/li&gt;
&lt;li&gt;List of hosts&lt;/li&gt;
&lt;li&gt;List of files&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Example&lt;/h4&gt;
&lt;p&gt;The detailed audit payload is visible within the Cloudflare Dashboard (under &lt;strong&gt;Manage Account&lt;/strong&gt; &gt; &lt;strong&gt;Audit Logs&lt;/strong&gt;) and via the API. Below is an example of the Audit Logs v2 payload structure:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;action&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;success&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;create&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;actor&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1234567890abcdef&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;email&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user@example.com&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;product&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;purge_cache&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;files&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;https://example.com/images/logo.png&quot;&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;&quot;https://example.com/css/styles.css&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;/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;&quot;&lt;/span&gt;&lt;span&gt;zone&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;023e105f4ecef8ad9ca31a8372d0c353&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;example.com&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;/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;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;To get started, refer to the &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/account/account-security/audit-logs/&quot;&gt;Audit Logs documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 25 Nov 2025 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>Workers AI - Launching FLUX.2 [dev] on Workers AI</title><link>https://developers.cloudflare.com/changelog/post/2025-11-25-flux-2-dev-workers-ai/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-25-flux-2-dev-workers-ai/</guid><description>&lt;p&gt;We&apos;ve partnered with Black Forest Labs (BFL) to bring their latest FLUX.2 [dev] model to Workers AI! This model excels in generating high-fidelity images with physical world grounding, multi-language support, and digital asset creation. You can also create specific super images with granular controls like JSON prompting.&lt;/p&gt;
&lt;p&gt;Read the &lt;a href=&quot;https://bfl.ai/flux2&quot; target=&quot;_blank&quot;&gt;BFL blog&lt;/a&gt; to learn more about the model itself. Read our &lt;a href=&quot;https://blog.cloudflare.com/flux-2-workers-ai&quot; target=&quot;_blank&quot;&gt;Cloudflare blog&lt;/a&gt; to see the model in action, or try it out yourself on our &lt;a href=&quot;https://multi-modal.ai.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;multi modal playground&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pricing documentation is available on the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/flux-2-dev/&quot;&gt;model page&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/platform/pricing/&quot;&gt;pricing page&lt;/a&gt;. Note, we expect to drop pricing in the next few days after iterating on the model performance.&lt;/p&gt;
&lt;h4&gt;Workers AI Platform specifics&lt;/h4&gt;
&lt;p&gt;The model hosted on Workers AI is able to support up to 4 image inputs (512x512 per input image). Note, this image model is one of the most powerful in the catalog and is expected to be slower than the other image models we currently support. One catch to look out for is that this model takes multipart form data inputs, even if you just have a prompt.&lt;/p&gt;
&lt;p&gt;With the REST API, the multipart form data input looks like this:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--request&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&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;--url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/black-forest-labs/flux-2-dev&apos;&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Authorization: Bearer {TOKEN}&apos;&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Content-Type: multipart/form-data&apos;&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;--form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;prompt=a sunset at the alps&apos;&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;--form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;steps=&lt;/span&gt;&lt;span&gt;25&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;width=&lt;/span&gt;&lt;span&gt;1024&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;height=&lt;/span&gt;&lt;span&gt;1024&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;With the Workers AI binding, you can use it as such:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FormData&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;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;prompt&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;a sunset with a dog&apos;&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;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;width&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;1024&apos;&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;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;height&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;1024&apos;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;//this dummy request is temporary hack&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;//we&apos;re pushing a change to address this soon&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formRequest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;http://dummy&apos;&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;method&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;POST&apos;&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;body&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;form&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formStream&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formRequest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formContentType&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formRequest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;content-type&apos;&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;multipart/form-data&apos;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;@cf/black-forest-labs/flux-2-dev&quot;&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;multipart&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;body&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formStream&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;contentType&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formContentType&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;;&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;The parameters you can send to the model are detailed here:&lt;/p&gt;
&lt;details&gt;&lt;p&gt;&lt;/p&gt;&lt;summary&gt;JSON Schema for Model&lt;/summary&gt;
&lt;strong&gt;Required Parameters&lt;/strong&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;prompt&lt;/code&gt; (string) - Text description of the image to generate&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Optional Parameters&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;input_image_0&lt;/code&gt; (string) - Binary image&lt;/li&gt;
&lt;li&gt;&lt;code&gt;input_image_1&lt;/code&gt; (string) - Binary image&lt;/li&gt;
&lt;li&gt;&lt;code&gt;input_image_2&lt;/code&gt; (string) - Binary image&lt;/li&gt;
&lt;li&gt;&lt;code&gt;input_image_3&lt;/code&gt; (string) - Binary image&lt;/li&gt;
&lt;li&gt;&lt;code&gt;steps&lt;/code&gt; (integer) - Number of inference steps. Higher values may improve quality but increase generation time&lt;/li&gt;
&lt;li&gt;&lt;code&gt;guidance&lt;/code&gt; (float) - Guidance scale for generation. Higher values follow the prompt more closely&lt;/li&gt;
&lt;li&gt;&lt;code&gt;width&lt;/code&gt; (integer) - Width of the image, default &lt;code&gt;1024&lt;/code&gt; Range: 256-1920&lt;/li&gt;
&lt;li&gt;&lt;code&gt;height&lt;/code&gt; (integer) - Height of the image, default &lt;code&gt;768&lt;/code&gt; Range: 256-1920&lt;/li&gt;
&lt;li&gt;&lt;code&gt;seed&lt;/code&gt; (integer) - Seed for reproducibility&lt;/li&gt;
&lt;/ul&gt;&lt;/details&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;## Multi-Reference Images&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;The FLUX.2 model is great at generating images based on reference images. You can use this feature to apply the style of one image to another, add a new character to an image, or iterate on past generate images. You would use it with the same multipart form data structure, with the input images in binary.&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;For the prompt, you can reference the images based on the index, like `take the subject of image 1 and style it like image 0` or even use natural language like `place the dog beside the woman`.&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;Note: you have to name the input parameter as `input_image_0`, `input_image_1`, `input_image_2` for it to work correctly. All input images must be smaller than 512x512.&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;```bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl --request POST \&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;--url &apos;https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/black-forest-labs/flux-2-dev&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;&lt;/span&gt;&lt;span&gt;--header &apos;Authorization: Bearer {TOKEN}&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;&lt;/span&gt;&lt;span&gt;--header &apos;Content-Type: multipart/form-data&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;&lt;/span&gt;&lt;span&gt;--form &apos;prompt=take the subject of image 1 and style it like image 0&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;&lt;/span&gt;&lt;span&gt;--form input_image_0=@/Users/johndoe/Desktop/icedoutkeanu.png \&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;--form input_image_1=@/Users/johndoe/Desktop/me.png \&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;--form steps=25&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;--form width=1024&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;--form height=1024&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;Through Workers AI Binding:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;//helper function to convert ReadableStream to Blob&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamToBlob&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;ReadableStream&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;contentType&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;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Blob&lt;/span&gt;&lt;span&gt;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;reader&lt;/span&gt;&lt;span&gt; &lt;/span&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;getReader&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;chunks&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;true&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&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;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;reader&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;read&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;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;done&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;break&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;chunks&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&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;/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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Blob&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;chunks&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;contentType&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;/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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;http://image-url&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;http://image-url&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;FormData&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image_blob0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamToBlob&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;image0&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;image/png&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image_blob1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamToBlob&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;image1&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;image/png&quot;&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;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;input_image_0&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image_blob0&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;input_image_1&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;image_blob1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;form&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;prompt&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;take the subject of image 1and style it like image 0&apos;&lt;/span&gt;&lt;span&gt;)&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;//this dummy request is temporary hack&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;//we&apos;re pushing a change to address this soon&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formRequest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;http://dummy&apos;&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;method&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;POST&apos;&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;body&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;form&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formStream&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formRequest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formContentType&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formRequest&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;content-type&apos;&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;multipart/form-data&apos;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;@cf/black-forest-labs/flux-2-dev&quot;&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;multipart&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;body&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;form&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;contentType&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;multipart/form-data&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;/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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4&gt;JSON Prompting&lt;/h4&gt;
&lt;p&gt;The model supports prompting in JSON to get more granular control over images. You would pass the JSON as the value of the &apos;prompt&apos; field in the multipart form data. See the JSON schema below on the base parameters you can pass to the model.&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;JSON Prompting Schema&lt;/summary&gt;&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;object&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;scene&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Overall scene setting or location&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;subjects&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;array&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;object&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Type of subject (e.g., desert nomad, blacksmith, DJ, falcon)&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Physical attributes, clothing, accessories&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;pose&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Action or stance&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;position&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;enum&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;foreground&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;midground&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;background&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Depth placement in scene&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;/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;&quot;&lt;/span&gt;&lt;span&gt;required&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;type&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;description&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;pose&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;position&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;style&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Artistic rendering style (e.g., digital painting, photorealistic, pixel art, noir sci-fi, lifestyle photo, wabi-sabi photo)&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;color_palette&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;array&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;&quot;&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;span&gt;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;minItems&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&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;&quot;&lt;/span&gt;&lt;span&gt;maxItems&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;3&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Exactly 3 main colors for the scene (e.g., [&apos;navy&apos;, &apos;neon yellow&apos;, &apos;magenta&apos;])&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;lighting&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Lighting condition and direction (e.g., fog-filtered sun, moonlight with star glints, dappled sunlight)&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;mood&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Emotional atmosphere (e.g., harsh and determined, playful and modern, peaceful and dreamy)&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;background&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Background environment details&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;composition&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;enum&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;rule of thirds&quot;&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;&quot;circular arrangement&quot;&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;&quot;framed by foreground&quot;&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;&quot;minimalist negative space&quot;&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;&quot;S-curve&quot;&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;&quot;vanishing point center&quot;&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;&quot;dynamic off-center&quot;&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;&quot;leading leads&quot;&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;&quot;golden spiral&quot;&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;&quot;diagonal energy&quot;&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;&quot;strong verticals&quot;&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;&quot;triangular arrangement&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Compositional technique&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;camera&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;object&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;properties&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;angle&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;enum&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;eye level&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;low angle&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;slightly low&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;bird&apos;s-eye&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;worm&apos;s-eye&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;over-the-shoulder&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;isometric&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Camera perspective&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;distance&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;enum&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;close-up&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;medium close-up&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;medium shot&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;medium wide&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;wide shot&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;extreme wide&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Framing distance&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;focus&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;enum&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;deep focus&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;macro focus&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;selective focus&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;sharp on subject&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;soft background&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Focus type&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;lens&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;enum&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;14mm&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;24mm&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;35mm&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;50mm&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;70mm&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;85mm&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Focal length (wide to telephoto)&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;f-number&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Aperture (e.g., f/2.8, the smaller the number the more blurry the background)&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;ISO&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;number&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Light sensitivity value (comfortable range between 100 &amp;#x26; 6400, lower = less sensitivity)&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;/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;&quot;&lt;/span&gt;&lt;span&gt;effects&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;array&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;items&lt;/span&gt;&lt;span&gt;&quot;&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;span&gt;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Post-processing effects (e.g., &apos;lens flare small&apos;, &apos;subtle film grain&apos;, &apos;soft bloom&apos;, &apos;god rays&apos;, &apos;chromatic aberration mild&apos;)&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;/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;&quot;&lt;/span&gt;&lt;span&gt;required&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;scene&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;subjects&quot;&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;/details&gt;
&lt;h4&gt;Other features to try&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;The model also supports the most common latin and non-latin character languages&lt;/li&gt;
&lt;li&gt;You can prompt the model with specific hex codes like &lt;code&gt;#2ECC71&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Try creating digital assets like landing pages, comic strips, infographics too!&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 25 Nov 2025 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>Radar - Cloud Services Observability in Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2025-11-24-radar-cloud-observability/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-24-radar-cloud-observability/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; introduces HTTP Origins insights, providing visibility into the status of traffic between Cloudflare&apos;s global network and cloud-based origin infrastructure.&lt;/p&gt;
&lt;p&gt;The new &lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/origins/&quot;&gt;&lt;code&gt;Origins&lt;/code&gt;&lt;/a&gt; API provides provides the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/origins/methods/list/&quot;&gt;&lt;code&gt;/origins&lt;/code&gt;&lt;/a&gt; - Lists all origins (cloud providers and associated regions).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/origins/methods/get/&quot;&gt;&lt;code&gt;/origins/{origin}&lt;/code&gt;&lt;/a&gt; - Retrieves information about a specific origin (cloud provider).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/origins/methods/timeseries/&quot;&gt;&lt;code&gt;/origins/timeseries&lt;/code&gt;&lt;/a&gt; - Retrieves normalized time series data for a specific origin, including the following metrics:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;REQUESTS&lt;/code&gt;: Number of requests&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CONNECTION_FAILURES&lt;/code&gt;: Number of connection failures&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RESPONSE_HEADER_RECEIVE_DURATION&lt;/code&gt;: Duration of the response header receive&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TCP_HANDSHAKE_DURATION&lt;/code&gt;: Duration of the TCP handshake&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TCP_RTT&lt;/code&gt;: TCP round trip time&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TLS_HANDSHAKE_DURATION&lt;/code&gt;: Duration of the TLS handshake&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/origins/methods/summary/&quot;&gt;&lt;code&gt;/origins/summary&lt;/code&gt;&lt;/a&gt; - Retrieves HTTP requests to origins summarized by a dimension.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/origins/methods/timeseries_groups/&quot;&gt;&lt;code&gt;/origins/timeseries_groups&lt;/code&gt;&lt;/a&gt; - Retrieves timeseries data for HTTP requests to origins grouped by a dimension.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following dimensions are available for the &lt;code&gt;summary&lt;/code&gt; and &lt;code&gt;timeseries_groups&lt;/code&gt; endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;region&lt;/code&gt;: Origin region&lt;/li&gt;
&lt;li&gt;&lt;code&gt;success_rate&lt;/code&gt;: Success rate of requests (2XX versus 5XX response codes)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;percentile&lt;/code&gt;: Percentiles of metrics listed above&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additionally, the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/annotations/&quot;&gt;&lt;code&gt;Annotations&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/traffic_anomalies/&quot;&gt;&lt;code&gt;Traffic Anomalies&lt;/code&gt;&lt;/a&gt; APIs have been extended to support origin outages and anomalies, enabling automated detection and alerting for origin infrastructure issues.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/cloud-service-status.DoGHSNmz_Z13ev1d.webp&quot; alt=&quot;Screenshot of the cloud service status heatmap&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://radar.cloudflare.com/cloud-observatory&quot; target=&quot;_blank&quot;&gt;new Radar page&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 24 Nov 2025 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>WAF - WAF Release - 2025-11-24</title><link>https://developers.cloudflare.com/changelog/post/2025-11-24-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-24-waf-release/</guid><description>&lt;p&gt;This week highlights enhancements to detection signatures improving coverage for vulnerabilities in FortiWeb, linked to CVE-2025-64446, alongside new detection logic expanding protection against PHP Wrapper Injection techniques.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This vulnerability enables an unauthenticated attacker to bypass access controls by abusing the &lt;code&gt;CGIINFO&lt;/code&gt; header. The latest update strengthens detection logic to ensure a reliable identification of crafted requests attempting to exploit this flaw.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;FortiWeb (CVE-2025-64446): Exploitation allows a remote unauthenticated adversary to circumvent authentication mechanisms by sending a manipulated &lt;code&gt;CGIINFO&lt;/code&gt; header to FortiWeb’s backend CGI handler. Successful exploitation grants unintended access to restricted administrative functionality, potentially enabling configuration tampering or system-level actions.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;b957ace6e9844bf29244401c4e2e1a2e &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;FortiWeb - Authentication Bypass via CGIINFO Header - CVE:CVE-2025-64446&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;e3871391a93248fa98a78e03b6c44ed5 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;PHP Wrapper Injection - Body - Beta&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This rule has been merged into the original rule &quot;PHP Wrapper Injection - Body&quot; (ID:fae6fa37ae9249d58628e54b1a3e521e )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;e6b1b66e0e3b46969102baed900f4015 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;PHP Wrapper Injection - URI - Beta&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This rule has been merged into the original rule &quot;PHP Wrapper Injection - URI&quot; (ID:9c02e585db34440da620eb668f76bd74 )&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 24 Nov 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Containers, R2 - Mount R2 buckets in Containers</title><link>https://developers.cloudflare.com/changelog/post/2025-11-21-fuse-support-in-containers/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-21-fuse-support-in-containers/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/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.cloudflare.com/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.cloudflare.com/sandbox/&quot;&gt;sandboxes&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/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;&gt;tigrisfs&lt;/a&gt;, &lt;a href=&quot;https://github.com/s3fs-fuse/s3fs-fuse&quot; target=&quot;_blank&quot;&gt;s3fs&lt;/a&gt;, and &lt;a href=&quot;https://github.com/GoogleCloudPlatform/gcsfuse&quot; target=&quot;_blank&quot;&gt;gcsfuse&lt;/a&gt; can be installed in your container image and configured to mount buckets at startup.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;dockerfile&quot;&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;FROM&lt;/span&gt;&lt;span&gt; alpine:3.20&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;# Install FUSE and dependencies&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; apk update &amp;#x26;&amp;#x26; \&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;apk add --no-cache ca-certificates fuse curl bash&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;# Install tigrisfs&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; ARCH=$(uname -m) &amp;#x26;&amp;#x26; \&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;if [ &lt;/span&gt;&lt;span&gt;&quot;$ARCH&quot;&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;&quot;x86_64&quot;&lt;/span&gt;&lt;span&gt; ]; then ARCH=&lt;/span&gt;&lt;span&gt;&quot;amd64&quot;&lt;/span&gt;&lt;span&gt;; fi &amp;#x26;&amp;#x26; \&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;if [ &lt;/span&gt;&lt;span&gt;&quot;$ARCH&quot;&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;&quot;aarch64&quot;&lt;/span&gt;&lt;span&gt; ]; then ARCH=&lt;/span&gt;&lt;span&gt;&quot;arm64&quot;&lt;/span&gt;&lt;span&gt;; fi &amp;#x26;&amp;#x26; \&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;VERSION=$(curl -s https://api.github.com/repos/tigrisdata/tigrisfs/releases/latest | grep -o &lt;/span&gt;&lt;span&gt;&apos;&quot;tag_name&quot;: &quot;[^&quot;]*&apos;&lt;/span&gt;&lt;span&gt; | cut -d&lt;/span&gt;&lt;span&gt;&apos;&quot;&apos;&lt;/span&gt;&lt;span&gt; -f4) &amp;#x26;&amp;#x26; \&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;curl -L &lt;/span&gt;&lt;span&gt;&quot;https://github.com/tigrisdata/tigrisfs/releases/download/${VERSION}/tigrisfs_${VERSION#v}_linux_${ARCH}.tar.gz&quot;&lt;/span&gt;&lt;span&gt; -o /tmp/tigrisfs.tar.gz &amp;#x26;&amp;#x26; \&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;tar -xzf /tmp/tigrisfs.tar.gz -C /usr/local/bin/ &amp;#x26;&amp;#x26; \&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;rm /tmp/tigrisfs.tar.gz &amp;#x26;&amp;#x26; \&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;chmod +x /usr/local/bin/tigrisfs&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;# Create startup script that mounts bucket&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;RUN&lt;/span&gt;&lt;span&gt; printf &lt;/span&gt;&lt;span&gt;&apos;#!/bin/sh&lt;/span&gt;&lt;span&gt;\n&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;set -e&lt;/span&gt;&lt;span&gt;\n&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;mkdir -p /mnt/r2&lt;/span&gt;&lt;span&gt;\n&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;R2_ENDPOINT=&quot;https://${R2_ACCOUNT_ID}.r2.cloudflarestorage.com&quot;&lt;/span&gt;&lt;span&gt;\n&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;/usr/local/bin/tigrisfs --endpoint &quot;${R2_ENDPOINT}&quot; -f &quot;${BUCKET_NAME}&quot; /mnt/r2 &amp;#x26;&lt;/span&gt;&lt;span&gt;\n&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;sleep 3&lt;/span&gt;&lt;span&gt;\n&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;ls -lah /mnt/r2&lt;/span&gt;&lt;span&gt;\n&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;&apos;&lt;/span&gt;&lt;span&gt; &gt; /startup.sh &amp;#x26;&amp;#x26; chmod +x /startup.sh&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;CMD&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;/startup.sh&quot;&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;See the &lt;a href=&quot;https://developers.cloudflare.com/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>Containers - New CPU Pricing for Containers and Sandboxes</title><link>https://developers.cloudflare.com/changelog/post/2025-11-21-new-cpu-pricing/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-21-new-cpu-pricing/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/containers/&quot;&gt;Containers&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/sandbox/&quot;&gt;Sandboxes&lt;/a&gt; pricing for CPU time is now based on active usage only, instead of provisioned resources.&lt;/p&gt;
&lt;p&gt;This means that you now pay less for Containers and Sandboxes.&lt;/p&gt;
&lt;h4&gt;An Example Before and After&lt;/h4&gt;
&lt;p&gt;Imagine running the &lt;code&gt;standard-2&lt;/code&gt; instance type for one hour, which can use up to 1 vCPU,
but on average you use only 20% of your CPU capacity.&lt;/p&gt;
&lt;p&gt;CPU-time is priced at &lt;em&gt;$0.00002 per vCPU-second&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Previously, you would be charged for the CPU allocated to the instance multiplied by the time it was active, in this case 1 hour.&lt;/p&gt;
&lt;p&gt;CPU cost would have been: &lt;strong&gt;$0.072&lt;/strong&gt; — 1 vCPU * 3600 seconds * $0.00002&lt;/p&gt;
&lt;p&gt;Now, since you are only using 20% of your CPU capacity, your CPU cost is cut to 20% of the previous amount.&lt;/p&gt;
&lt;p&gt;CPU cost is now: &lt;strong&gt;$0.0144&lt;/strong&gt; — 1 vCPU * 3600 seconds * $0.00002 * 20% utilization&lt;/p&gt;
&lt;p&gt;This can significantly reduce costs for Containers and Sandboxes.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;Memory cost and disk pricing remain unchanged, and is still calculated based on &lt;em&gt;provisioned&lt;/em&gt; resources.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;See the documentation to learn more about &lt;a href=&quot;https://developers.cloudflare.com/containers/get-started/&quot;&gt;Containers&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/sandbox/&quot;&gt;Sandboxes&lt;/a&gt;,
and &lt;a href=&quot;https://developers.cloudflare.com/containers/pricing&quot;&gt;associated pricing&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 21 Nov 2025 00:00:00 GMT</pubDate><product>Containers</product><category>Containers</category></item><item><title>Security Center - Threat insights are now available in the Threat Events platform</title><link>https://developers.cloudflare.com/changelog/post/2025-11-21-threat-events-now-show-events-insights/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-21-threat-events-now-show-events-insights/</guid><description>&lt;p&gt;The threat events platform now has threat insights available for some relevant parent events. Threat intelligence analyst users can access these insights for their threat hunting activity.
Insights are also highlighted in the Cloudflare dashboard by a small &lt;code&gt;lightning icon&lt;/code&gt; and the insights can refer to multiple, connected events, potentially part of the same attack or campaign and associated with the same threat actor.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/security-center/cloudforce-one/#analyze-threat-events&quot;&gt;Analyze threat events&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 21 Nov 2025 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>WAF - WAF Release - 2025-11-21</title><link>https://developers.cloudflare.com/changelog/post/2025-11-21-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-21-emergency-waf-release/</guid><description>&lt;p&gt;This week’s release introduces a critical detection for CVE-2025-61757, a vulnerability in the Oracle Identity Manager REST WebServices component.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This flaw allows unauthenticated attackers with network access over HTTP to fully compromise the Identity Manager, potentially leading to a complete takeover.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Oracle Identity Manager (CVE-2025-61757): Exploitation could allow an unauthenticated remote attacker to bypass security checks by sending specially crafted requests to the application&apos;s message processor. This enables the creation of arbitrary employee accounts, which can be leveraged to modify system configurations and achieve full system compromise.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;fa584616fe2241608cb8bd1339fdbe7e &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Oracle Identity Manager - Pre-Auth RCE - CVE:CVE-2025-61757&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Fri, 21 Nov 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Environment variable limits increase for Workers Builds</title><link>https://developers.cloudflare.com/changelog/post/2025-11-21-builds-env-var-increase/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-21-builds-env-var-increase/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/&quot;&gt;Workers Builds&lt;/a&gt; now supports up to 64 environment variables, and each environment variable can be up to 5 KB in size. The previous limit was 5 KB total across all environment variables.&lt;/p&gt;
&lt;p&gt;This change enables better support for complex build configurations, larger application settings, and more flexible CI/CD workflows.&lt;/p&gt;
&lt;p&gt;For more details, refer to the &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/limits-and-pricing/#definitions&quot;&gt;build limits documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 21 Nov 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Better local deployment flow for Cloudflare Workers</title><link>https://developers.cloudflare.com/changelog/post/2025-11-21-wrangler-deploy-remote-config-management/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-21-wrangler-deploy-remote-config-management/</guid><description>&lt;p&gt;Until now, if a Worker had been previously deployed via the &lt;a href=&quot;https://dash.cloudflare.com&quot; target=&quot;_blank&quot;&gt;Cloudflare Dashboard&lt;/a&gt;, a subsequent deployment done via the Cloudflare Workers CLI, &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/&quot;&gt;&lt;strong&gt;Wrangler&lt;/strong&gt;&lt;/a&gt;
(through the &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/general/#deploy&quot;&gt;&lt;code&gt;deploy&lt;/code&gt; command&lt;/a&gt;), would allow the user to override the Worker&apos;s dashboard settings without providing details on
what dashboard settings would be lost.&lt;/p&gt;
&lt;p&gt;Now instead, &lt;code&gt;wrangler deploy&lt;/code&gt; presents a helpful representation of the differences between the &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/configuration/&quot;&gt;local configuration&lt;/a&gt;
and the remote dashboard settings, and offers to update your local configuration file for you.&lt;/p&gt;
&lt;p&gt;See example below showing a before and after for &lt;code&gt;wrangler deploy&lt;/code&gt; when a local configuration is expected to override a Worker&apos;s dashboard settings:&lt;/p&gt;
&lt;article&gt; &lt;p&gt;  &lt;span&gt;Before&lt;/span&gt; &lt;/p&gt; &lt;div&gt; &lt;p&gt;&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/before.Bz-MOePT_1kuOLk.webp&quot; alt=&quot;wrangler deploy run before the improved workflow&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;&lt;/p&gt; &lt;/div&gt; &lt;/article&gt; 
&lt;article&gt; &lt;p&gt;  &lt;span&gt;After&lt;/span&gt; &lt;/p&gt; &lt;div&gt; &lt;p&gt;&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/after.BrkkBaRL_1Mg50Q.webp&quot; alt=&quot;wrangler deploy run after the improved workflow&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;&lt;/p&gt; &lt;/div&gt; &lt;/article&gt; 
&lt;p&gt;Also, if instead Wrangler detects that a deployment would override remote dashboard settings but in an additive way, without modifying or removing any of them, it will simply proceed with the deployment without requesting any user interaction.&lt;/p&gt;
&lt;p&gt;Update to &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt; v4.50.0 or greater to take advantage of this improved deploy flow.&lt;/p&gt;</description><pubDate>Fri, 21 Nov 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare Fundamentals, Terraform - Terraform v5.13.0 now available</title><link>https://developers.cloudflare.com/changelog/post/2025-11-20-terraform-v5130-provider/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-20-terraform-v5130-provider/</guid><description>&lt;p&gt;Earlier this year, we announced the launch of the new Terraform v5 Provider. We are aware of the high number of issues reported by the Cloudflare community related to the v5 release. We have committed to releasing improvements on a &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5774&quot; target=&quot;_blank&quot;&gt;2-3 week cadence&lt;/a&gt; to ensure its stability and reliability, including the v5.13 release. We have also pivoted from an &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6237&quot; target=&quot;_blank&quot;&gt;issue-to-issue approach to a resource-per-resource approach&lt;/a&gt; - we will be focusing on specific resources to not only stabilize the resource but also ensure it is migration-friendly for those migrating from v4 to v5.&lt;/p&gt;
&lt;p&gt;Thank you for continuing to raise issues. They make our provider stronger and help us build products that reflect your needs.&lt;/p&gt;
&lt;p&gt;This release includes new features, new resources and data sources, bug fixes, updates to our Developer Documentation, and more.&lt;/p&gt;
&lt;h4&gt;Breaking Change&lt;/h4&gt;
&lt;p&gt;Please be aware that there are breaking changes for the &lt;code&gt;cloudflare_api_token&lt;/code&gt; and &lt;code&gt;cloudflare_account_token&lt;/code&gt; resources. These changes eliminate configuration drift caused by policy ordering differences in the Cloudflare API.&lt;/p&gt;
&lt;p&gt;For more specific information about the changes or the actions required, please see the &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/releases/tag/v5.13.0&quot; target=&quot;_blank&quot;&gt;detailed Repository changelog&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Features&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;New resources and data sources added&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;cloudflare_connectivity_directory&lt;/li&gt;
&lt;li&gt;cloudflare_sso_connector&lt;/li&gt;
&lt;li&gt;cloudflare_universal_ssl_setting&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;api_token+account_tokens:&lt;/strong&gt; state upgrader and schema bump (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6472&quot; target=&quot;_blank&quot;&gt;#6472&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;docs:&lt;/strong&gt; make docs explicit when a resource does not have import support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;magic_transit_connector:&lt;/strong&gt; support self-serve license key (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6398&quot; target=&quot;_blank&quot;&gt;#6398&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;worker_version:&lt;/strong&gt; add content_base64 support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;worker_version:&lt;/strong&gt; boolean support for run_worker_first (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6407&quot; target=&quot;_blank&quot;&gt;#6407&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_script_subdomains:&lt;/strong&gt; add import support  (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6375&quot; target=&quot;_blank&quot;&gt;#6375&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_access_application:&lt;/strong&gt; add proxy_endpoint for ZT Access Application (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6453&quot; target=&quot;_blank&quot;&gt;#6453&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_dlp_predefined_profile:&lt;/strong&gt; Switch DLP Predefined Profile endpoints, introduce enabled_entries attribut&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Bug Fixes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;account_token:&lt;/strong&gt; token policy order and nested resources (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6440&quot; target=&quot;_blank&quot;&gt;#6440&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;allow r2_bucket_event_notification to be applied twice without failing (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6419&quot; target=&quot;_blank&quot;&gt;#6419&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cloudflare_worker+cloudflare_worker_version:&lt;/strong&gt; import for the resources (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6357&quot; target=&quot;_blank&quot;&gt;#6357&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dns_record:&lt;/strong&gt; inconsistent apply error (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6452&quot; target=&quot;_blank&quot;&gt;#6452&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pages_domain:&lt;/strong&gt; resource tests (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6338&quot; target=&quot;_blank&quot;&gt;#6338&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pages_project:&lt;/strong&gt; unintended resource state drift (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6377&quot; target=&quot;_blank&quot;&gt;#6377&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;queue_consumer:&lt;/strong&gt; id population (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6181&quot; target=&quot;_blank&quot;&gt;#6181&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_kv:&lt;/strong&gt; multipart request  (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6367&quot; target=&quot;_blank&quot;&gt;#6367&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_kv:&lt;/strong&gt; updating workers metadata attribute to be read from endpoint (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6386&quot; target=&quot;_blank&quot;&gt;#6386&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_script_subdomain:&lt;/strong&gt; add note to cloudflare_workers_script_subdomain about redundancy with cloudflare_worker (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6383&quot; target=&quot;_blank&quot;&gt;#6383&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;workers_script:&lt;/strong&gt; allow config.run_worker_first to accept list input&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_device_custom_profile_local_domain_fallback:&lt;/strong&gt; drift issues (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6365&quot; target=&quot;_blank&quot;&gt;#6365&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_device_custom_profile:&lt;/strong&gt; resolve drift issues (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6364&quot; target=&quot;_blank&quot;&gt;#6364&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_dex_test:&lt;/strong&gt; correct configurability for &apos;targeted&apos; attribute to fix drift&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;zero_trust_tunnel_cloudflared_config:&lt;/strong&gt; remove warp_routing from cloudflared_config (&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/6471&quot; target=&quot;_blank&quot;&gt;#6471&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Upgrading&lt;/h4&gt;
&lt;p&gt;We suggest holding off on migration to v5 while we work on stabilization. This help will you avoid any blocking issues while the Terraform resources are actively being stabilized. We will be releasing a new migration tool in March 2026 to help support v4 to v5 transitions for our most popular resources.&lt;/p&gt;
&lt;h4&gt;For more info&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;Terraform Provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/terraform/&quot; target=&quot;_blank&quot;&gt;Documentation on using Terraform with Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 20 Nov 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Terraform</category></item><item><title>AI Search - AI Search support for crawling login protected website content</title><link>https://developers.cloudflare.com/changelog/post/2025-11-19-add-extra-headers-for-website-crawling/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-19-add-extra-headers-for-website-crawling/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-search/&quot;&gt;AI Search&lt;/a&gt; now supports &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/data-source/website/#extra-headers-for-access-protected-content&quot;&gt;custom HTTP headers&lt;/a&gt; for website crawling, solving a common problem where valuable content behind authentication or access controls could not be indexed.&lt;/p&gt;
&lt;p&gt;Previously, AI Search could only crawl publicly accessible pages, leaving knowledge bases, documentation, and other protected content out of your search results. With custom headers support, you can now include authentication credentials that allow the crawler to access this protected content.&lt;/p&gt;
&lt;p&gt;This is particularly useful for indexing content like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Internal documentation&lt;/strong&gt; behind corporate login systems&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Premium content&lt;/strong&gt; that requires users to provide access to unlock&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sites protected by Cloudflare Access&lt;/strong&gt; using service tokens&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To add custom headers when creating an AI Search instance, select &lt;strong&gt;Parse options&lt;/strong&gt;. In the &lt;strong&gt;Extra headers&lt;/strong&gt; section, you can add up to five custom headers per Website data source.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ai-search-extra-headers.B7A2spby_lEmuv.webp&quot; alt=&quot;Custom headers configuration in AI Search&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;For example, to crawl a site protected by &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/&quot;&gt;Cloudflare Access&lt;/a&gt;, you can add service token credentials as custom headers:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;CF-Access-Client-Id: your-token-id.access&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;CF-Access-Client-Secret: your-token-secret&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;The crawler will automatically include these headers in all requests, allowing it to access protected pages that would otherwise be blocked.&lt;/p&gt;
&lt;p&gt;Learn more about &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/data-source/website/#extra-headers-for-access-protected-content&quot;&gt;configuring custom headers for website crawling&lt;/a&gt; in AI Search.&lt;/p&gt;</description><pubDate>Wed, 19 Nov 2025 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>Email security - Adjustment to Final Disposition Column</title><link>https://developers.cloudflare.com/changelog/post/2025-11-18-temporary-adjustment-to-final-disposition-column/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-18-temporary-adjustment-to-final-disposition-column/</guid><description>&lt;h4&gt;Adjustment to Final Disposition column&lt;/h4&gt;
&lt;h4&gt;The &lt;strong&gt;Final Disposition&lt;/strong&gt; column in &lt;strong&gt;Submissions&lt;/strong&gt; &gt; &lt;strong&gt;Team Submissions&lt;/strong&gt; tab is changing for non-Phishguard customers.&lt;/h4&gt;
&lt;h4&gt;What&apos;s Changing&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Column will be called &lt;strong&gt;Status&lt;/strong&gt; instead of &lt;strong&gt;Final Disposition&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Column status values will now be: &lt;strong&gt;Submitted&lt;/strong&gt;, &lt;strong&gt;Accepted&lt;/strong&gt; or &lt;strong&gt;Rejected&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Next Steps&lt;/h4&gt;
&lt;p&gt;We will listen carefully to your feedback and continue to find comprehensive ways to communicate updates on your submissions. Your submissions will continue to be addressed at an even greater rate than before, fuelling faster and more accurate email security improvement.&lt;/p&gt;</description><pubDate>Tue, 18 Nov 2025 00:00:00 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>Cloudflare One - New Cloudflare One Navigation and Product Experience</title><link>https://developers.cloudflare.com/changelog/post/new-cloudflare-one-navigation-and-product-experience/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/new-cloudflare-one-navigation-and-product-experience/</guid><description>&lt;p&gt;The Zero Trust dashboard and navigation is receiving significant and exciting updates. The dashboard is being restructured to better support common tasks and workflows, and various pages have been moved and consolidated.&lt;/p&gt;
&lt;p&gt;There is a new guided experience on login detailing the changes, and you can use the Zero Trust dashboard search to find product pages by both their new and old names, as well as your created resources. To replay the guided experience, you can find it in Overview &gt; Get Started.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/cf1-dash-changes.Uk_Y-2V-_ZUKoJR.webp&quot; alt=&quot;Cloudflare One Dash Changes&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Notable changes&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Product names have been removed from many top-level navigation items to help bring clarity to what they help you accomplish. For example, you can find Gateway policies under ‘Traffic policies&apos; and CASB findings under ‘Cloud &amp;#x26; SaaS findings.&apos;&lt;/li&gt;
&lt;li&gt;You can view all analytics, logs, and real-time monitoring tools from ‘Insights.&apos;&lt;/li&gt;
&lt;li&gt;‘Networks&apos; better maps the ways that your corporate network interacts with Cloudflare. Some pages like Tunnels, are now a tab rather than a full page as part of these changes. You can find them at Networks &gt; Connectors.&lt;/li&gt;
&lt;li&gt;Settings are now located closer to the tools and resources they impact. For example, this means you&apos;ll find your WARP configurations at Team &amp;#x26; Resources &gt; Devices.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/new-cf1-navigation.B7-E-9CV_18BSsx.webp&quot; alt=&quot;New Cloudflare One Navigation&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;No changes to our API endpoint structure or to any backend services have been made as part of this effort.&lt;/p&gt;</description><pubDate>Mon, 17 Nov 2025 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category></item><item><title>WAF - WAF Release - 2025-11-17</title><link>https://developers.cloudflare.com/changelog/post/2025-11-17-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-17-waf-release/</guid><description>&lt;p&gt;This week highlights enhancements to detection signatures improving coverage for vulnerabilities in DELMIA Apriso, linked to CVE-2025-6205.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This vulnerability allows unauthenticated attackers to gain privileged access to the application. The latest update provides enhanced detection logic for resilient protection against exploitation attempts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DELMIA Apriso (CVE-2025-6205): Exploitation could allow an unauthenticated remote attacker to bypass security checks by sending specially crafted requests to the application&apos;s message processor. This enables the creation of arbitrary employee accounts, which can be leveraged to modify system configurations and achieve full system compromise.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ec1e2aa190e64e7cb468e16dd256f4bc &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;DELMIA Apriso - Auth Bypass - CVE:CVE-2025-6205&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;fae6fa37ae9249d58628e54b1a3e521e &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;PHP Wrapper Injection - Body&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;Rule metadata description refined. Detection unchanged.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;9c02e585db34440da620eb668f76bd74 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;PHP Wrapper Injection - URI&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;Rule metadata description refined. Detection unchanged.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 17 Nov 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Access - Generate Cloudflare Access SSH certificate authority (CA) directly from the Cloudflare dashboard</title><link>https://developers.cloudflare.com/changelog/post/2025-11-14-ssh-ca-enhancements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-14-ssh-ca-enhancements/</guid><description>&lt;p&gt;SSH with &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/ssh/ssh-infrastructure-access/&quot;&gt;Cloudflare Access for Infrastructure&lt;/a&gt; allows you to use short-lived SSH certificates to eliminate SSH key management and reduce security risks associated with lost or stolen keys.&lt;/p&gt;
&lt;p&gt;Previously, users had to generate this certificate by using the &lt;a href=&quot;https://developers.cloudflare.com/api/&quot; target=&quot;_blank&quot;&gt;Cloudflare API&lt;/a&gt; directly. With this update, you can now create and manage this certificate in the &lt;a href=&quot;https://one.dash.cloudflare.com&quot; target=&quot;_blank&quot;&gt;Cloudflare One dashboard&lt;/a&gt; from the &lt;strong&gt;Access controls&lt;/strong&gt; &gt; &lt;strong&gt;Service credentials&lt;/strong&gt; page.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/SSH-CA-generation.DYa9RnX1_ZKuDAo.webp&quot; alt=&quot;Navigate to Access controls and then Service credentials to see where you can generate an SSH CA&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;For more details, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/ssh/ssh-infrastructure-access/#generate-a-cloudflare-ssh-ca&quot;&gt;Generate a Cloudflare SSH CA&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 14 Nov 2025 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>CASB - New SaaS Security weekly digests with API CASB</title><link>https://developers.cloudflare.com/changelog/post/2025-11-14-casb-digest/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-14-casb-digest/</guid><description>&lt;p&gt;You can now stay on top of your SaaS security posture with the new &lt;strong&gt;CASB Weekly Digest&lt;/strong&gt; notification. This opt-in email digest is delivered to your inbox every Monday morning and provides a high-level summary of your organization&apos;s Cloudflare API CASB findings from the previous week.&lt;/p&gt;
&lt;p&gt;This allows security teams and IT administrators to get proactive, at-a-glance visibility into new risks and integration health without having to log in to the dashboard.&lt;/p&gt;
&lt;p&gt;To opt in, navigate to &lt;strong&gt;Manage Account&lt;/strong&gt; &gt; &lt;strong&gt;Notifications&lt;/strong&gt; in the Cloudflare dashboard to configure the &lt;strong&gt;CASB Weekly Digest&lt;/strong&gt; alert type.&lt;/p&gt;
&lt;h4&gt;Key capabilities&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;At-a-glance summary&lt;/strong&gt; — Review new high/critical findings, most frequent finding types, and new content exposures from the past 7 days.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integration health&lt;/strong&gt; — Instantly see the status of all your connected SaaS integrations (Healthy, Unhealthy, or Paused) to spot API connection issues.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proactive alerting&lt;/strong&gt; — The digest is sent automatically to all subscribed users every Monday morning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Easy to configure&lt;/strong&gt; — Users can opt in by enabling the notification in the Cloudflare dashboard under &lt;strong&gt;Manage Account&lt;/strong&gt; &gt; &lt;strong&gt;Notifications&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Learn more&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Configure &lt;a href=&quot;https://developers.cloudflare.com/notifications/&quot;&gt;notification preferences&lt;/a&gt; in Cloudflare.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The CASB Weekly Digest notification is available to all Cloudflare users today.&lt;/p&gt;</description><pubDate>Fri, 14 Nov 2025 00:00:00 GMT</pubDate><product>CASB</product><category>CASB</category></item><item><title>Log Explorer - Fixed custom SQL date picker inconsistencies</title><link>https://developers.cloudflare.com/changelog/post/2025-11-13-fixed-custom-date/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-13-fixed-custom-date/</guid><description>&lt;p&gt;We&apos;ve resolved a bug in Log Explorer that caused inconsistencies between the custom SQL date field filters and the date picker dropdown. Previously, users attempting to filter logs based on a custom date field via a SQL query sometimes encountered unexpected results or mismatching dates when using the interactive date picker.&lt;/p&gt;
&lt;p&gt;This fix ensures that the custom SQL date field filters now align correctly with the selection made in the date picker dropdown, providing a reliable and predictable filtering experience for your log data. This is particularly important for users creating custom log views based on time-sensitive fields.&lt;/p&gt;</description><pubDate>Thu, 13 Nov 2025 00:00:00 GMT</pubDate><product>Log Explorer</product><category>Log Explorer</category></item><item><title>Log Explorer - Log Explorer adds 14 new datasets</title><link>https://developers.cloudflare.com/changelog/post/2025-11-13-new-datasets/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-13-new-datasets/</guid><description>&lt;p&gt;We&apos;ve significantly enhanced Log Explorer by adding support for 14 additional Cloudflare product datasets.&lt;/p&gt;
&lt;p&gt;This expansion enables Operations and Security Engineers to gain deeper visibility and telemetry across a wider range of Cloudflare services. By integrating these new datasets, users can now access full context to efficiently investigate security incidents, troubleshoot application performance issues, and correlate logged events across different layers (like application and network) within a single interface. This capability is crucial for a complete and cohesive understanding of event flows across your Cloudflare environment.&lt;/p&gt;
&lt;p&gt;The newly supported datasets include:&lt;/p&gt;
&lt;h4&gt;Zone Level&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Dns_logs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Nel_reports&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Page_shield_events&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Spectrum_events&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Zaraz_events&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Account Level&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Audit Logs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Audit_logs_v2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Biso_user_actions&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DNS firewall logs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Email_security_alerts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Magic Firewall IDS&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Network Analytics&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Sinkhole HTTP&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ipsec_logs&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;code&gt;Auditlog&lt;/code&gt; and &lt;code&gt;Auditlog_v2&lt;/code&gt; datasets require &lt;code&gt;audit-log.read&lt;/code&gt; permission for querying.&lt;/p&gt;&lt;p&gt;The &lt;code&gt;biso_user_actions&lt;/code&gt; dataset requires either the &lt;code&gt;Super Admin&lt;/code&gt; or &lt;code&gt;ZT PII&lt;/code&gt; role for querying.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;h4&gt;Example: Correlating logs&lt;/h4&gt;
&lt;p&gt;You can now use Log Explorer to query and filter with each of these datasets. For example, you can identify an IP address exhibiting suspicious behavior in the &lt;code&gt;FW_event&lt;/code&gt; logs, and then instantly pivot to the &lt;code&gt;Network Analytics&lt;/code&gt; logs or &lt;code&gt;Access&lt;/code&gt; logs to see its network-level traffic profile or if it bypassed a corporate policy.&lt;/p&gt;
&lt;p&gt;To learn more and get started, refer to the &lt;a href=&quot;https://developers.cloudflare.com/log-explorer/&quot;&gt;Log Explorer documentation&lt;/a&gt; and the &lt;a href=&quot;https://developers.cloudflare.com/logs/&quot;&gt;Cloudflare Logs documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 13 Nov 2025 00:00:00 GMT</pubDate><product>Log Explorer</product><category>Log Explorer</category></item><item><title>API Shield - New BOLA Vulnerability Detection for API Shield</title><link>https://developers.cloudflare.com/changelog/post/2025-11-12-bola-attack-detection/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-12-bola-attack-detection/</guid><description>&lt;p&gt;Now, API Shield automatically searches for and highlights &lt;strong&gt;Broken Object Level Authorization (BOLA) attacks&lt;/strong&gt; on managed API endpoints. API Shield will highlight both BOLA enumeration attacks and BOLA pollution attacks, telling you what was attacked, by who, and for how long.&lt;/p&gt;
&lt;p&gt;You can find these attacks three different ways: Security Overview, Endpoint details, or Security Analytics. If these attacks are not found on your managed API endpoints, there will not be an overview card or security analytics suspicious activity card.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/bola-overview-card.hwcSeAkb_1MwSDq.webp&quot; alt=&quot;BOLA attack Overview card&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/bola-overview-drawer.DD2c0bxS_zw6Ec.webp&quot; alt=&quot;BOLA attack Overview drawer&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;From the endpoint details, you can select &lt;strong&gt;View attack&lt;/strong&gt; to find details about the BOLA attacker’s sessions.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/bola-endpoint-attack.UQP3MDkp_1Yhqqd.webp&quot; alt=&quot;BOLA attack endpoint details&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;From here, select &lt;strong&gt;View in Analytics&lt;/strong&gt; to observe attacker traffic over time for the last seven days.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/bola-analytics-drawer.DXzC6EJU_iXjmr.webp&quot; alt=&quot;BOLA attack analytics drawer&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Your search will filter to traffic on that endpoint in the last seven days, along with the malicious session IDs found in the attack. Session IDs are hashed for privacy and will not be found in your origin logs. Refer to IP and JA4 fingerprint to cross-reference behavior at the origin.&lt;/p&gt;
&lt;p&gt;At any time, you can also start your investigation into attack traffic from Security Analytics by selecting the suspicious activity card.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/bola-suspicious-card._B3GB3s4_STW1N.webp&quot; alt=&quot;Suspicious Activity card&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;We urge you to take all of this client information to your developer team to research the attacker behavior and ensure any broken authorization policies in your API are fixed at the source in your application, preventing further abuse.&lt;/p&gt;
&lt;p&gt;In addition, this release marks the end of the beta period for these scans. All Enterprise customers with API Shield subscriptions will see these new attacks if found on their zone.&lt;/p&gt;</description><pubDate>Wed, 12 Nov 2025 00:00:00 GMT</pubDate><product>API Shield</product><category>API Shield</category></item><item><title>Digital Experience Monitoring - DEX Logpush jobs</title><link>https://developers.cloudflare.com/changelog/post/2025-11-12-dex-logpush-jobsmdx/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-12-dex-logpush-jobsmdx/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/dex/&quot;&gt;Digital Experience Monitoring (DEX)&lt;/a&gt; provides visibility into WARP device metrics, connectivity, and network performance across your Cloudflare SASE deployment.&lt;/p&gt;
&lt;p&gt;We&apos;ve released four new WARP and DEX device data sets that can be exported via &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/logs/logpush/&quot;&gt;Cloudflare Logpush&lt;/a&gt;. These Logpush data sets can be exported to R2, a cloud bucket, or a SIEM to build a customized logging and analytics experience.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/datasets/account/dex_application_tests/&quot;&gt;DEX Application Tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/datasets/account/dex_device_state_events/&quot;&gt;DEX Device State Events&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/datasets/account/warp_config_changes/&quot;&gt;WARP Config Changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/datasets/account/warp_toggle_changes/&quot;&gt;WARP Toggle Changes&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To create a new DEX or WARP Logpush job, customers can go to the account level of the Cloudflare dashboard &gt; Analytics &amp;#x26; Logs &gt; Logpush to get started.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/dex_logpush_datasets.CtCk36pX_Z1tuyHu.webp&quot; alt=&quot;DEX logpush job creation dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Wed, 12 Nov 2025 00:00:00 GMT</pubDate><product>Digital Experience Monitoring</product><category>Digital Experience Monitoring</category></item><item><title>Workers Analytics Engine, Workers - More SQL aggregate, date and time functions available in Workers Analytics Engine</title><link>https://developers.cloudflare.com/changelog/post/2025-11-12-analytics-engine-further-sql-enhancements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-12-analytics-engine-further-sql-enhancements/</guid><description>&lt;p&gt;You can now perform more powerful queries directly in &lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/&quot; target=&quot;_blank&quot;&gt;Workers Analytics Engine&lt;/a&gt; with a major expansion of our SQL function library.&lt;/p&gt;
&lt;p&gt;Workers Analytics Engine allows you to ingest and store high-cardinality data at scale (such as custom analytics) and query your data through a simple SQL API.&lt;/p&gt;
&lt;p&gt;Today, we&apos;ve expanded Workers Analytics Engine&apos;s SQL capabilities with several new functions:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/aggregate-functions/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;New aggregate functions:&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;countIf()&lt;/code&gt; - count the number of rows which satisfy a provided condition&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sumIf()&lt;/code&gt; - calculate a sum from rows which satisfy a provided condition&lt;/li&gt;
&lt;li&gt;&lt;code&gt;avgIf()&lt;/code&gt; - calculate an average from rows which satisfy a provided condition&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/date-time-functions/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;New date and time functions:&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;toYear()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toMonth()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toDayOfMonth()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toDayOfWeek()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toHour()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toMinute()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toSecond()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfYear()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfMonth()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfWeek()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfDay()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfHour()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfFifteenMinutes()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfTenMinutes()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfFiveMinutes()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toStartOfMinute()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;today()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;toYYYYMM()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Ready to get started?&lt;/h4&gt;
&lt;p&gt;Whether you&apos;re building usage-based billing systems, customer analytics dashboards, or other custom analytics, these functions let you get the most out of your data. &lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/get-started/&quot;&gt;Get started &lt;/a&gt; with Workers Analytics Engine and explore all available functions in our &lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/&quot;&gt;SQL reference documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 12 Nov 2025 00:00:00 GMT</pubDate><product>Workers Analytics Engine</product><category>Workers Analytics Engine</category><category>Workers</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.9.558.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-11-11-warp-windows-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-11-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes, improvements, and new features including &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/path-mtu-discovery/#enable-path-mtu-discovery&quot;&gt;Path Maximum Transmission Unit Discovery (PMTUD)&lt;/a&gt;. When PMTUD is enabled, the client will dynamically adjust packet sizing to optimize connection performance. There is also a new connection status message in the GUI to inform users that the local network connection may be unstable. This will make it easier to diagnose connectivity issues.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an inconsistency with &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#disconnect-warp-on-all-devices&quot;&gt;Global WARP override&lt;/a&gt; settings in multi-user environments when switching between users.&lt;/li&gt;
&lt;li&gt;The GUI now displays the health of the tunnel and DNS connections by showing a connection status message when the network may be unstable. This will make it easier to diagnose connectivity issues.&lt;/li&gt;
&lt;li&gt;Fixed an issue where deleting a registration was erroneously reported as having failed.&lt;/li&gt;
&lt;li&gt;Path Maximum Transmission Unit Discovery (PMTUD) may now be used to discover the effective MTU of the connection. This allows the WARP client to improve connectivity optimized for each network. PMTUD is disabled by default. To enable it, refer to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/path-mtu-discovery/#enable-path-mtu-discovery&quot;&gt;PMTUD documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Improvements for the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/reusable-components/posture-checks/warp-client-checks/os-version/&quot;&gt;OS version&lt;/a&gt; WARP client check. Windows Updated Build Revision (UBR) numbers can now be checked by the client to ensure devices have required security patches and features installed.&lt;/li&gt;
&lt;li&gt;The WARP client now supports Windows 11 ARM-based machines. For information on known limitations, refer to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/known-limitations/#cloudflare-one-client-disconnected-on-windows-arm&quot;&gt;Known limitations page&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For Windows 11 24H2 users, Microsoft has confirmed a regression that may lead to performance issues like mouse lag, audio cracking, or other slowdowns. Cloudflare recommends users experiencing these issues upgrade to a minimum &lt;a href=&quot;https://support.microsoft.com/en-us/topic/july-8-2025-kb5062553-os-build-26100-4652-523e69cb-051b-43c6-8376-6a76d6caeefd&quot;&gt;Windows 11 24H2 KB5062553&lt;/a&gt; or higher for resolution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with KB5055523 installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 11 Nov 2025 17:28:35 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.9.558.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-11-11-warp-macos-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-11-warp-macos-ga/</guid><description>&lt;p&gt;A new GA release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes, improvements, and new features including &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/path-mtu-discovery/#enable-path-mtu-discovery&quot;&gt;Path Maximum Transmission Unit Discovery (PMTUD)&lt;/a&gt;. When PMTUD is enabled, the client will dynamically adjust packet sizing to optimize connection performance. There is also a new connection status message in the GUI to inform users that the local network connection may be unstable. This will make it easier to diagnose connectivity issues.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The GUI now displays the health of the tunnel and DNS connections by showing a connection status message when the network may be unstable. This will make it easier to diagnose connectivity issues.&lt;/li&gt;
&lt;li&gt;Fixed an issue where deleting a registration was erroneously reported as having failed.&lt;/li&gt;
&lt;li&gt;Path Maximum Transmission Unit Discovery (PMTUD) may now be used to discover the effective MTU of the connection. This allows the WARP client to improve connectivity optimized for each network. PMTUD is disabled by default. To enable it, refer to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/path-mtu-discovery/#enable-path-mtu-discovery&quot;&gt;PMTUD documentation&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 11 Nov 2025 17:28:35 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for Linux (version 2025.9.558.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-11-11-warp-linux-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-11-warp-linux-ga/</guid><description>&lt;p&gt;A new GA release for the Linux WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes, improvements, and new features including &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/path-mtu-discovery/#enable-path-mtu-discovery&quot;&gt;Path Maximum Transmission Unit Discovery (PMTUD)&lt;/a&gt;. When PMTUD is enabled, the client will dynamically adjust packet sizing to optimize connection performance. There is also a new connection status message in the GUI to inform users that the local network connection may be unstable. This will make it easier to diagnose connectivity issues.&lt;/p&gt;
&lt;p&gt;WARP client version 2025.8.779.0 introduced an updated public key for Linux packages. The public key must be updated if it was installed before September 12, 2025 to ensure the repository remains functional after December 4, 2025. Instructions to make this update are available at &lt;a href=&quot;https://pkg.cloudflareclient.com/&quot;&gt;pkg.cloudflareclient.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The GUI now displays the health of the tunnel and DNS connections by showing a connection status message when the network may be unstable. This will make it easier to diagnose connectivity issues.&lt;/li&gt;
&lt;li&gt;Fixed an issue where deleting a registration was erroneously reported as having failed.&lt;/li&gt;
&lt;li&gt;Path Maximum Transmission Unit Discovery (PMTUD) may now be used to discover the effective MTU of the connection. This allows the WARP client to improve connectivity optimized for each network. PMTUD is disabled by default. To enable it, refer to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/path-mtu-discovery/#enable-path-mtu-discovery&quot;&gt;PMTUD documentation&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 11 Nov 2025 15:06:09 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Log Explorer - Resize your custom SQL window in Log Explorer</title><link>https://developers.cloudflare.com/changelog/post/2025-11-11-resize-sql-window/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-11-resize-sql-window/</guid><description>&lt;p&gt;We&apos;re excited to announce a quality-of-life improvement for Log Explorer users. You can now resize the custom SQL query window to accommodate longer and more complex queries.&lt;/p&gt;
&lt;p&gt;Previously, if you were writing a long custom SQL query, the fixed-size window required excessive scrolling to view the full query. This update allows you to easily drag the bottom edge of the query window to make it taller. This means you can view your entire custom query at once, improving the efficiency and experience of writing and debugging complex queries.&lt;/p&gt;
&lt;p&gt;To learn more and get started, refer to the &lt;a href=&quot;https://developers.cloudflare.com/log-explorer/&quot;&gt;Log Explorer documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 11 Nov 2025 00:00:00 GMT</pubDate><product>Log Explorer</product><category>Log Explorer</category></item><item><title>Logs - Logpush Health Dashboards</title><link>https://developers.cloudflare.com/changelog/post/2025-11-11-health-dashboards/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-11-health-dashboards/</guid><description>&lt;p&gt;We’re excited to introduce &lt;strong&gt;Logpush Health Dashboards&lt;/strong&gt;, giving customers real-time visibility into the status, reliability, and performance of their &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/&quot;&gt;Logpush&lt;/a&gt; jobs. Health dashboards make it easier to detect delivery issues, monitor job stability, and track performance across destinations. The dashboards are divided into two sections:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Upload Health&lt;/strong&gt;: See how much data was successfully uploaded, where drops occurred, and how your jobs are performing overall. This includes data completeness, success rate, and upload volume.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Upload Reliability&lt;/strong&gt; – Diagnose issues impacting stability, retries, or latency, and monitor key metrics such as retry counts, upload duration, and destination availability.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/Health-Dashboard.CP0mV0IW_Z1GdXr6.webp&quot; alt=&quot;Health Dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Health Dashboards can be accessed from the Logpush page in the Cloudflare dashboard at the account or zone level, under the Health tab. For more details, refer to our &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-health&quot;&gt;&lt;strong&gt;Logpush Health Dashboards&lt;/strong&gt;&lt;/a&gt; documentation, which includes a comprehensive troubleshooting guide to help interpret and resolve common issues.&lt;/p&gt;</description><pubDate>Tue, 11 Nov 2025 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>Cloudflare Tunnel, Cloudflare Tunnel for SASE - cloudflared proxy-dns command will be removed starting February 2, 2026</title><link>https://developers.cloudflare.com/changelog/post/2025-11-11-cloudflared-proxy-dns/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-11-cloudflared-proxy-dns/</guid><description>&lt;p&gt;Starting February 2, 2026, the &lt;code&gt;cloudflared proxy-dns&lt;/code&gt; command will be removed from all new &lt;code&gt;cloudflared&lt;/code&gt; &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/&quot;&gt;releases&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This change is being made to enhance security and address a potential vulnerability in an underlying DNS library. This vulnerability is specific to the &lt;code&gt;proxy-dns&lt;/code&gt; command and does not affect any other &lt;code&gt;cloudflared&lt;/code&gt; features, such as the core &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/&quot;&gt;Cloudflare Tunnel&lt;/a&gt; service.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;proxy-dns&lt;/code&gt; command, which runs a client-side &lt;a href=&quot;https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/&quot;&gt;DNS-over-HTTPS (DoH)&lt;/a&gt; proxy, has been an officially undocumented feature for several years. This functionality is fully and securely supported by our actively developed products.&lt;/p&gt;
&lt;p&gt;Versions of &lt;code&gt;cloudflared&lt;/code&gt; released before this date will not be affected and will continue to operate. However, note that our &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/#deprecated-releases&quot;&gt;official support policy&lt;/a&gt; for any &lt;code&gt;cloudflared&lt;/code&gt; release is one year from its release date.&lt;/p&gt;
&lt;h4&gt;Migration paths&lt;/h4&gt;
&lt;p&gt;We strongly advise users of this undocumented feature to migrate to one of the following officially supported solutions before February 2, 2026, to continue benefiting from secure &lt;a href=&quot;https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/&quot;&gt;DNS-over-HTTPS&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;End-user devices&lt;/h4&gt;
&lt;p&gt;The preferred method for enabling DNS-over-HTTPS on user devices is the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/&quot;&gt;Cloudflare WARP client&lt;/a&gt;. The WARP client automatically secures and proxies all DNS traffic from your device, integrating it with your organization&apos;s &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/&quot;&gt;Zero Trust policies&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/reusable-components/posture-checks/&quot;&gt;posture checks&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Servers, routers, and IoT devices&lt;/h4&gt;
&lt;p&gt;For scenarios where installing a client on every device is not possible (such as servers, routers, or IoT devices), we recommend using the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/warp-connector/&quot;&gt;WARP Connector&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Instead of running &lt;code&gt;cloudflared proxy-dns&lt;/code&gt; on a machine, you can install the WARP Connector on a single Linux host within your private network. This connector will act as a gateway, securely routing all DNS and network traffic from your &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/warp-connector/site-to-internet/&quot;&gt;entire subnet&lt;/a&gt; to Cloudflare for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/&quot;&gt;filtering and logging&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 11 Nov 2025 00:00:00 GMT</pubDate><product>Cloudflare Tunnel</product><category>Cloudflare Tunnel</category><category>Cloudflare Tunnel for SASE</category></item><item><title>AI Crawl Control - Crawler drilldowns with extended actions menu</title><link>https://developers.cloudflare.com/changelog/post/2025-11-10-ai-crawl-control-crawler-info/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-10-ai-crawl-control-crawler-info/</guid><description>&lt;p&gt;AI Crawl Control now supports per-crawler drilldowns with an extended actions menu and status code analytics. Drill down into Metrics, Cloudflare Radar, and Security Analytics, or export crawler data for use in &lt;a href=&quot;https://developers.cloudflare.com/waf/custom-rules/&quot;&gt;WAF custom rules&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/rules/url-forwarding/&quot;&gt;Redirect Rules&lt;/a&gt;, and robots.txt files.&lt;/p&gt;
&lt;h4&gt;What&apos;s new&lt;/h4&gt;
&lt;h4&gt;Status code distribution chart&lt;/h4&gt;
&lt;p&gt;The &lt;strong&gt;Metrics&lt;/strong&gt; tab includes a status code distribution chart showing HTTP response codes (2xx, 3xx, 4xx, 5xx) over time. Filter by individual crawler, category, operator, or time range to analyze how specific crawlers interact with your site.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ai-crawl-control-status-codes.DESJcAiK_TSrPM.webp&quot; alt=&quot;AI Crawl Control status code distribution chart&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;Extended actions menu&lt;/h4&gt;
&lt;p&gt;Each crawler row includes a three-dot menu with per-crawler actions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;View Metrics&lt;/strong&gt; — Filter the AI Crawl Control Metrics page to the selected crawler.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;View on Cloudflare Radar&lt;/strong&gt; — Access verified crawler details on Cloudflare Radar.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copy User Agent&lt;/strong&gt; — Copy user agent strings for use in WAF custom rules, Redirect Rules, or robots.txt files.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;View in Security Analytics&lt;/strong&gt; — Filter Security Analytics by detection IDs (Bot Management customers).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copy Detection ID&lt;/strong&gt; — Copy detection IDs for use in WAF custom rules (Bot Management customers).&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ai-crawl-control-crawler-info.Dwc39LqI_182so6.webp&quot; alt=&quot;AI Crawl Control crawler actions menu&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Log in to the Cloudflare dashboard, and select your account and domain.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;AI Crawl Control&lt;/strong&gt; &gt; &lt;strong&gt;Metrics&lt;/strong&gt; to access the status code distribution chart.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;AI Crawl Control&lt;/strong&gt; &gt; &lt;strong&gt;Crawlers&lt;/strong&gt; and select the three-dot menu for any crawler to access per-crawler actions.&lt;/li&gt;
&lt;li&gt;Select multiple crawlers to use bulk copy buttons for user agents or detection IDs.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Learn more about &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/&quot;&gt;AI Crawl Control&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 10 Nov 2025 00:00:00 GMT</pubDate><product>AI Crawl Control</product><category>AI Crawl Control</category></item><item><title>WAF - WAF Release - 2025-11-10</title><link>https://developers.cloudflare.com/changelog/post/2025-11-10-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-10-waf-release/</guid><description>&lt;p&gt;This week’s release introduces new detections for Prototype Pollution across three common vectors: URI, Body, and Header/Form.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;These attacks can affect both API and web applications by altering normal behavior or bypassing security controls.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Exploitation may allow attackers to change internal logic or cause unexpected behavior in applications using JavaScript or Node.js frameworks. Developers should sanitize input keys and avoid merging untrusted data structures.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;32405a50728746dd8caa057b606285e6 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic Rules - Prototype Pollution - URI&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a new detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;a7da00c63c4243d2a72456fe4f59ff26 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic Rules - Prototype Pollution - Body&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a new detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;833078bdcfa04bb7aa7b8fb67efbeb39 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic Rules - Prototype Pollution - Header - Form&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a new detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 10 Nov 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Select Wrangler environments using the CLOUDFLARE_ENV environment variable</title><link>https://developers.cloudflare.com/changelog/post/2025-11-09-cloudflare-env-variable/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-09-cloudflare-env-variable/</guid><description>&lt;p&gt;Wrangler now supports using the &lt;code&gt;CLOUDFLARE_ENV&lt;/code&gt; &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/system-environment-variables/#supported-environment-variables&quot;&gt;environment variable&lt;/a&gt; to select the active &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/environments/&quot;&gt;environment&lt;/a&gt; for your Worker commands. This provides a more flexible way to manage environments, especially when working with build tools and CI/CD pipelines.&lt;/p&gt;
&lt;h4&gt;What&apos;s new&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Environment selection via environment variable:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set &lt;code&gt;CLOUDFLARE_ENV&lt;/code&gt; to specify which environment to use for Wrangler commands&lt;/li&gt;
&lt;li&gt;Works with all Wrangler commands that support the &lt;code&gt;--env&lt;/code&gt; flag&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;--env&lt;/code&gt; command line argument takes precedence over the &lt;code&gt;CLOUDFLARE_ENV&lt;/code&gt; environment variable&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Example usage&lt;/h4&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;# Deploy to the production environment using CLOUDFLARE_ENV&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;CLOUDFLARE_ENV&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;production&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;deploy&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;# Upload a version to the staging environment&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;CLOUDFLARE_ENV&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;staging&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;versions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;upload&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;# The --env flag takes precedence over CLOUDFLARE_ENV&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;CLOUDFLARE_ENV&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;dev&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;deploy&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;production&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# This will deploy to production, not dev&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;h4&gt;Use with build tools&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;CLOUDFLARE_ENV&lt;/code&gt; environment variable is particularly useful when working with build tools like Vite. You can set the environment once during the build process, and it will be used for both building and deploying your Worker:&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;# Set the environment for both build and deploy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;CLOUDFLARE_ENV&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;production&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x26;&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;deploy&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;When using &lt;code&gt;@cloudflare/vite-plugin&lt;/code&gt;, the build process generates a &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/configuration/#generated-wrangler-configuration&quot;&gt;&quot;redirected deploy config&quot;&lt;/a&gt; that is flattened to only contain the active environment. Wrangler will validate that the environment specified matches the environment used during the build to prevent accidentally deploying a Worker built for one environment to a different environment.&lt;/p&gt;
&lt;h4&gt;Learn more&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/system-environment-variables/&quot;&gt;System environment variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/environments/&quot;&gt;Environments&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Sun, 09 Nov 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cache - Inspect Cache Keys with Cloudflare Trace</title><link>https://developers.cloudflare.com/changelog/post/2025-11-07-cache-keys-for-cloudflare-trace/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-07-cache-keys-for-cloudflare-trace/</guid><description>&lt;p&gt;You can now see the exact cache key generated for any request directly in Cloudflare Trace. This visibility helps you troubleshoot cache hits and misses, and verify that your Custom Cache Keys — configured via Cache Rules or Page Rules — are working as intended.&lt;/p&gt;
&lt;p&gt;Previously, diagnosing caching behavior required inferring the key from configuration settings. Now, you can confirm that your custom logic for headers, query strings, and device types is correctly applied.&lt;/p&gt;
&lt;p&gt;Access Trace via the &lt;a href=&quot;https://developers.cloudflare.com/rules/trace-request/how-to/#use-trace-in-the-dashboard&quot;&gt;dashboard&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/api/resources/request_tracer/methods/trace/&quot;&gt;API&lt;/a&gt;, either manually for ad-hoc debugging or automated as part of your quality-of-service monitoring.&lt;/p&gt;
&lt;h4&gt;Example scenario&lt;/h4&gt;
&lt;p&gt;If you have a Cache Rule that segments content based on a specific cookie (for example, &lt;code&gt;user_region&lt;/code&gt;), run a Trace with that cookie present to confirm the &lt;code&gt;user_region&lt;/code&gt; value appears in the resulting cache key.&lt;/p&gt;
&lt;p&gt;The Trace response includes the cache key in the &lt;code&gt;cache&lt;/code&gt; object:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;step_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;request&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cache&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;matched&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;&quot;&lt;/span&gt;&lt;span&gt;public_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Cache Parameters&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;cache&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;zone_id&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;023e105f4ecef8ad9ca31a8372d0c353&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;scheme&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;host&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;example.com&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;uri&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;/images/hero.jpg&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;key_string&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;023e105f4ecef8ad9ca31a8372d0c353::::https://example.com/images/hero.jpg:::::&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;/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;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;To learn more, refer to the &lt;a href=&quot;https://developers.cloudflare.com/rules/trace-request/&quot;&gt;Trace documentation&lt;/a&gt; and our guide on &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/cache-keys/&quot;&gt;Custom Cache Keys&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 07 Nov 2025 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>Workers - Workers automatic tracing, now in open beta</title><link>https://developers.cloudflare.com/changelog/post/2025-11-07-automatic-tracing/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-07-automatic-tracing/</guid><description>&lt;p&gt;Enable automatic tracing on your Workers, giving you detailed metadata and timing information for every operation your Worker performs.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/R2_Screenshot.DAnOidMq_Z15kdUk.webp&quot; alt=&quot;Tracing example&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Tracing helps you identify performance bottlenecks, resolve errors, and understand how your Worker interacts with other services on the Workers platform. You can now answer questions like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Which calls are slowing down my application?&lt;/li&gt;
&lt;li&gt;Which queries to my database take the longest?&lt;/li&gt;
&lt;li&gt;What happened within a request that resulted in an error?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;You can now:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;View traces alongside your logs in the Workers Observability dashboard&lt;/li&gt;
&lt;li&gt;Export traces (and correlated logs) to any &lt;a href=&quot;https://opentelemetry.io/docs/specs/otel/protocol/&quot; target=&quot;_blank&quot;&gt;OTLP-compatible destination&lt;/a&gt;, such as &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/exporting-opentelemetry-data/honeycomb/&quot;&gt;Honeycomb&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/exporting-opentelemetry-data/sentry/&quot;&gt;Sentry&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/exporting-opentelemetry-data/grafana-cloud/&quot;&gt;Grafana&lt;/a&gt;, by configuring a tracing destination in the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers-and-pages/observability/destinations&quot; target=&quot;_blank&quot;&gt;Cloudflare dashboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Analyze and query across span attributes (operation type, status, duration, errors)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;To get started, set:&lt;/h4&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;observability&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;tracing&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;enabled&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;In the future, Cloudflare plans to enable automatic tracing in addition to logs
when you set &lt;code&gt;observability.enabled = true&lt;/code&gt; in your Wrangler configuration.&lt;/p&gt;&lt;p&gt;While automatic tracing is in early beta, this setting will not enable tracing by default,
and will only enable logs.&lt;/p&gt;&lt;p&gt;An updated &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/compatibility-dates/&quot;&gt;&lt;code&gt;compatibility_date&lt;/code&gt;&lt;/a&gt; will be required for this change to take effect.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;h4&gt;Want to learn more?&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.cloudflare.com/workers-tracing-now-in-open-beta/&quot; target=&quot;_blank&quot;&gt;Read the announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/observability/traces/&quot;&gt;Check out the documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 07 Nov 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare One, Cloudflare WAN - Automatic Return Routing (Beta)</title><link>https://developers.cloudflare.com/changelog/post/2025-11-06-automatic-return-routing-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-06-automatic-return-routing-beta/</guid><description>&lt;p&gt;Magic WAN now supports Automatic Return Routing (ARR), allowing customers to configure Magic on-ramps (IPsec/GRE/CNI) to learn the return path for traffic flows without requiring static routes.&lt;/p&gt;
&lt;p&gt;Key benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Route-less mode&lt;/strong&gt;: Static or dynamic routes are optional when using ARR.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Overlapping IP space support&lt;/strong&gt;: Traffic originating from customer sites can use overlapping private IP ranges.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Symmetric routing&lt;/strong&gt;: Return traffic is guaranteed to use the same connection as the original on-ramp.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This feature is currently in beta and requires the new Unified Routing mode (beta).&lt;/p&gt;
&lt;p&gt;For configuration details, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/configuration/manually/how-to/configure-routes/#configure-automatic-return-routing-beta&quot;&gt;Configure Automatic Return Routing&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 06 Nov 2025 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category><category>Cloudflare WAN</category></item><item><title>Cloudflare One, Cloudflare WAN - Designate WAN link for breakout traffic</title><link>https://developers.cloudflare.com/changelog/post/2025-11-06-connector-designate-wan-link-breakout/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-06-connector-designate-wan-link-breakout/</guid><description>&lt;p&gt;Magic WAN Connector now allows you to designate a specific WAN port for breakout traffic, giving you deterministic control over the egress path for latency-sensitive applications.&lt;/p&gt;
&lt;p&gt;With this feature, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pin breakout traffic for specific applications to a preferred WAN port.&lt;/li&gt;
&lt;li&gt;Ensure critical traffic (such as Zoom or Teams) always uses your fastest or most reliable connection.&lt;/li&gt;
&lt;li&gt;Benefit from automatic failover to standard WAN port priority if the preferred port goes down.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is useful for organizations with multiple ISP uplinks who need predictable egress behavior for performance-sensitive traffic.&lt;/p&gt;
&lt;p&gt;For configuration details, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/configuration/appliance/network-options/application-based-policies/breakout-traffic/#designate-wan-ports-for-breakout-apps&quot;&gt;Designate WAN ports for breakout apps&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 06 Nov 2025 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category><category>Cloudflare WAN</category></item><item><title>Gateway - Applications to be remapped to the new categories</title><link>https://developers.cloudflare.com/changelog/post/2025-11-06-applications-recategorised-plan/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-06-applications-recategorised-plan/</guid><description>&lt;p&gt;We have previously added new application categories to better reflect their content and improve HTTP traffic management: refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/changelog/gateway/#2025-10-28&quot;&gt;Changelog&lt;/a&gt;.
While the new categories are live now, we want to ensure you have ample time to review and adjust any existing rules you have configured against old categories.
The remapping of existing applications into these new categories will be completed by January 30, 2026.
This timeline allows you a dedicated period to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Review the new category structure.&lt;/li&gt;
&lt;li&gt;Identify any policies you have that target the older categories.&lt;/li&gt;
&lt;li&gt;Adjust your rules to reference the new, more precise categories before the old mappings change.
Once the applications have been fully remapped by January 30, 2026, you might observe some changes in the traffic being mitigated or allowed by your existing policies. We encourage you to use the intervening time to prepare for a smooth transition.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Applications being remappedd&lt;/strong&gt;&lt;/p&gt;

















































































































































































































































































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Application Name&lt;/th&gt;&lt;th&gt;Existing Category&lt;/th&gt;&lt;th&gt;New Category&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Google Photos&lt;/td&gt;&lt;td&gt;File Sharing&lt;/td&gt;&lt;td&gt;Photography &amp;#x26; Graphic Design&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Flickr&lt;/td&gt;&lt;td&gt;File Sharing&lt;/td&gt;&lt;td&gt;Photography &amp;#x26; Graphic Design&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ADP&lt;/td&gt;&lt;td&gt;Human Resources&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Greenhouse&lt;/td&gt;&lt;td&gt;Human Resources&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;myCigna&lt;/td&gt;&lt;td&gt;Human Resources&lt;/td&gt;&lt;td&gt;Health &amp;#x26; Fitness&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;UnitedHealthcare&lt;/td&gt;&lt;td&gt;Human Resources&lt;/td&gt;&lt;td&gt;Health &amp;#x26; Fitness&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ZipRecruiter&lt;/td&gt;&lt;td&gt;Human Resources&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Amazon Business&lt;/td&gt;&lt;td&gt;Human Resources&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Jobcenter&lt;/td&gt;&lt;td&gt;Human Resources&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Jobsuche&lt;/td&gt;&lt;td&gt;Human Resources&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Zenjob&lt;/td&gt;&lt;td&gt;Human Resources&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DocuSign&lt;/td&gt;&lt;td&gt;Legal&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Postident&lt;/td&gt;&lt;td&gt;Legal&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Adobe Creative Cloud&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Photography &amp;#x26; Graphic Design&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Airtable&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Development&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Autodesk Fusion360&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;IT Management&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Coursera&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Education&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Microsoft Power BI&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Tableau&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Duolingo&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Education&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Adobe Reader&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AnpiReport&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Travel&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ビズリーチ&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;doda (デューダ)&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;求人ボックス&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;マイナビ2026&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Power Apps&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RECRUIT AGENT&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;シフトボード&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;スタンバイ&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Doctolib&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Health &amp;#x26; Fitness&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Miro&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Photography &amp;#x26; Graphic Design&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;MyFitnessPal&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Health &amp;#x26; Fitness&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Sentry Mobile&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Travel&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Slido&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Photography &amp;#x26; Graphic Design&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Arista Networks&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;IT Management&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Atlassian&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;CoderPad&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;eAgreements&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Vmware&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;IT Management&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Vmware Vcenter&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;IT Management&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AWS Skill Builder&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Education&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Microsoft Office 365 (GCC)&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Microsoft Exchange Online (GCC)&lt;/td&gt;&lt;td&gt;Productivity&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Canva&lt;/td&gt;&lt;td&gt;Sales &amp;#x26; Marketing&lt;/td&gt;&lt;td&gt;Photography &amp;#x26; Graphic Design&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Instacart&lt;/td&gt;&lt;td&gt;Shopping&lt;/td&gt;&lt;td&gt;Food &amp;#x26; Drink&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Wawa&lt;/td&gt;&lt;td&gt;Shopping&lt;/td&gt;&lt;td&gt;Food &amp;#x26; Drink&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;McDonald&apos;s&lt;/td&gt;&lt;td&gt;Shopping&lt;/td&gt;&lt;td&gt;Food &amp;#x26; Drink&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Vrbo&lt;/td&gt;&lt;td&gt;Shopping&lt;/td&gt;&lt;td&gt;Travel&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;American Airlines&lt;/td&gt;&lt;td&gt;Shopping&lt;/td&gt;&lt;td&gt;Travel&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Booking.com&lt;/td&gt;&lt;td&gt;Shopping&lt;/td&gt;&lt;td&gt;Travel&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ticketmaster&lt;/td&gt;&lt;td&gt;Shopping&lt;/td&gt;&lt;td&gt;Entertainment &amp;#x26; Events&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Airbnb&lt;/td&gt;&lt;td&gt;Shopping&lt;/td&gt;&lt;td&gt;Travel&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DoorDash&lt;/td&gt;&lt;td&gt;Shopping&lt;/td&gt;&lt;td&gt;Food &amp;#x26; Drink&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Expedia&lt;/td&gt;&lt;td&gt;Shopping&lt;/td&gt;&lt;td&gt;Travel&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;EasyPark&lt;/td&gt;&lt;td&gt;Shopping&lt;/td&gt;&lt;td&gt;Travel&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;UEFA Tickets&lt;/td&gt;&lt;td&gt;Shopping&lt;/td&gt;&lt;td&gt;Entertainment &amp;#x26; Events&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;DHL Express&lt;/td&gt;&lt;td&gt;Shopping&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;UPS&lt;/td&gt;&lt;td&gt;Shopping&lt;/td&gt;&lt;td&gt;Business&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;For more information on creating HTTP policies, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/application-app-types/&quot;&gt;Applications and app types&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 06 Nov 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>D1, Workers - D1 can restrict data localization with jurisdictions</title><link>https://developers.cloudflare.com/changelog/post/2025-11-05-d1-jurisdiction/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-05-d1-jurisdiction/</guid><description>&lt;p&gt;You can now set a &lt;a href=&quot;https://developers.cloudflare.com/d1/configuration/data-location/&quot;&gt;jurisdiction&lt;/a&gt; when creating a D1 database to guarantee where your database runs and stores data. Jurisdictions can help you comply with data localization regulations such as GDPR. Supported jurisdictions include &lt;code&gt;eu&lt;/code&gt; and &lt;code&gt;fedramp&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A jurisdiction can only be set at database creation time via wrangler, REST API or the UI and cannot be added/updated after the database already exists.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&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@latest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;d1&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;db-with-jurisdiction&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--jurisdiction&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;eu&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;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl -X POST &quot;https://api.cloudflare.com/client/v4/accounts/&amp;#x3C;account_id&gt;/d1/database&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;-H &quot;Authorization: Bearer $TOKEN&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;-H &quot;Content-Type: application/json&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;--data &apos;{&quot;name&quot;: &quot;db-wth-jurisdiction&quot;, &quot;jurisdiction&quot;: &quot;eu&quot; }&apos;&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;To learn more, visit D1&apos;s data location &lt;a href=&quot;https://developers.cloudflare.com/d1/configuration/data-location/&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 05 Nov 2025 00:00:00 GMT</pubDate><product>D1</product><category>D1</category><category>Workers</category></item><item><title>Logs - Logpush Permission Update for Zero Trust Datasets</title><link>https://developers.cloudflare.com/changelog/post/2025-11-05-logpush-permissions-update/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-05-logpush-permissions-update/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/permissions/&quot;&gt;Permissions&lt;/a&gt; for managing Logpush jobs related to &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/datasets/account/&quot;&gt;Zero Trust datasets&lt;/a&gt; (Access, Gateway, and DEX) have been updated to improve data security and enforce appropriate access controls.&lt;/p&gt;
&lt;p&gt;To view, create, update, or delete Logpush jobs for Zero Trust datasets, users must now have both of the following permissions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Logs Edit&lt;/li&gt;
&lt;li&gt;Zero Trust: PII Read&lt;/li&gt;
&lt;/ul&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;Update your UI, API or Terraform configurations to include the new permissions. Requests to Zero Trust datasets will fail due to insufficient access without the additional permission.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;</description><pubDate>Wed, 05 Nov 2025 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>WAF - WAF Release - 2025-11-05 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-11-05-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-05-emergency-waf-release/</guid><description>&lt;p&gt;This week’s emergency release introduces a new detection signature that enhances coverage for a critical vulnerability in the React Native Metro Development Server, tracked as CVE-2025-11953.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Metro Development Server exposes an HTTP endpoint that is vulnerable to OS command injection (CWE-78). An unauthenticated network attacker can send a crafted request to this endpoint and execute arbitrary commands on the host running Metro. The vulnerability affects Metro/cli-server-api builds used by React Native Community CLI in pre-patch development releases.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Successful exploitation of CVE-2025-11953 may result in remote command execution on developer workstations or CI/build agents, leading to credential and secret exposure, source tampering, and potential lateral movement into internal networks. Administrators and developers are strongly advised to apply the vendor&apos;s patches and restrict Metro’s network exposure to reduce this risk.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;db6b9e1ac1494971ae8c70aac8e30c5b &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;React Native Metro - Command Injection - CVE:CVE-2025-11953&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Wed, 05 Nov 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers VPC - Announcing Workers VPC Services (Beta)</title><link>https://developers.cloudflare.com/changelog/post/2025-09-25-workers-vpc/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-25-workers-vpc/</guid><description>&lt;p&gt;&lt;strong&gt;Workers VPC Services&lt;/strong&gt; is now available, enabling your Workers to securely access resources in your private networks, without having to expose them on the public Internet.&lt;/p&gt;
&lt;h4&gt;What&apos;s new&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VPC Services&lt;/strong&gt;: Create secure connections to internal APIs, databases, and services using familiar Worker binding syntax&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-cloud Support&lt;/strong&gt;: Connect to resources in private networks in any external cloud (AWS, Azure, GCP, etc.) or on-premise using Cloudflare Tunnels&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&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;// Perform application logic in Workers here&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;// Sample call to an internal API running on ECS in AWS using the binding&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AWS_VPC_ECS_API&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://internal-host.example.com&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Additional application logic in Workers&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&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;/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;h4&gt;Getting started&lt;/h4&gt;
&lt;p&gt;Set up a Cloudflare Tunnel, create a VPC Service, add service bindings to your Worker, and access private resources securely. &lt;a href=&quot;https://developers.cloudflare.com/workers-vpc/&quot;&gt;Refer to the documentation&lt;/a&gt; to get started.&lt;/p&gt;</description><pubDate>Wed, 05 Nov 2025 00:00:00 GMT</pubDate><product>Workers VPC</product><category>Workers VPC</category></item><item><title>Log Explorer - Log Explorer now supports query cancellation</title><link>https://developers.cloudflare.com/changelog/post/2025-11-04-query-cancellation/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-04-query-cancellation/</guid><description>&lt;p&gt;We&apos;re excited to announce that Log Explorer users can now cancel queries that are currently running.&lt;/p&gt;
&lt;p&gt;This new feature addresses a common pain point: waiting for a long, unintended, or misconfigured query to complete before you can submit a new, correct one. With query cancellation, you can immediately stop the execution of any undesirable query, allowing you to quickly craft and submit a new query, significantly improving your investigative workflow and productivity within Log Explorer.&lt;/p&gt;</description><pubDate>Tue, 04 Nov 2025 00:00:00 GMT</pubDate><product>Log Explorer</product><category>Log Explorer</category></item><item><title>Log Explorer - Log Explorer now shows query result distribution</title><link>https://developers.cloudflare.com/changelog/post/2025-11-13-query-result-distribution/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-13-query-result-distribution/</guid><description>&lt;p&gt;We&apos;re excited to announce a new feature in Log Explorer that significantly enhances how you analyze query results: the Query results distribution chart.&lt;/p&gt;
&lt;p&gt;This new chart provides a graphical distribution of your results over the time window of the query. Immediately after running a query, you will see the distribution chart above your result table. This visualization allows Log Explorer users to quickly spot trends, identify anomalies, and understand the temporal concentration of log events that match their criteria. For example, you can visually confirm if a spike in traffic or errors occurred at a specific time, allowing you to focus your investigation efforts more effectively. This feature makes it faster and easier to extract meaningful insights from your vast log data.&lt;/p&gt;
&lt;p&gt;The chart will dynamically update to reflect the logs matching your current query.&lt;/p&gt;</description><pubDate>Tue, 04 Nov 2025 00:00:00 GMT</pubDate><product>Log Explorer</product><category>Log Explorer</category></item><item><title>WAF - WAF Release - 2025-11-03</title><link>https://developers.cloudflare.com/changelog/post/2025-11-03-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-03-waf-release/</guid><description>&lt;p&gt;This week highlights enhancements to detection signatures improving coverage for vulnerabilities in Adobe Commerce and Magento Open Source, linked to CVE-2025-54236.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This vulnerability allows unauthenticated attackers to take over customer accounts through the Commerce REST API and, in certain configurations, may lead to remote code execution. The latest update provides enhanced detection logic for resilient protection against exploitation attempts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adobe Commerce (CVE-2025-54236): Exploitation may allow attackers to hijack sessions, execute arbitrary commands, steal data, and disrupt storefronts, resulting in confidentiality and integrity risks for merchants. Administrators are strongly encouraged to apply vendor patches without delay.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;f5295d8333b7428c816654d8cb6d5fe5 &lt;/td&gt;&lt;td&gt;100774C&lt;/td&gt;&lt;td&gt;Adobe Commerce - Remote Code Execution - CVE:CVE-2025-54236&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is an improved detection.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 03 Nov 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Capture Wrangler command output in structured format</title><link>https://developers.cloudflare.com/changelog/post/2025-11-03-wrangler-output-file/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-11-03-wrangler-output-file/</guid><description>&lt;p&gt;You can now capture Wrangler command output in a structured &lt;a href=&quot;https://github.com/ndjson/ndjson-spec&quot; target=&quot;_blank&quot;&gt;ND-JSON&lt;/a&gt; format by setting the &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/system-environment-variables/#supported-environment-variables&quot;&gt;&lt;code&gt;WRANGLER_OUTPUT_FILE_PATH&lt;/code&gt;&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/system-environment-variables/#supported-environment-variables&quot;&gt;&lt;code&gt;WRANGLER_OUTPUT_FILE_DIRECTORY&lt;/code&gt;&lt;/a&gt; environment variables. This feature is particularly useful for CI/CD pipelines and automation tools that need programmatic access to deployment information such as worker names, version IDs, deployment URLs, and error details. Commands that support this feature include &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/#deploy&quot;&gt;&lt;code&gt;wrangler deploy&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/#versions&quot;&gt;&lt;code&gt;wrangler versions upload&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/#versions&quot;&gt;&lt;code&gt;wrangler versions deploy&lt;/code&gt;&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/#deploy-1&quot;&gt;&lt;code&gt;wrangler pages deploy&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 03 Nov 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Security Center - Report logo misuse to Cloudflare directly from the Brand Protection dashboard</title><link>https://developers.cloudflare.com/changelog/post/2025-10-31-brand-protection-logo-dashboard-report-abuse/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-31-brand-protection-logo-dashboard-report-abuse/</guid><description>&lt;p&gt;The Brand Protection logo query dashboard now allows you to use the &lt;strong&gt;Report to Cloudflare&lt;/strong&gt; button to submit an Abuse report directly from the Brand Protection logo queries dashboard. While you could previously report new domains that were impersonating your brand before, now you can do the same for websites found to be using your logo wihtout your permission. The abuse reports wiull be prefilled and you will only need to validate a few fields before you can click the submit button, after which our team process your request.&lt;/p&gt;
&lt;p&gt;Ready to start? Check out the &lt;a href=&quot;https://developers.cloudflare.com/security-center/brand-protection/&quot;&gt;Brand Protection docs&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 31 Oct 2025 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>Workers, Durable Objects, Browser Rendering - Workers WebSocket message size limit increased from 1 MiB to 32 MiB</title><link>https://developers.cloudflare.com/changelog/post/2025-10-31-increased-websocket-message-size-limit/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-31-increased-websocket-message-size-limit/</guid><description>&lt;p&gt;Workers, including those using &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/&quot;&gt;Durable Objects&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/workers-bindings/&quot;&gt;Browser Rendering&lt;/a&gt;, may now process WebSocket messages up to 32 MiB in size. Previously, this limit was 1 MiB.&lt;/p&gt;
&lt;p&gt;This change allows Workers to handle use cases requiring large message sizes, such as processing Chrome Devtools Protocol messages.&lt;/p&gt;
&lt;p&gt;For more information, please see the &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/platform/limits/#sqlite-backed-durable-objects-general-limits&quot;&gt;Durable Objects startup limits&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 31 Oct 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category><category>Durable Objects</category><category>Browser Rendering</category></item><item><title>Workflows, Workers - Increased Workflows instance and concurrency limits</title><link>https://developers.cloudflare.com/changelog/post/2025-10-28-raising-limits/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-28-raising-limits/</guid><description>&lt;p&gt;We&apos;ve raised the &lt;a href=&quot;https://developers.cloudflare.com/workflows/&quot;&gt;Cloudflare Workflows&lt;/a&gt; account-level limits for all accounts on the &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/pricing/&quot;&gt;Workers paid plan&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Instance creation rate&lt;/strong&gt; increased from 100 workflow instances per 10 seconds to 100 instances per second&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrency limit&lt;/strong&gt; increased from 4,500 to 10,000 workflow instances per account&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These increases mean you can create new instances up to 10x faster, and have more workflow instances concurrently executing. To learn more and get started with Workflows, refer to &lt;a href=&quot;https://developers.cloudflare.com/workflows/get-started/guide/&quot;&gt;the getting started guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If your application requires a higher limit, fill out the &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/limits/&quot;&gt;Limit Increase Request Form&lt;/a&gt; or contact your account team. Please refer to &lt;a href=&quot;https://developers.cloudflare.com/workflows/reference/pricing/&quot;&gt;Workflows pricing&lt;/a&gt; for more information.&lt;/p&gt;</description><pubDate>Fri, 31 Oct 2025 00:00:00 GMT</pubDate><product>Workflows</product><category>Workflows</category><category>Workers</category></item><item><title>Cloudflare Fundamentals - Introducing email two-factor authentication</title><link>https://developers.cloudflare.com/changelog/post/2025-10-30-email-2fa/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-30-email-2fa/</guid><description>&lt;p&gt;Two-factor authentication (2FA) is one of the best ways to protect your account from the risk of account takeover. Cloudflare has offered phishing resistant 2FA options including hardware based keys (for example, a Yubikey) and app based TOTP (time-based one-time password) options which use apps like Google or Microsoft&apos;s Authenticator app. Unfortunately, while these solutions are very secure, they can be lost if you misplace the hardware based key, or lose the phone which includes that app. The result is that users sometimes get locked out of their accounts and need to contact support.&lt;/p&gt;
&lt;p&gt;Today, we are announcing the addition of email as a 2FA factor for all Cloudflare accounts. Email 2FA is in wide use across the industry as a least common denominator for 2FA because it is low friction, loss resistant, and still improves security over username/password login only. We also know that most commercial email providers already require 2FA, so your email address is usually well protected already.&lt;/p&gt;
&lt;p&gt;You can now enable email 2FA on the Cloudflare dashboard:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Profile&lt;/strong&gt; at the top right corner.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Authentication&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Under &lt;strong&gt;Two-Factor Authentication&lt;/strong&gt;, select &lt;strong&gt;Set up&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Sign-in security best practices&lt;/h4&gt;
&lt;p&gt;Cloudflare is critical infrastructure, and you should protect it as such. Review the following best practices and make sure you are doing your part to secure your account:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use a unique password for every website, including Cloudflare, and store it in a password manager like 1Password or Keeper. These services are cross-platform and simplify the process of managing secure passwords.&lt;/li&gt;
&lt;li&gt;Use 2FA to make it harder for an attacker to get into your account in the event your password is leaked.&lt;/li&gt;
&lt;li&gt;Store your backup codes securely. A password manager is the best place since it keeps the backup codes encrypted, but you can also print them and put them somewhere safe in your home.&lt;/li&gt;
&lt;li&gt;If you use an app to manage your 2FA keys, enable cloud backup, so that you don&apos;t lose your keys in the event you lose your phone.&lt;/li&gt;
&lt;li&gt;If you use a custom email domain to sign in, &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/manage-members/dashboard-sso/&quot;&gt;configure SSO&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you use a public email domain like Gmail or Hotmail, you can also use social login with Apple, GitHub, or Google to sign in.&lt;/li&gt;
&lt;li&gt;If you manage a Cloudflare account for work:
&lt;ul&gt;
&lt;li&gt;Have at least two administrators in case one of them unexpectedly leaves your company.&lt;/li&gt;
&lt;li&gt;Use SCIM to automate permissions management for members in your Cloudflare account.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 30 Oct 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Cloudflare Fundamentals - Revamped Member Management UI</title><link>https://developers.cloudflare.com/changelog/post/2025-10-30-member-management-improvements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-30-member-management-improvements/</guid><description>&lt;p&gt;As Cloudflare&apos;s platform has grown, so has the need for precise, role-based access control. We’ve redesigned the Member Management experience in the Dashboard to help administrators more easily discover, assign, and refine permissions for specific principals.&lt;/p&gt;
&lt;h4&gt;What&apos;s New&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Refreshed member invite flow&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We overhauled the Invite Members UI to simplify inviting users and assigning permissions.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-10-30-invite-experience.B7F3VQ_y_2q5f79.webp&quot; alt=&quot;Updated Invite Flow UX&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;strong&gt;Refreshed Members Overview Page&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We&apos;ve updated the Members Overview Page to clearly display:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Member 2FA status&lt;/li&gt;
&lt;li&gt;Which members hold Super Admin privileges&lt;/li&gt;
&lt;li&gt;API access settings per member&lt;/li&gt;
&lt;li&gt;Member onboarding state (accepted vs pending invite)&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-10-30-member-management-screen.BLc2lx98_2sRE7I.webp&quot; alt=&quot;Updated Member Management Overview&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;strong&gt;New Member Permission Policies Details View&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We&apos;ve created a new member details screen that shows all permission policies associated with a member; including policies inherited from group associations to make it easier for members to understand the effective permissions they have.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-10-30-permission-policies-screen.pMj53si2_2jP7PX.webp&quot; alt=&quot;Updated Permission Policies Details Screen&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;strong&gt;Improved Member Permission Workflow&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We redesigned the permission management experience to make it faster and easier for administrators to review roles and grant access.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-10-30-permission-policies-screen.pMj53si2_2jP7PX.webp&quot; alt=&quot;Updated Member Permission Management UX&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;strong&gt;Account-scoped Policies Restrictions Relaxed&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Previously, customers could only associate a single account-scoped policy with a member. We&apos;ve relaxed this restriction, and now Administrators can now assign multiple account-scoped policies to the same member; bringing policy assignment behavior in-line with user-groups and providing greater flexibility in managing member permissions.&lt;/p&gt;</description><pubDate>Thu, 30 Oct 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Rules - New TCP-based fields available in Rulesets</title><link>https://developers.cloudflare.com/changelog/post/2025-10-30-tcp-rtt-and-tcp-fields/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-30-tcp-rtt-and-tcp-fields/</guid><description>&lt;h4&gt;Build rules based on TCP transport and latency&lt;/h4&gt;
&lt;p&gt;Cloudflare now provides two new request fields in the Ruleset engine that let you make decisions based on whether a request used TCP and the measured TCP round-trip time between the client and Cloudflare. These fields help you understand protocol usage across your traffic and build policies that respond to network performance. For example, you can distinguish TCP from QUIC traffic or route high latency requests to alternative origins when needed.&lt;/p&gt;
&lt;hr&gt;
&lt;h4&gt;New fields&lt;/h4&gt;




















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Field&lt;/th&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;cf.edge.client_tcp&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Boolean&lt;/td&gt;&lt;td&gt;Indicates whether the request used TCP. A value of true means the client connected using TCP instead of QUIC.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;cf.timings.client_tcp_rtt_msec&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Number&lt;/td&gt;&lt;td&gt;Reports the smoothed TCP round-trip time between the client and Cloudflare in milliseconds. For example, a value of 20 indicates roughly twenty milliseconds of RTT.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Example filter expression:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cf.edge.client_tcp &amp;#x26;&amp;#x26; cf.timings.client_tcp_rtt_msec &amp;#x3C; 100&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;More information can be found in the Rules language &lt;a href=&quot;https://developers.cloudflare.com/ruleset-engine/rules-language/fields/reference/&quot;&gt;fields reference&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 30 Oct 2025 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>WAF - WAF Release - 2025-10-30 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-10-30-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-30-emergency-waf-release/</guid><description>&lt;p&gt;This week’s release introduces a new detection signature that enhances coverage for a critical vulnerability in Oracle E-Business Suite, tracked as CVE-2025-61884.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The flaw is easily exploitable and allows an unauthenticated attacker with network access to compromise Oracle Configurator, which can grant access to sensitive resources and configuration data. The affected versions include 12.2.3 through 12.2.14.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Successful exploitation of CVE-2025-61884 may result in unauthorized access to critical business data or full exposure of information accessible through Oracle Configurator. Administrators are strongly advised to apply vendor&apos;s patches and recommended mitigations to reduce this exposure.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;2749f13f8cb34a3dbd49c8c48827402f &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Oracle E-Business Suite - SSRF - CVE:CVE-2025-61884&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Thu, 30 Oct 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Access Workers preview URLs from the Build details page</title><link>https://developers.cloudflare.com/changelog/post/2025-10-30-builds-preview/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-30-builds-preview/</guid><description>&lt;p&gt;You can now access &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/previews/&quot;&gt;preview URLs&lt;/a&gt; directly from the build details page, making it easier to test your changes when reviewing builds in the dashboard.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/builds-preview-button.CjGnhkt7_kOMMe.webp&quot; alt=&quot;preview button&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;strong&gt;What&apos;s new&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;Preview&lt;/strong&gt; button now appears in the top-right corner of the build details page for successful builds&lt;/li&gt;
&lt;li&gt;Click it to instantly open the latest preview URL&lt;/li&gt;
&lt;li&gt;Matches the same experience you&apos;re familiar with from Pages&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 30 Oct 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Access - Access private hostname applications support all ports/protocols</title><link>https://developers.cloudflare.com/changelog/post/2025-10-28-access-application-support-for-all-ports-and-protocols/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-28-access-application-support-for-all-ports-and-protocols/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/applications/non-http/self-hosted-private-app/&quot;&gt;Cloudflare Access for private hostname applications&lt;/a&gt; can now secure traffic on all ports and protocols.&lt;/p&gt;
&lt;p&gt;Previously, applying Zero Trust policies to private applications required the application to use HTTPS on port &lt;code&gt;443&lt;/code&gt; and support Server Name Indicator (SNI).&lt;/p&gt;
&lt;p&gt;This update removes that limitation. As long as the application is reachable via a Cloudflare off-ramp, you can now enforce your critical security controls — like single sign-on (SSO), MFA, device posture, and variable session lengths — to any private application. This allows you to extend Zero Trust security to services like SSH, RDP, internal databases, and other non-HTTPS applications.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/internal_private_app_any_port.DNXnEy0u_2rybRJ.webp&quot; alt=&quot;Example private application on non-443 port&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;For example, you can now create a self-hosted application in Access for &lt;code&gt;ssh.testapp.local&lt;/code&gt; running on port &lt;code&gt;22&lt;/code&gt;. You can then build a policy that only allows engineers in your organization to connect after they pass an SSO/MFA check and are using a corporate device.&lt;/p&gt;
&lt;p&gt;This feature is generally available across all plans.&lt;/p&gt;</description><pubDate>Tue, 28 Oct 2025 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>AI Search - Reranking and API-based system prompt configuration in AI Search</title><link>https://developers.cloudflare.com/changelog/post/2025-10-27-ai-search-reranking-system-prompt/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-27-ai-search-reranking-system-prompt/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-search/&quot;&gt;AI Search&lt;/a&gt; now supports reranking for improved retrieval quality and allows you to set the system prompt directly in your API requests.&lt;/p&gt;
&lt;h4&gt;Rerank for more relevant results&lt;/h4&gt;
&lt;p&gt;You can now enable &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/reranking/&quot;&gt;reranking&lt;/a&gt; to reorder retrieved documents based on their semantic relevance to the user’s query. Reranking helps improve accuracy, especially for large or noisy datasets where vector similarity alone may not produce the optimal ordering.&lt;/p&gt;
&lt;p&gt;You can enable and configure reranking in the dashboard or directly in your API requests:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;answer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;autorag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;my-autorag&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;aiSearch&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;query&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;How do I train a llama to deliver coffee?&quot;&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;model&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;@cf/meta/llama-3.3-70b-instruct-fp8-fast&quot;&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;reranking&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;enabled&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&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;model&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;@cf/baai/bge-reranker-base&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;/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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4&gt;Set system prompts in API&lt;/h4&gt;
&lt;p&gt;Previously, &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/system-prompt/&quot;&gt;system prompts&lt;/a&gt; could only be configured in the dashboard. You can now define them directly in your API requests, giving you per-query control over behavior. For example:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Dynamically set query and system prompt in AI Search&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAnswer&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tone&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;systemPrompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`You are a &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;tone&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; assistant.`&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;autorag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;my-autorag&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;aiSearch&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;query&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&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;system_prompt&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;systemPrompt&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Example usage&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;What is Cloudflare?&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tone&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;friendly&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;answer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getAnswer&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tone&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;answer&lt;/span&gt;&lt;span&gt;)&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;Learn more about &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/reranking/&quot;&gt;Reranking&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/system-prompt/&quot;&gt;System Prompt&lt;/a&gt; in AI Search.&lt;/p&gt;</description><pubDate>Tue, 28 Oct 2025 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>CASB - CASB introduces new granular roles</title><link>https://developers.cloudflare.com/changelog/post/2025-10-28-casb-roles/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-28-casb-roles/</guid><description>&lt;p&gt;Cloudflare CASB (Cloud Access Security Broker) now supports two new granular roles to provide more precise access control for your security teams:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare CASB Read:&lt;/strong&gt; Provides read-only access to view CASB findings and dashboards. This role is ideal for security analysts, compliance auditors, or team members who need visibility without modification rights.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare CASB:&lt;/strong&gt; Provides full administrative access to configure and manage all aspects of the CASB product.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These new roles help you better enforce the principle of least privilege. You can now grant specific members access to CASB security findings without assigning them broader permissions, such as the &lt;strong&gt;Super Administrator&lt;/strong&gt; or &lt;strong&gt;Administrator&lt;/strong&gt; roles.&lt;/p&gt;
&lt;p&gt;To enable &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/dlp-profiles/&quot;&gt;Data Loss Prevention (DLP)&lt;/a&gt;, scans in CASB, account members will need the &lt;strong&gt;Cloudflare Zero Trust&lt;/strong&gt; role.&lt;/p&gt;
&lt;p&gt;You can find these new roles when inviting members or creating API tokens in the Cloudflare dashboard under &lt;strong&gt;Manage Account&lt;/strong&gt; &gt; &lt;strong&gt;Members&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;To learn more about managing roles and permissions, refer to the &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/manage-members/roles/&quot;&gt;Manage account members and roles documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 28 Oct 2025 00:00:00 GMT</pubDate><product>CASB</product><category>CASB</category></item><item><title>Gateway - New Application Categories added for HTTP Traffic Management</title><link>https://developers.cloudflare.com/changelog/post/gateway-application-categories-added/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/gateway-application-categories-added/</guid><description>&lt;p&gt;To give you precision and flexibility while creating policies to block unwanted traffic, we are introducing new, more granular application categories in the Gateway product.&lt;/p&gt;
&lt;p&gt;We have added the following categories to provide more precise organization and allow for finer-grained policy creation, designed around how users interact with different types of applications:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Business&lt;/li&gt;
&lt;li&gt;Education&lt;/li&gt;
&lt;li&gt;Entertainment &amp;#x26; Events&lt;/li&gt;
&lt;li&gt;Food &amp;#x26; Drink&lt;/li&gt;
&lt;li&gt;Health &amp;#x26; Fitness&lt;/li&gt;
&lt;li&gt;Lifestyle&lt;/li&gt;
&lt;li&gt;Navigation&lt;/li&gt;
&lt;li&gt;Photography &amp;#x26; Graphic Design&lt;/li&gt;
&lt;li&gt;Travel&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The new categories are live now, but we are providing a transition period for existing applications to be fully remapped to these new categories.&lt;/p&gt;
&lt;p&gt;The full remapping will be completed by January 30, 2026.&lt;/p&gt;
&lt;p&gt;We encourage you to use this time to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Review the new category structure.&lt;/li&gt;
&lt;li&gt;Identify and adjust any existing HTTP policies that reference older categories to ensure a smooth transition.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information on creating HTTP policies, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/application-app-types/&quot;&gt;Applications and app types&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 28 Oct 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>Logs - Azure Sentinel Connector</title><link>https://developers.cloudflare.com/changelog/post/2025-10-27-sentinel-connector/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-27-sentinel-connector/</guid><description>&lt;p&gt;Logpush now supports integration with &lt;a href=&quot;https://www.microsoft.com/en-us/security/business/siem-and-xdr/microsoft-sentinel&quot; target=&quot;_blank&quot;&gt;Microsoft Sentinel&lt;/a&gt;.The new Azure Sentinel Connector built on Microsoft’s Codeless Connector Framework (CCF), is now avaialble. This solution replaces the previous Azure Functions-based connector, offering significant improvements in security, data control, and ease of use for customers. Logpush customers can send logs to Azure Blob Storage and configure this new Sentinel Connector to ingest those logs directly into Microsoft Sentinel.&lt;/p&gt;
&lt;p&gt;This upgrade significantly streamlines log ingestion, improves security, and provides greater control:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Simplified Implementation: Easier for engineering teams to set up and maintain.&lt;/li&gt;
&lt;li&gt;Cost Control: New support for Data Collection Rules (DCRs) allows you to filter and transform logs at ingestion time, offering potential cost savings.&lt;/li&gt;
&lt;li&gt;Enhanced Security: CCF provides a higher level of security compared to the older Azure Functions connector.&lt;/li&gt;
&lt;li&gt;ata Lake Integration: Includes native integration with Data Lake.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Find the new solution &lt;a href=&quot;https://marketplace.microsoft.com/en-us/product/azure-application/cloudflare.azure-sentinel-solution-cloudflare-ccf?tab=Overview&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; and refer to the &lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-integrations/sentinel/#supported-logs:~:text=WorkBook%20fields,-Analytic%20rules&quot; target=&quot;_blank&quot;&gt;Cloudflare&apos;s developer documention&lt;/a&gt;for more information on the connector, including setup steps, supported logs and Microsfot&apos;s resources.&lt;/p&gt;</description><pubDate>Mon, 27 Oct 2025 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>Radar - TLD Insights in Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2025-10-27-radar-tld-insights/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-27-radar-tld-insights/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; now introduces Top-Level Domain (TLD) insights, providing visibility into popularity based on the DNS magnitude metric, detailed TLD information including its type, manager, DNSSEC support, RDAP support, and WHOIS data, and trends such as DNS query volume and geographic distribution observed by the &lt;a href=&quot;https://developers.cloudflare.com/1.1.1.1/&quot;&gt;1.1.1.1&lt;/a&gt; DNS resolver.&lt;/p&gt;
&lt;p&gt;The following dimensions were added to the Radar DNS API, specifically, to the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/dns/methods/summary_v2/&quot;&gt;&lt;code&gt;/dns/summary/{dimension}&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/dns/methods/timeseries_groups_v2/&quot;&gt;&lt;code&gt;/dns/timeseries_groups/{dimension}&lt;/code&gt;&lt;/a&gt; endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tld&lt;/code&gt;: Top-level domain extracted from DNS queries; can also be used as a filter.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tld_dns_magnitude&lt;/code&gt;: Top-level domain ranking by &lt;a href=&quot;https://developers.cloudflare.com/radar/glossary#dns-magnitude&quot;&gt;DNS magnitude&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And the following endpoints were added:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/tlds/methods/list/&quot;&gt;&lt;code&gt;/tlds&lt;/code&gt;&lt;/a&gt; - Lists all TLDs.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/tlds/methods/get/&quot;&gt;&lt;code&gt;/tlds/{tld}&lt;/code&gt;&lt;/a&gt; - Retrieves information about a specific TLD.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/tld-ranking-by-dns-magnitude.DbmrooPK_1wHWG1.webp&quot; alt=&quot;Screenshot of the TLD ranking by DNS magnitude&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Learn more about the new Radar DNS insights in our &lt;a href=&quot;https://blog.cloudflare.com/introducing-tld-insights-on-cloudflare-radar/&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt;, and check out the &lt;a href=&quot;https://radar.cloudflare.com/tlds&quot; target=&quot;_blank&quot;&gt;new Radar page&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 27 Oct 2025 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>Security Center - Cloudforce One RFI tokens are now visible in the dashboard</title><link>https://developers.cloudflare.com/changelog/post/2025-10-27-rfi-tokens-in-dash/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-27-rfi-tokens-in-dash/</guid><description>&lt;p&gt;The Requests for Information (RFI) dashboard now shows users the number of tokens used by each submitted RFI to better understand usage of tokens and how they relate to each request submitted.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-10-24RFITokens.DPm1e8uC_2g3fE3.webp&quot; alt=&quot;Cloudforce One RFI tokens&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;What’s new:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Users can now see the number of tokens used for a submitted request for information.&lt;/li&gt;
&lt;li&gt;Users can see the remaining tokens allocated to their account for the quarter.&lt;/li&gt;
&lt;li&gt;Users can only select the Routine priority for the &lt;code&gt;Strategic Threat Research&lt;/code&gt; request type.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cloudforce One subscribers can try it now in &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/security-center/threat-intelligence/requests&quot; target=&quot;_blank&quot;&gt;Application Security &gt; Threat Intelligence &gt; Requests for Information&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 27 Oct 2025 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>WAF - WAF Release - 2025-10-24 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-10-24-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-24-emergency-waf-release/</guid><description>&lt;p&gt;This week’s release introduces a new detection signature that enhances coverage for a critical vulnerability in Windows Server Update Services (WSUS), tracked as CVE-2025-59287.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The vulnerability allows unauthenticated attackers to potentially achieve remote code execution. The updated detection logic strengthens defenses by improving resilience against exploitation attempts targeting this flaw.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Successful exploitation of CVE-2025-59287 could enable attackers to hijack sessions, execute arbitrary commands, exfiltrate sensitive data, and disrupt storefront operations. These actions pose significant confidentiality and integrity risks to affected environments. Administrators should apply vendor patches immediately to mitigate exposure.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5eaeb5ea6e5a4bce867eb3ffbd72ba08 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Windows Server - Deserialization - CVE:CVE-2025-59287&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Fri, 24 Oct 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Automatic resource provisioning for KV, R2, and D1</title><link>https://developers.cloudflare.com/changelog/post/2025-10-24-automatic-resource-provisioning/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-24-automatic-resource-provisioning/</guid><description>&lt;p&gt;Previously, if you wanted to develop or deploy a worker with attached resources, you&apos;d have to first manually create the desired resources. Now, if your Wrangler configuration file includes a KV namespace, D1 database, or R2 bucket that does not yet exist on your account, you can develop locally and deploy your application seamlessly, without having to run additional commands.&lt;/p&gt;
&lt;p&gt;Automatic provisioning is launching as an open beta, and we&apos;d love to hear your feedback to help us make improvements! It currently works for KV, R2, and D1 bindings. You can disable the feature using the &lt;code&gt;--no-x-provision&lt;/code&gt; flag.&lt;/p&gt;
&lt;p&gt;To use this feature, update to wrangler@4.45.0 and add bindings to your config file &lt;em&gt;without&lt;/em&gt; resource IDs e.g.:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;kv_namespaces&lt;/span&gt;&lt;span&gt;&quot;&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;span&gt;&quot;&lt;/span&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MY_KV&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;d1_databases&lt;/span&gt;&lt;span&gt;&quot;&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;span&gt;&quot;&lt;/span&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MY_DB&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;r2_buckets&lt;/span&gt;&lt;span&gt;&quot;&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;span&gt;&quot;&lt;/span&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MY_R2&quot;&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;&lt;code&gt;wrangler dev&lt;/code&gt; will then automatically create these resources for you locally, and on your next run of &lt;code&gt;wrangler deploy&lt;/code&gt;, Wrangler will call the Cloudflare API to create the requested resources and link them to your Worker.&lt;/p&gt;
&lt;p&gt;Though resource IDs will be automatically written back to your Wrangler config file after resource creation, resources will stay linked across future deploys even without adding the resource IDs to the config file. This is especially useful for shared templates, which now no longer need to include account-specific resource IDs when adding a binding.&lt;/p&gt;</description><pubDate>Fri, 24 Oct 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Build TanStack Start apps with the Cloudflare Vite plugin</title><link>https://developers.cloudflare.com/changelog/post/2025-10-24-tanstack-start/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-24-tanstack-start/</guid><description>&lt;p&gt;The &lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/&quot;&gt;Cloudflare Vite plugin&lt;/a&gt; now supports &lt;a href=&quot;https://tanstack.com/start/&quot; target=&quot;_blank&quot;&gt;TanStack Start&lt;/a&gt; apps.
Get started with new or existing projects.&lt;/p&gt;
&lt;h4&gt;New projects&lt;/h4&gt;
&lt;p&gt;Create a new TanStack Start project that uses the Cloudflare Vite plugin via the &lt;code&gt;create-cloudflare&lt;/code&gt; CLI:&lt;/p&gt;
 &lt;div&gt; &lt;div&gt;  &lt;/div&gt; &lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; create cloudflare@latest -- my-tanstack-start-app --framework=tanstack-start&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;&lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; create cloudflare my-tanstack-start-app --framework=tanstack-start&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;&lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; create cloudflare@latest my-tanstack-start-app --framework=tanstack-start&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt;  
&lt;h4&gt;Existing projects&lt;/h4&gt;
&lt;p&gt;Migrate an existing TanStack Start project to use the Cloudflare Vite plugin:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install &lt;code&gt;@cloudflare/vite-plugin&lt;/code&gt; and &lt;code&gt;wrangler&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
 &lt;div&gt; &lt;div&gt;  &lt;/div&gt; &lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; i -D @cloudflare/vite-plugin wrangler&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;&lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; add -D @cloudflare/vite-plugin wrangler&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;&lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; add -D @cloudflare/vite-plugin wrangler&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;&lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;bun&lt;/span&gt;&lt;span&gt; add -d @cloudflare/vite-plugin wrangler&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt;  
&lt;ol&gt;
&lt;li&gt;Add the Cloudflare plugin to your Vite config&lt;/li&gt;
&lt;/ol&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;vite&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tanstackStart&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@tanstack/react-start/plugin/vite&quot;&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;import &lt;/span&gt;&lt;span&gt;viteReact&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;@vitejs/plugin-react&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&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;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/vite-plugin&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&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;plugins&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;cloudflare&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; viteEnvironment&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ssr&quot;&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;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;tanstackStart&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;viteReact&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;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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Add your Worker config file&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;$schema&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./node_modules/wrangler/config-schema.json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-tanstack-start-app&quot;&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;// Set this to today&apos;s date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;compatibility_date&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2026-04-03&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;compatibility_flags&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;nodejs_compat&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;@tanstack/react-start/server-entry&quot;&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$schema&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./node_modules/wrangler/config-schema.json&quot;&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;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-tanstack-start-app&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Set this to today&apos;s date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;compatibility_date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2026-04-03&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;compatibility_flags&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;span&gt; &lt;/span&gt;&lt;span&gt;&quot;nodejs_compat&quot;&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;main&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;@tanstack/react-start/server-entry&quot;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;ol&gt;
&lt;li&gt;Modify the scripts in your &lt;code&gt;package.json&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;scripts&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;vite dev&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;vite build &amp;#x26;&amp;#x26; tsc --noEmit&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;start&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;node .output/server/index.mjs&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;preview&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;vite preview&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;npm run build &amp;#x26;&amp;#x26; wrangler deploy&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;cf-typegen&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;wrangler types&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;/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;See the &lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/web-apps/tanstack-start/&quot;&gt;TanStack Start framework guide&lt;/a&gt; for more info.&lt;/p&gt;</description><pubDate>Fri, 24 Oct 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>WAF - WAF Release - 2025-10-23 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-10-23-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-23-emergency-waf-release/</guid><description>&lt;p&gt;This week highlights enhancements to detection signatures improving coverage for vulnerabilities in Adobe Commerce and Magento Open Source, linked to CVE-2025-54236.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This vulnerability allows unauthenticated attackers to take over customer accounts through the Commerce REST API and, in certain configurations, may lead to remote code execution. The latest update enhances detection logic to provide more resilient protection against exploitation attempts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Adobe Commerce (CVE-2025-54236): Exploitation may allow attackers to hijack sessions, execute arbitrary commands, steal data, and disrupt storefronts, resulting in confidentiality and integrity risks for merchants. Administrators are strongly encouraged to apply vendor patches without delay.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;6e04fa2b9eb34fb088034d3fc6ef59a1 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Adobe Commerce - Remote Code Execution - CVE:CVE-2025-54236&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Thu, 23 Oct 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers AI - Workers AI Markdown Conversion: New endpoint to list supported formats</title><link>https://developers.cloudflare.com/changelog/post/2025-10-23-new-markdown-conversion-endpoint/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-23-new-markdown-conversion-endpoint/</guid><description>&lt;p&gt;Developers can now programmatically retrieve a list of all file formats supported by the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/features/markdown-conversion/&quot;&gt;Markdown Conversion utility&lt;/a&gt; in Workers AI.&lt;/p&gt;
&lt;p&gt;You can use the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/configuration/bindings/&quot;&gt;&lt;code&gt;env.AI&lt;/code&gt;&lt;/a&gt; binding:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toMarkdown&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;supported&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;Or call the REST API:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/tomarkdown/supported&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Authorization: Bearer {API_TOKEN}&apos;&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;Both return a list of file formats that users can convert into Markdown:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;.pdf&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;mimeType&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/pdf&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;.jpeg&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;mimeType&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;image/jpeg&quot;&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;Learn more about our &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/features/markdown-conversion/&quot;&gt;Markdown Conversion utility&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 23 Oct 2025 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>Workers - Workers Preview URL default behavior now matches your workers.dev setting</title><link>https://developers.cloudflare.com/changelog/post/2025-10-23-preview-url-default-behavior/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-23-preview-url-default-behavior/</guid><description>&lt;p&gt;We have updated the default behavior for Cloudflare Workers &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/previews/&quot;&gt;Preview URLs&lt;/a&gt;. &lt;strong&gt;Going forward, if a preview URL setting is not &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/previews/#toggle-preview-urls-enable-or-disable&quot;&gt;explicitly configured&lt;/a&gt; during deployment, its default behavior will automatically match the setting of your &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/routing/workers-dev/&quot;&gt;&lt;code&gt;workers.dev&lt;/code&gt; subdomain&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This change is intended to provide a more intuitive and secure experience by aligning your preview URL&apos;s default state with your &lt;code&gt;workers.dev&lt;/code&gt; configuration to prevent cases where a preview URL might remain public even after you disabled your &lt;code&gt;workers.dev&lt;/code&gt; route.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What this means for you:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;If neither setting is configured:&lt;/strong&gt; both the workers.dev route and the preview URL will default to enabled&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If your workers.dev route is enabled and you do not explicitly set Preview URLs to enabled or disabled:&lt;/strong&gt; Preview URLs will default to enabled&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If your workers.dev route is disabled and you do not explicitly set Preview URLs to enabled or disabled:&lt;/strong&gt; Preview URLs will default to disabled&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can override the default setting by explicitly enabling or disabling the preview URL in your Worker&apos;s configuration through the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/scripts/subresources/subdomain/&quot;&gt;API&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/previews/#from-the-dashboard&quot;&gt;Dashboard&lt;/a&gt;, or &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/previews/#from-the-wrangler-configuration-file&quot;&gt;Wrangler&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wrangler Version Behavior&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The default behavior depends on the version of Wrangler you are using. This new logic applies to the latest version. Here is a summary of the behavior across different versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Before v4.34.0:&lt;/strong&gt; Preview URLs defaulted to enabled, regardless of the workers.dev setting.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;v4.34.0 up to (but not including) v4.44.0:&lt;/strong&gt; Preview URLs defaulted to disabled, regardless of the workers.dev setting.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;v4.44.0 or later:&lt;/strong&gt; Preview URLs now default to matching your workers.dev setting.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Why we’re making this change&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In July, &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-07-23-workers-preview-urls/&quot;&gt;we introduced preview URLs to Workers&lt;/a&gt;, which let you preview code changes before deploying to production. This made disabling your Worker’s workers.dev URL an ambiguous action — the preview URL, served as a subdomain of &lt;code&gt;workers.dev&lt;/code&gt; (ex: &lt;code&gt;preview-id-worker-name.account-name.workers.dev&lt;/code&gt;) would still be live even if you had disabled your Worker’s &lt;code&gt;workers.dev&lt;/code&gt; route. If you misinterpreted what it meant to disable your &lt;code&gt;workers.dev&lt;/code&gt; route, you might unintentionally leave preview URLs enabled when you didn’t mean to, and expose them to the public Internet.&lt;/p&gt;
&lt;p&gt;To address this, we made a &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-09-17-update-preview-url-setting/&quot;&gt;one-time update&lt;/a&gt; to disable preview URLs on existing Workers that had their workers.dev route disabled and changed the default behavior to be disabled for all new deployments where a preview URL setting was not explicitly configured.&lt;/p&gt;
&lt;p&gt;While this change helped secure many customers, it was disruptive for customers who keep their &lt;code&gt;workers.dev&lt;/code&gt; route enabled and actively use the preview functionality, as it now required them to explicitly enable preview URLs on every redeployment.This new, more intuitive behavior ensures that your preview URL settings align with your &lt;code&gt;workers.dev&lt;/code&gt; configuration by default, providing a more secure and predictable experience.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Securing access to &lt;code&gt;workers.dev&lt;/code&gt; and preview URL endpoints&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To further secure your &lt;code&gt;workers.dev&lt;/code&gt; subdomain and preview URL, you can &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-10-03-one-click-access-for-workers/&quot;&gt;enable Cloudflare Access with a single click&lt;/a&gt; in your Worker&apos;s settings to limit access to specific users or groups.&lt;/p&gt;</description><pubDate>Thu, 23 Oct 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>AI Crawl Control - New Robots.txt tab for tracking crawler compliance</title><link>https://developers.cloudflare.com/changelog/post/2025-10-21-track-robots-txt/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-21-track-robots-txt/</guid><description>&lt;p&gt;AI Crawl Control now includes a &lt;strong&gt;Robots.txt&lt;/strong&gt; tab that provides insights into how AI crawlers interact with your &lt;code&gt;robots.txt&lt;/code&gt; files.&lt;/p&gt;
&lt;h4&gt;What&apos;s new&lt;/h4&gt;
&lt;p&gt;The Robots.txt tab allows you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Monitor the health status of &lt;code&gt;robots.txt&lt;/code&gt; files across all your hostnames, including HTTP status codes, and identify hostnames that need a &lt;code&gt;robots.txt&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;Track the total number of requests to each &lt;code&gt;robots.txt&lt;/code&gt; file, with breakdowns of successful versus unsuccessful requests.&lt;/li&gt;
&lt;li&gt;Check whether your &lt;code&gt;robots.txt&lt;/code&gt; files contain &lt;a href=&quot;https://contentsignals.org/&quot; target=&quot;_blank&quot;&gt;Content Signals&lt;/a&gt; directives for AI training, search, and AI input.&lt;/li&gt;
&lt;li&gt;Identify crawlers that request paths explicitly disallowed by your &lt;code&gt;robots.txt&lt;/code&gt; directives, including the crawler name, operator, violated path, specific directive, and violation count.&lt;/li&gt;
&lt;li&gt;Filter &lt;code&gt;robots.txt&lt;/code&gt; request data by crawler, operator, category, and custom time ranges.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Take action&lt;/h4&gt;
&lt;p&gt;When you identify non-compliant crawlers, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Block the crawler in the &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/manage-ai-crawlers/&quot;&gt;Crawlers tab&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Create custom &lt;a href=&quot;https://developers.cloudflare.com/waf/&quot;&gt;WAF rules&lt;/a&gt; for path-specific security&lt;/li&gt;
&lt;li&gt;Use &lt;a href=&quot;https://developers.cloudflare.com/rules/url-forwarding/&quot;&gt;Redirect Rules&lt;/a&gt; to guide crawlers to appropriate areas of your site&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get started, go to &lt;strong&gt;AI Crawl Control&lt;/strong&gt; &gt; &lt;strong&gt;Robots.txt&lt;/strong&gt; in the Cloudflare dashboard. Learn more in the &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/track-robots-txt/&quot;&gt;Track robots.txt documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 21 Oct 2025 00:00:00 GMT</pubDate><product>AI Crawl Control</product><category>AI Crawl Control</category></item><item><title>Gateway - Schedule DNS policies from the UI</title><link>https://developers.cloudflare.com/changelog/post/2025-10-20-schedule-dns-policies-from-the-ui/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-20-schedule-dns-policies-from-the-ui/</guid><description>&lt;p&gt;Admins can now create &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/dns-policies/timed-policies/&quot;&gt;scheduled DNS policies&lt;/a&gt; directly from the Zero Trust dashboard, without using the API. You can configure policies to be active during specific, recurring times, such as blocking social media during business hours or gaming sites on school nights.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Preset Schedules&lt;/strong&gt;: Use built-in templates for common scenarios like Business Hours, School Days, Weekends, and more.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom Schedules&lt;/strong&gt;: Define your own schedule with specific days and up to three non-overlapping time ranges per day.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Timezone Control&lt;/strong&gt;: Choose to enforce a schedule in a specific timezone (for example, US Eastern) or based on the local time of each user.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Combined with Duration&lt;/strong&gt;: Policies can have both a schedule and a duration. If both are set, the duration&apos;s expiration takes precedence.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can see the flow in the demo GIF:&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/gateway-dns-scheduled-policies-ui.Cf4l1OTE_Z9szVM.webp&quot; alt=&quot;Schedule DNS policies demo&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;This update makes time-based DNS policies accessible to all Gateway customers, removing the technical barrier of the API.&lt;/p&gt;</description><pubDate>Mon, 20 Oct 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>WAF - WAF Release - 2025-10-20</title><link>https://developers.cloudflare.com/changelog/post/2025-10-20-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-20-waf-release/</guid><description>&lt;p&gt;This week’s update introduces an enhanced rule that expands detection coverage for a critical vulnerability in Oracle E-Business Suite. It also improves an existing rule to provide more reliable coverage in request processing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;New WAF rule deployed for Oracle E-Business Suite (CVE-2025-61882) to block  unauthenticated attacker&apos;s network access via HTTP to compromise Oracle Concurrent Processing. If successfully exploited, this vulnerability may result in remote code execution.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Successful exploitation of CVE-2025-61882 allows unauthenticated attackers to execute arbitrary code remotely by chaining multiple weaknesses, enabling lateral movement into internal services, data exfiltration, and large-scale extortionware deployment within Oracle E-Business Suite environments.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;933fc13202cd4e8ba498c0f32b4101ab &lt;/td&gt;&lt;td&gt;100598A&lt;/td&gt;&lt;td&gt;Remote Code Execution - Common Bash Bypass - Beta&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This rule is merged into the original rule &quot;Remote Code Execution - Common Bash Bypass&quot; (ID: f8238867ed3e4d3a9a7b731a50cec478 )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;185b5df42d1e44e0aeb8f8b8a1118614 &lt;/td&gt;&lt;td&gt;100916A&lt;/td&gt;&lt;td&gt;Oracle E-Business Suite - Remote Code Execution - CVE:CVE-2025-61882 - 2&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;646bccf7e9dc46918a4150d6c22b51d3 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;HTTP Truncated&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 20 Oct 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Email security - On-Demand Security Report</title><link>https://developers.cloudflare.com/changelog/post/2025-10-16-on-demand-security-report/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-16-on-demand-security-report/</guid><description>&lt;p&gt;You can now generate on-demand security reports directly from the Cloudflare dashboard. This new feature provides a comprehensive overview of your email security posture, making it easier than ever to demonstrate the value of Cloudflare’s Email security to executives and other decision makers.&lt;/p&gt;
&lt;p&gt;These reports offer several key benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Executive Summary:&lt;/strong&gt; Quickly view the performance of Email security with a high-level executive summary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Actionable Insights:&lt;/strong&gt; Dive deep into trend data, breakdowns of threat types, and analysis of top targets to identify and address vulnerabilities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configuration Transparency:&lt;/strong&gt; Gain a clear view of your policy, submission, and domain configurations to ensure optimal setup.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Account Takeover Risks:&lt;/strong&gt; Get a snapshot of your M365 risky users (requires a Microsoft Entra ID P2 license and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/integrations/cloud-and-saas/microsoft-365/&quot; target=&quot;_blank&quot;&gt;M365 SaaS integration&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/report.CbkPa8Jt_Z1xMpIx.webp&quot; alt=&quot;Report&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;This feature is available across the following Email security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Advantage&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 17 Oct 2025 22:14:43 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>Security Center - New Application Security reports (Closed Beta)</title><link>https://developers.cloudflare.com/changelog/post/2025-10-17-app-sec-reports/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-17-app-sec-reports/</guid><description>&lt;p&gt;Cloudflare&apos;s new &lt;strong&gt;Application Security report&lt;/strong&gt;, currently in Closed Beta, is now available in the dashboard.&lt;/p&gt;
&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/security-center/reports&quot; target=&quot;_blank&quot;&gt;  Go to &lt;strong&gt;Security reports&lt;/strong&gt;  &lt;/a&gt;
&lt;p&gt;The reports are generated monthly and provide cyber security insights trends for all of the Enterprise zones in your Cloudflare account.&lt;/p&gt;
&lt;p&gt;The reports also include an industry benchmark, comparing your cyber security landscape to peers in your industry.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-10-17-application-security-report-mock-data.Cz0-WuoX_15MbLt.webp&quot; alt=&quot;Application Security report mock data&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Learn more about the reports by referring to the &lt;a href=&quot;https://developers.cloudflare.com/security-center/app-security-reports/&quot;&gt;Security Reports documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Use the feedback survey link at the top of the page to help us improve the reports.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-10-17-report-feedback-survey.DPmUlWh2_Z1nYBN6.webp&quot; alt=&quot;Application Security report survey&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Fri, 17 Oct 2025 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>WAF - New detections released for WAF managed rulesets</title><link>https://developers.cloudflare.com/changelog/post/2025-10-17-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-17-emergency-waf-release/</guid><description>&lt;p&gt;This week we introduced several new detections across Cloudflare Managed Rulesets, expanding coverage for high-impact vulnerability classes such as SSRF, SQLi, SSTI, Reverse Shell attempts, and Prototype Pollution. These rules aim to improve protection against attacker-controlled payloads that exploit misconfigurations or unvalidated input in web applications.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;New detections added for multiple exploit categories:&lt;/p&gt;
&lt;p&gt;SSRF (Server-Side Request Forgery) — new rules targeting both local and cloud metadata abuse patterns (Beta).&lt;/p&gt;
&lt;p&gt;SQL Injection (SQLi) — rules for common patterns, sleep/time-based injections, and string/wait function exploitation across headers and URIs.&lt;/p&gt;
&lt;p&gt;SSTI (Server-Side Template Injection) — arithmetic-based probe detections introduced across URI, header, and body fields.&lt;/p&gt;
&lt;p&gt;Reverse Shell and XXE payloads — enhanced heuristics for command execution and XML external entity misuse.&lt;/p&gt;
&lt;p&gt;Prototype Pollution — new Beta rule identifying common JSON payload structures used in object prototype poisoning.&lt;/p&gt;
&lt;p&gt;PHP Wrapper Injection and HTTP Parameter Pollution detections — to catch path traversal and multi-parameter manipulation attempts.&lt;/p&gt;
&lt;p&gt;Anomaly Header Checks — detecting CRLF injection attempts in header names.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These updates help detect multi-vector payloads that blend SSRF + RCE or SQLi + SSTI attacks, especially in cloud-hosted applications with exposed metadata endpoints or unsafe template rendering.&lt;/p&gt;
&lt;p&gt;Prototype Pollution and HTTP parameter pollution rules address emerging JavaScript supply-chain exploitation patterns increasingly seen in real-world incidents.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;72f0ff933fb0492eb71cda50589f2a1d &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Anomaly:Header - name - CR, LF&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5d0377e4435f467488614170132fab7e &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic Rules - Reverse Shell - Body&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;54e32f7f802c4a699182e8921a027008 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic Rules - Reverse Shell - Header&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;7cbda8dbafbc465d9b64a8f2958d0486 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic Rules - Reverse Shell - URI&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;b9f3420674cf481da32333dc8e0cf7ad &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic Rules - XXE - Body&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ad55483512f0440b81426acdbf8aab5e &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic Rules - SQLi - Common Patterns - Header URI&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;849c0618d1674f1c92ba6f9b2e466337 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic Rules - SQLi - Sleep Function - Header URI&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;1b4db4c4bd0649c095c27c6cb686ab47 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic Rules - SQLi - String Function - Header URI&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;fa2055b84af94ba4b925f834b0633709 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Generic Rules - SQLi - WaitFor Function - Header URI&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;158177dec2504acdba1f2da201a076eb &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;SSRF - Local - Beta&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;98bfd6bb46074d5b8d1c4b39743a63ec &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;SSRF - Local - 2 - Beta&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;54e1733b10da4a599e06c6fbc2e84e2d &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;SSRF - Cloud - Beta&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ecd26d61a75e46f6a4449a06ab8af26f &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;SSRF - Cloud - 2 - Beta&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;c16f4e133c4541f293142d02e6e8dc5b &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;SSTI - Arithmetic Probe - URI&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;f4fd9904e7624666b8c49cd62550d794 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;SSTI - Arithmetic Probe - Header&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5c0875604f774c36a4f9b69c659d12a6 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;SSTI - Arithmetic Probe - Body&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;fae6fa37ae9249d58628e54b1a3e521e &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;PHP Wrapper Injection&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;9c02e585db34440da620eb668f76bd74 &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;PHP Wrapper Injection&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;cb67fe56a84747b8b64277dc091e296d &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;HTTP parameter pollution&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;443b54d984944cd69043805ee34214ef &lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Prototype Pollution - Common Payloads - Beta&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Fri, 17 Oct 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.9.173.1)</title><link>https://developers.cloudflare.com/changelog/post/2025-10-16-warp-windows-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-16-warp-windows-beta/</guid><description>&lt;p&gt;A new Beta release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes, improvements, and new features including Path Maximum Transmission Unit Discovery (PMTUD). With PMTUD enabled, the client will dynamically adjust packet sizing to optimize connection performance. There is also a new connection status message in the GUI to inform users that the local network connection may be unstable. This will make it easier to debug connectivity issues.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improvements for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/windows-multiuser/&quot;&gt;Windows multi-user&lt;/a&gt; to maintain the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#disconnect-warp-on-all-devices&quot;&gt;Global WARP override&lt;/a&gt; state when switching between users.&lt;/li&gt;
&lt;li&gt;The GUI now displays the health of the tunnel and DNS connections by showing a connection status message when the network may be unstable. This will make it easier to debug connectivity issues.&lt;/li&gt;
&lt;li&gt;Deleting registrations no longer returns an error when succeeding.&lt;/li&gt;
&lt;li&gt;Path Maximum Transmission Unit Discovery (PMTUD) is now used to discover the effective MTU of the connection. This allows the client to improve connection performance optimized for the current network.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For Windows 11 24H2 users, Microsoft has confirmed a regression that may lead to performance issues like mouse lag, audio cracking, or other slowdowns. Cloudflare recommends users experiencing these issues upgrade to a minimum &lt;a href=&quot;https://support.microsoft.com/en-us/topic/july-8-2025-kb5062553-os-build-26100-4652-523e69cb-051b-43c6-8376-6a76d6caeefd&quot;&gt;Windows 11 24H2 KB5062553&lt;/a&gt; or higher for resolution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with KB5055523 installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 16 Oct 2025 15:29:54 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.9.173.1)</title><link>https://developers.cloudflare.com/changelog/post/2025-10-16-warp-macos-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-16-warp-macos-beta/</guid><description>&lt;p&gt;A new Beta release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes, improvements, and new features including Path Maximum Transmission Unit Discovery (PMTUD). With PMTUD enabled, the client will dynamically adjust packet sizing to optimize connection performance. There is also a new connection status message in the GUI to inform users that the local network connection may be unstable. This will make it easier to debug connectivity issues.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The GUI now displays the health of the tunnel and DNS connections by showing a connection status message when the network may be unstable. This will make it easier to debug connectivity issues.&lt;/li&gt;
&lt;li&gt;Deleting registrations no longer returns an error when succeeding.&lt;/li&gt;
&lt;li&gt;Path Maximum Transmission Unit Discovery (PMTUD) is now used to discover the effective MTU of the connection. This allows the client to improve connection performance optimized for the current network.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS Sequoia: Due to changes Apple introduced in macOS 15.0.x, the WARP client may not behave as expected. Cloudflare recommends the use of macOS 15.4 or later.&lt;/li&gt;
&lt;li&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 16 Oct 2025 15:29:52 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Durable Objects, Workers - View and edit Durable Object data in UI with Data Studio (Beta)</title><link>https://developers.cloudflare.com/changelog/post/2025-10-16-durable-objects-data-studio/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-16-durable-objects-data-studio/</guid><description>&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/do-data-studio.BfCcgtkq_Z4LLzm.webp&quot; alt=&quot;Screenshot of Durable Objects Data Studio&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;You can now view and write to each Durable Object&apos;s storage using a UI editor on the Cloudflare dashboard. Only Durable Objects using &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/best-practices/access-durable-objects-storage/#create-sqlite-backed-durable-object-class&quot;&gt;SQLite storage&lt;/a&gt; can use Data Studio.&lt;/p&gt;
&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers/durable-objects&quot; target=&quot;_blank&quot;&gt;  Go to &lt;strong&gt;Durable Objects&lt;/strong&gt;  &lt;/a&gt;
&lt;p&gt;Data Studio unlocks easier data access with Durable Objects for prototyping application data models to debugging production storage usage. Before, querying your Durable Objects data required deploying a Worker.&lt;/p&gt;
&lt;p&gt;To access a Durable Object, you can provide an object&apos;s unique name or ID generated by Cloudflare. Data Studio requires you to have at least the &lt;code&gt;Workers Platform Admin&lt;/code&gt; role, and all queries are captured with audit logging for your security and compliance needs. Queries executed by Data Studio send requests to your remote, deployed objects and incur normal usage billing.&lt;/p&gt;
&lt;p&gt;To learn more, visit the Data Studio &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/observability/data-studio/&quot;&gt;documentation&lt;/a&gt;. If you have feedback or suggestions for the new Data Studio, please share your experience on &lt;a href=&quot;https://discord.com/channels/595317990191398933/773219443911819284&quot; target=&quot;_blank&quot;&gt;Discord&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 16 Oct 2025 00:00:00 GMT</pubDate><product>Durable Objects</product><category>Durable Objects</category><category>Workers</category></item><item><title>Cloudflare Fundamentals - Increased HTTP header size limit to 128 KB</title><link>https://developers.cloudflare.com/changelog/post/2025-10-16-header-limit-increase/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-16-header-limit-increase/</guid><description>&lt;h4&gt;CDN now supports 128 KB request and response headers 🚀&lt;/h4&gt;
&lt;p&gt;We&apos;re excited to announce a significant increase in the maximum header size supported by Cloudflare&apos;s Content Delivery Network (CDN). Cloudflare now supports up to &lt;strong&gt;128 KB&lt;/strong&gt; for both &lt;strong&gt;request and response headers&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Previously, customers were limited to a total of 32 KB for request or response headers, with a maximum of 16 KB per individual header. Larger headers could cause requests to fail with &lt;code&gt;HTTP 413&lt;/code&gt; (Request Header Fields Too Large) errors.&lt;/p&gt;
&lt;hr&gt;
&lt;h4&gt;What&apos;s new?&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Support for large headers:&lt;/strong&gt; You can now utilize much larger headers, whether as a single large header up to 128 KB or split over multiple headers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduces &lt;code&gt;413&lt;/code&gt; and &lt;code&gt;520&lt;/code&gt; HTTP errors:&lt;/strong&gt; This change drastically reduces the likelihood of customers encountering &lt;code&gt;HTTP 413&lt;/code&gt; errors from large request headers or &lt;code&gt;HTTP 520&lt;/code&gt; errors caused by oversized response headers, improving the overall reliability of your web applications.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced functionality:&lt;/strong&gt; This is especially beneficial for applications that rely on:
&lt;ul&gt;
&lt;li&gt;A large number of cookies.&lt;/li&gt;
&lt;li&gt;Large Content-Security-Policy (CSP) response headers.&lt;/li&gt;
&lt;li&gt;Advanced use cases with Cloudflare Workers that generate large response headers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This enhancement improves compatibility with Cloudflare&apos;s CDN, enabling more use cases that previously failed due to header size limits.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;To learn more and get started, refer to the &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/reference/connection-limits/#request-limits&quot;&gt;Cloudflare Fundamentals documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 16 Oct 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Load Balancing - Monitor Groups for Advanced Health Checking With Load Balancing</title><link>https://developers.cloudflare.com/changelog/post/2025-08-15-monitor-groups-for-load-balancing/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-15-monitor-groups-for-load-balancing/</guid><description>&lt;p&gt;Cloudflare Load Balancing now supports Monitor Groups, a powerful new way to combine multiple health monitors into a single, logical group. This allows you to create sophisticated health checks that more accurately reflect the true availability of your applications by assessing multiple services at once.&lt;/p&gt;
&lt;p&gt;With Monitor Groups, you can ensure that all critical components of an application are healthy before sending traffic to an origin pool, enabling smarter failover decisions and greater resilience. This feature is now available via the API for customers with an Enterprise Load Balancing subscription.&lt;/p&gt;
&lt;h4&gt;What you can do:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Combine Multiple Monitors&lt;/strong&gt;: Group different health monitors (for example, HTTP, TCP) that check various application components, like a primary API gateway and a specific &lt;code&gt;/login&lt;/code&gt; service.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Isolate Monitors for Observation&lt;/strong&gt;: Mark a monitor as &quot;monitoring only&quot; to receive alerts and data without it affecting a pool&apos;s health status or traffic steering. This is perfect for testing new checks or observing non-critical dependencies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improve Steering Intelligence&lt;/strong&gt;: Latency for Dynamic Steering is automatically averaged across all active monitors in a group, providing a more holistic view of an origin&apos;s performance.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This enhancement is ideal for complex, multi-service applications where the health of one component depends on another. By aggregating health signals, Monitor Groups provide a more accurate and comprehensive assessment of your application&apos;s true status.&lt;/p&gt;
&lt;p&gt;For detailed information and API configuration guides, please visit our &lt;a href=&quot;https://developers.cloudflare.com/load-balancing/monitors/monitor-groups&quot;&gt;developer documentation&lt;/a&gt; for Monitor Groups.&lt;/p&gt;</description><pubDate>Thu, 16 Oct 2025 00:00:00 GMT</pubDate><product>Load Balancing</product><category>Load Balancing</category></item><item><title>AI Crawl Control - Enhanced AI Crawl Control metrics with new drilldowns and filters</title><link>https://developers.cloudflare.com/changelog/post/2025-10-14-enhanced-metrics-drilldowns/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-14-enhanced-metrics-drilldowns/</guid><description>&lt;p&gt;AI Crawl Control now provides enhanced metrics and CSV data exports to help you better understand AI crawler activity across your sites.&lt;/p&gt;
&lt;h4&gt;What&apos;s new&lt;/h4&gt;
&lt;h4&gt;Track crawler requests over time&lt;/h4&gt;
&lt;p&gt;Visualize crawler activity patterns over time, and group data by different dimensions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;By Crawler&lt;/strong&gt; — Track activity from individual AI crawlers (GPTBot, ClaudeBot, Bytespider)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;By Category&lt;/strong&gt; — Analyze crawler purpose or type&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;By Operator&lt;/strong&gt; — Discover which companies (OpenAI, Anthropic, ByteDance) are crawling your site&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;By Host&lt;/strong&gt; — Break down activity across multiple subdomains&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;By Status Code&lt;/strong&gt; — Monitor HTTP response codes to crawlers (200s, 300s, 400s, 500s)&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ai-crawl-control-requests-over-time.BtRyz0OT_ZpotRm.webp&quot; alt=&quot;AI Crawl Control requests over time chart with grouping tabs&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;&lt;/figure&gt;
&lt;h4&gt;Analyze referrer data (Paid plans)&lt;/h4&gt;
&lt;p&gt;Identify traffic sources with referrer analytics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;View top referrers driving traffic to your site&lt;/li&gt;
&lt;li&gt;Understand discovery patterns and content popularity from AI operators&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ai-crawl-control-top-referrers.CEUAwpd8_YrhT4.webp&quot; alt=&quot;AI Crawl Control top referrers breakdown&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;&lt;/figure&gt;
&lt;h4&gt;Export data&lt;/h4&gt;
&lt;p&gt;Download your filtered view as a CSV:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Includes all applied filters and groupings&lt;/li&gt;
&lt;li&gt;Useful for custom reporting and deeper analysis&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Log in to the Cloudflare dashboard, and select your account and domain.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;AI Crawl Control&lt;/strong&gt; &gt; &lt;strong&gt;Metrics&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Use the grouping tabs to explore different views of your data.&lt;/li&gt;
&lt;li&gt;Apply filters to focus on specific crawlers, time ranges, or response codes.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Download CSV&lt;/strong&gt; to export your filtered data for further analysis.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Learn more about &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control&quot;&gt;AI Crawl Control&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 14 Oct 2025 00:00:00 GMT</pubDate><product>AI Crawl Control</product><category>AI Crawl Control</category></item><item><title>Cloudflare Fundamentals - Single sign-on now manageable in the user experience</title><link>https://developers.cloudflare.com/changelog/post/2025-10-14-sso-self-service-ux/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-14-sso-self-service-ux/</guid><description>&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-10-14-sso-configuration-ux.DLkIKSax_Z3pbMD.webp&quot; alt=&quot;Screenshot of new user experience for managing SSO&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;During Birthday Week, we announced that &lt;a href=&quot;https://blog.cloudflare.com/enterprise-grade-features-for-all/&quot; target=&quot;_blank&quot;&gt;single sign-on (SSO) is available for free&lt;/a&gt; to everyone who signs in with a custom email domain and maintains a compatible &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/integrations/identity-providers/&quot; target=&quot;_blank&quot;&gt;identity provider&lt;/a&gt;. SSO minimizes user friction around login and provides the strongest security posture available. At the time, this could only be configured using the API.&lt;/p&gt;
&lt;p&gt;Today, we are launching a new user experience which allows users to manage their SSO configuration from within the Cloudflare dashboard. You can access this by going to &lt;strong&gt;Manage account&lt;/strong&gt; &gt; &lt;strong&gt;Members&lt;/strong&gt; &gt; &lt;strong&gt;Settings&lt;/strong&gt;.&lt;/p&gt;
&lt;h4&gt;For more information&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/manage-members/dashboard-sso/&quot;&gt;Cloudflare dashboard SSO&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 14 Oct 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>WAF - WAF Release - 2025-10-13</title><link>https://developers.cloudflare.com/changelog/post/2025-10-13-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-13-waf-release/</guid><description>&lt;p&gt;This week’s highlights include a new JinJava rule targeting a sandbox-bypass flaw that could allow malicious template input to escape execution controls. The rule improves detection for unsafe template rendering paths.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;New WAF rule deployed for JinJava (CVE-2025-59340) to block a sandbox bypass in the template engine that permits attacker-controlled type construction and arbitrary class instantiation; in vulnerable environments this can escalate to remote code execution and full server compromise.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CVE-2025-59340 — Exploitation enables attacker-supplied type descriptors / Jackson &lt;code&gt;ObjectMapper&lt;/code&gt; abuse, allowing arbitrary class loading, file/URL access (LFI/SSRF primitives) and, with suitable gadget chains, potential remote code execution and system compromise.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;b327d6442e2d4848b4aab3cbc04bab5f &lt;/td&gt;&lt;td&gt;100892&lt;/td&gt;&lt;td&gt;JinJava - SSTI - CVE:CVE-2025-59340&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 13 Oct 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Gateway - New domain categories added</title><link>https://developers.cloudflare.com/changelog/post/2025-10-10-new-domain-categories/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-10-new-domain-categories/</guid><description>&lt;p&gt;We have added three new domain categories under the Technology parent category, to better reflect online content and improve DNS filtering.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New categories added&lt;/strong&gt;&lt;/p&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Parent ID&lt;/th&gt;&lt;th&gt;Parent Name&lt;/th&gt;&lt;th&gt;Category ID&lt;/th&gt;&lt;th&gt;Category Name&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;Technology&lt;/td&gt;&lt;td&gt;194&lt;/td&gt;&lt;td&gt;Keep Awake Software&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;Technology&lt;/td&gt;&lt;td&gt;192&lt;/td&gt;&lt;td&gt;Remote Access&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;Technology&lt;/td&gt;&lt;td&gt;193&lt;/td&gt;&lt;td&gt;Shareware/Freeware&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/domain-categories/&quot;&gt;Gateway domain categories&lt;/a&gt; to learn more.&lt;/p&gt;</description><pubDate>Fri, 10 Oct 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>Workers - Worker startup time limit increased to 1 second</title><link>https://developers.cloudflare.com/changelog/post/2025-10-10-increased-startup-time/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-10-increased-startup-time/</guid><description>&lt;p&gt;You can now upload a Worker that takes up 1 second to parse and execute its global scope. Previously, startup time was limited to 400 ms.&lt;/p&gt;
&lt;p&gt;This allows you to run Workers that import more complex packages and execute more code prior to requests being handled.&lt;/p&gt;
&lt;p&gt;For more information, see the documentation on &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/limits/#worker-startup-time&quot;&gt;Workers startup limits&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 10 Oct 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Radar - Expanded CT log activity insights on Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2025-10-09-radar-ct-log-activity-insights/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-09-radar-ct-log-activity-insights/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; has expanded its Certificate Transparency (CT) log insights with new stats that provide greater visibility into log activity:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Log growth rate&lt;/strong&gt;: The average throughput of the CT log over the past 7 days, measured in certificates per hour.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Included certificate count&lt;/strong&gt;: The total number of certificates already included in this CT log.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eligible-for-inclusion certificate count&lt;/strong&gt;: The number of certificates eligible for inclusion in this log but not yet included. This metric is based on certificates signed by trusted root CAs within the log’s accepted date range.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Last update&lt;/strong&gt;: The timestamp of the most recent update to the CT log.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These new statistics have been added to the response of the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/ct/subresources/logs/methods/get/&quot;&gt;Get Certificate Log Details&lt;/a&gt; API endpoint, and are displayed on the &lt;a href=&quot;https://radar.cloudflare.com/certificate-transparency/log/nimbus2025#log-activity&quot; target=&quot;_blank&quot;&gt;CT log information page&lt;/a&gt;.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ct-log-activity.GHD-K7Mk_Z1eNOXK.webp&quot; alt=&quot;Screenshot of the CT log activity card on the CT log information page&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Thu, 09 Oct 2025 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>Workers - You can now deploy full-stack apps on Workers using Terraform</title><link>https://developers.cloudflare.com/changelog/post/2025-10-09-assets-terraform/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-09-assets-terraform/</guid><description>&lt;p&gt;You can now upload Workers with &lt;a href=&quot;https://developers.cloudflare.com/workers/static-assets/&quot;&gt;static assets&lt;/a&gt; (like HTML, CSS, JavaScript, images) with the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs&quot; target=&quot;_blank&quot;&gt;Cloudflare Terraform provider v5.11.0&lt;/a&gt;, making it even easier to deploy and manage full-stack apps with IaC.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Previously&lt;/strong&gt;, you couldn&apos;t use Terraform to upload static assets without writing custom scripts to handle generating an &lt;a href=&quot;https://developers.cloudflare.com/workers/static-assets/direct-upload/#upload-manifest&quot;&gt;asset manifest&lt;/a&gt;, calling the &lt;a href=&quot;https://developers.cloudflare.com/workers/static-assets/direct-upload/#upload-static-assets&quot;&gt;Cloudflare API to upload assets in chunks&lt;/a&gt;, and handling change detection.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now&lt;/strong&gt;, you simply define the directory where your assets are built, and we handle the rest. Check out the &lt;a href=&quot;https://developers.cloudflare.com/changelog/#examples&quot;&gt;examples&lt;/a&gt; for what this looks like in Terraform configuration.&lt;/p&gt;
&lt;p&gt;You can get started today with &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs&quot; target=&quot;_blank&quot;&gt;the Cloudflare Terraform provider (v5.11.0)&lt;/a&gt;, using either the existing &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workers_script&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_workers_script&lt;/code&gt; resource&lt;/a&gt;, or the beta &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker_version&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_worker_version&lt;/code&gt; resource&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Examples&lt;/h4&gt;
&lt;h4&gt;With &lt;code&gt;cloudflare_workers_script&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Here&apos;s how you can use the existing &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs/resources/workers_script&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_workers_script&lt;/code&gt;&lt;/a&gt; resource to upload your Worker code and assets in one shot.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;hcl&quot;&gt;&lt;code class=&quot;language-hcl&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_workers_script&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_app&quot;&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;account_id&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; var&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;account_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;script_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-app&quot;&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;content_file&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./dist/worker/index.js&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;content_sha256&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filesha256&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;./dist/worker/index.js&quot;&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;main_module&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;index.js&quot;&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;# Just point to your assets directory - that&apos;s it!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;assets&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;directory&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./dist/static&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;/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;h4&gt;With &lt;code&gt;cloudflare_worker&lt;/code&gt;, &lt;code&gt;cloudflare_worker_version&lt;/code&gt;, and &lt;code&gt;cloudflare_workers_deployment&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;And here&apos;s an example using the beta &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs/resources/worker_version&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_worker_version&lt;/code&gt;&lt;/a&gt; resource, alongside the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_worker&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs/resources/workers_deployment&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_workers_deployment&lt;/code&gt;&lt;/a&gt; resources:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;hcl&quot;&gt;&lt;code class=&quot;language-hcl&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# This tracks the existence of your Worker, so that you&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# can upload code and assets separately from tracking Worker state.&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;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_worker&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_app&quot;&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;account_id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; var&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;account_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;name&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-app&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_worker_version&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_app_version&quot;&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;account_id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; var&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;account_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;worker_id&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cloudflare_worker&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;my_app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;id&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;# Just point to your assets directory - that&apos;s it!&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;assets&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;directory&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./dist/static&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;/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;modules&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;name&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;index.js&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;content_file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./dist/worker/index.js&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;content_type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/javascript+module&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;/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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_workers_deployment&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_app_deployment&quot;&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;account_id&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; var&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;account_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;script_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cloudflare_worker&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;my_app&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;name&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;strategy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;percentage&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;versions&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;version_id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cloudflare_worker_version.my_app_version.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;percentage&lt;/span&gt;&lt;span&gt; &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;}]&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;h4&gt;What&apos;s changed&lt;/h4&gt;
&lt;p&gt;Under the hood, the Cloudflare Terraform provider now handles the same logic that Wrangler uses for static asset uploads. This includes scanning your assets directory, computing hashes for each file, generating a manifest with file metadata, and calling the Cloudflare API to upload any missing files in chunks. We support large directories with parallel uploads and chunking, and when the asset manifest hash changes, we detect what&apos;s changed and trigger an upload for &lt;em&gt;only&lt;/em&gt; those changed files.&lt;/p&gt;
&lt;h4&gt;Try it out&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Get started with &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs&quot; target=&quot;_blank&quot;&gt;the Cloudflare Terraform provider (v5.11.0)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;You can use either the existing &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workers_script&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_workers_script&lt;/code&gt; resource&lt;/a&gt; to upload your Worker code and assets in one resource.&lt;/li&gt;
&lt;li&gt;Or you can use the new beta &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker_version&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_worker_version&lt;/code&gt; resource&lt;/a&gt; (along with the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_worker&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs/resources/workers_deployment&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_workers_deployment&lt;/code&gt;&lt;/a&gt;) resources to more granularly control the lifecycle of each Worker resource.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 09 Oct 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - You can now deploy and manage Workflows in Terraform</title><link>https://developers.cloudflare.com/changelog/post/2025-10-09-workflows-terraform/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-09-workflows-terraform/</guid><description>&lt;p&gt;You can now create and manage &lt;a href=&quot;https://developers.cloudflare.com/workflows/&quot;&gt;Workflows&lt;/a&gt; using Terraform, now supported in the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workflow&quot; target=&quot;_blank&quot;&gt;Cloudflare Terraform provider v5.11.0&lt;/a&gt;. Workflows allow you to build durable, multi-step applications -- without needing to worry about retrying failed tasks or managing infrastructure.&lt;/p&gt;
&lt;p&gt;Now, you can deploy and manage Workflows through Terraform using the new &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workflow&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_workflow&lt;/code&gt; resource&lt;/a&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;hcl&quot;&gt;&lt;code class=&quot;language-hcl&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_workflow&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_workflow&quot;&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;account_id&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; var&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;account_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;workflow_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-workflow&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;class_name&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MyWorkflow&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;script_name&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-worker&quot;&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;h4&gt;Examples&lt;/h4&gt;
&lt;p&gt;Here are full examples of how to configure &lt;code&gt;cloudflare_workflow&lt;/code&gt; in Terraform, using the existing &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workers_script&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_workers_script&lt;/code&gt; resource&lt;/a&gt;, and the beta &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker_version&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_worker_version&lt;/code&gt; resource&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;With &lt;code&gt;cloudflare_workflow&lt;/code&gt; and &lt;code&gt;cloudflare_workers_script&lt;/code&gt;&lt;/h4&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;hcl&quot;&gt;&lt;code class=&quot;language-hcl&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_workers_script&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;workflow_worker&quot;&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;account_id&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; var&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;cloudflare_account_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;script_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-workflow-worker&quot;&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;content_file&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;module&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/../dist/worker/index.js&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;content_sha256&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filesha256&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;module&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/../dist/worker/index.js&quot;&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;main_module&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;index.js&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_workflow&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;workflow&quot;&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;account_id&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; var&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;cloudflare_account_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;workflow_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-workflow&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;class_name&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MyWorkflow&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;script_name&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cloudflare_workers_script&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;workflow_worker&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;script_name&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;h4&gt;With &lt;code&gt;cloudflare_workflow&lt;/code&gt;, and the new beta resources&lt;/h4&gt;
&lt;p&gt;You can more granularly control the lifecycle of each Worker resource using the beta &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs/resources/worker_version&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_worker_version&lt;/code&gt;&lt;/a&gt; resource, alongside the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_worker&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs/resources/workers_deployment&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_workers_deployment&lt;/code&gt;&lt;/a&gt; resources.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;hcl&quot;&gt;&lt;code class=&quot;language-hcl&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_worker&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;workflow_worker&quot;&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;account_id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; var&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;cloudflare_account_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;name&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-workflow-worker&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_worker_version&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;workflow_worker_version&quot;&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;account_id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; var&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;cloudflare_account_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;worker_id&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cloudflare_worker&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;workflow_worker&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;id&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;main_module&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;index.js&quot;&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;modules&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;name&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;index.js&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;content_file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;module&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span&gt;/../dist/worker/index.js&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;content_type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/javascript+module&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;/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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_workers_deployment&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;workflow_deployment&quot;&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;account_id&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; var&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;cloudflare_account_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;script_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cloudflare_worker&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;workflow_worker&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;name&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;strategy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;percentage&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;versions&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;version_id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cloudflare_worker_version.workflow_worker_version.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;percentage&lt;/span&gt;&lt;span&gt; &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;}]&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_workflow&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_workflow&quot;&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;account_id&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; var&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;cloudflare_account_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;workflow_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-workflow&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;class_name&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MyWorkflow&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;script_name&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; cloudflare_worker&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;workflow_worker&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;name&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;h4&gt;Try it out&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Get started with &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs&quot; target=&quot;_blank&quot;&gt;the Cloudflare Terraform provider (v5.11.0)&lt;/a&gt; and the new &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workflow&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_workflow&lt;/code&gt; resource&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 09 Oct 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare One Client - WARP client for Linux (version 2025.8.779.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-10-07-warp-linux-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-07-warp-linux-ga/</guid><description>&lt;p&gt;A new GA release for the Linux WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains significant fixes and improvements including an updated public key for Linux packages. The public key must be updated if it was installed before September 12, 2025 to ensure the repository remains functional after December 4, 2025. Instructions to make this update are available at &lt;a href=&quot;https://pkg.cloudflareclient.com/&quot;&gt;pkg.cloudflareclient.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode&quot;&gt;Proxy mode&lt;/a&gt; has been enhanced for even faster resolution. Proxy mode now supports SOCKS4, SOCK5, and HTTP CONNECT over an L4 tunnel with custom congestion control optimizations instead of the previous L3 tunnel to Cloudflare&apos;s network. This has more than doubled Proxy mode throughput in lab speed testing, by an order of magnitude in some cases.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The MASQUE protocol is now the only protocol that can use &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode&quot;&gt;Proxy mode&lt;/a&gt;. If you previously configured a device profile to use Proxy mode with Wireguard, you will need to select a new WARP mode or switch to the MASQUE protocol. Otherwise, all devices matching the profile will lose connectivity.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 07 Oct 2025 19:20:00 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.8.779.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-10-07-warp-windows-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-07-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains significant fixes and improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode&quot;&gt;Proxy mode&lt;/a&gt; has been enhanced for even faster resolution. Proxy mode now supports SOCKS4, SOCK5, and HTTP CONNECT over an L4 tunnel with custom congestion control optimizations instead of the previous L3 tunnel to Cloudflare&apos;s network. This has more than doubled Proxy mode throughput in lab speed testing, by an order of magnitude in some cases.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The MASQUE protocol is now the only protocol that can use &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode&quot;&gt;Proxy mode&lt;/a&gt;. If you previously configured a device profile to use Proxy mode with Wireguard, you will need to select a new WARP mode or switch to the MASQUE protocol. Otherwise, all devices matching the profile will lose connectivity.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For Windows 11 24H2 users, Microsoft has confirmed a regression that may lead to performance issues like mouse lag, audio cracking, or other slowdowns. Cloudflare recommends users experiencing these issues upgrade to a minimum &lt;a href=&quot;https://support.microsoft.com/en-us/topic/july-8-2025-kb5062553-os-build-26100-4652-523e69cb-051b-43c6-8376-6a76d6caeefd&quot;&gt;Windows 11 24H2 KB5062553&lt;/a&gt; or higher for resolution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with KB5055523 installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 07 Oct 2025 17:02:40 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.8.779.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-10-07-warp-macos-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-07-warp-macos-ga/</guid><description>&lt;p&gt;A new GA release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains significant fixes and improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode&quot;&gt;Proxy mode&lt;/a&gt; has been enhanced for even faster resolution. Proxy mode now supports SOCKS4, SOCK5, and HTTP CONNECT over an L4 tunnel with custom congestion control optimizations instead of the previous L3 tunnel to Cloudflare&apos;s network. This has more than doubled Proxy mode throughput in lab speed testing, by an order of magnitude in some cases.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The MASQUE protocol is now the only protocol that can use &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode&quot;&gt;Proxy mode&lt;/a&gt;. If you previously configured a device profile to use Proxy mode with Wireguard, you will need to select a new WARP mode or switch to the MASQUE protocol. Otherwise, all devices matching the profile will lose connectivity.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;macOS Sequoia: Due to changes Apple introduced in macOS 15.0.x, the WARP client may not behave as expected. Cloudflare recommends the use of macOS 15.4 or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 07 Oct 2025 17:02:40 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare Fundamentals - Automated reminders for backup codes</title><link>https://developers.cloudflare.com/changelog/post/2025-10-07-recovery-codes/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-07-recovery-codes/</guid><description>&lt;p&gt;The most common reason users contact Cloudflare support is lost two-factor authentication (2FA) credentials. Cloudflare supports both app-based and hardware keys for 2FA, but you could lose access to your account if you lose these. Over the past few weeks, we have been rolling out email and in-product reminders that remind you to also download backup codes (sometimes called recovery keys) that can get you back into your account in the event you lose your 2FA credentials. Download your backup codes now by logging into Cloudflare, then navigating to &lt;strong&gt;Profile&lt;/strong&gt; &gt; &lt;strong&gt;Security &amp;#x26; Authentication&lt;/strong&gt; &gt; &lt;strong&gt;Backup codes&lt;/strong&gt;.&lt;/p&gt;
&lt;h4&gt;Sign-in security best practices&lt;/h4&gt;
&lt;p&gt;Cloudflare is critical infrastructure, and you should protect it as such. Please review the following best practices and make sure you are doing your part to secure your account.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use a unique password for every website, including Cloudflare, and store it in a password manager like 1Password or Keeper. These services are cross-platform and simplify the process of managing secure passwords.&lt;/li&gt;
&lt;li&gt;Use 2FA to make it harder for an attacker to get into your account in the event your password is leaked&lt;/li&gt;
&lt;li&gt;Store your backup codes securely. A password manager is the best place since it keeps the backup codes encrypted, but you can also print them and put them somewhere safe in your home.&lt;/li&gt;
&lt;li&gt;If you use an app to manage your 2FA keys, enable cloud backup, so that you don&apos;t lose your keys in the event you lose your phone.&lt;/li&gt;
&lt;li&gt;If you use a custom email domain to sign in, &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/manage-members/dashboard-sso/&quot; target=&quot;_blank&quot;&gt;configure SSO&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;If you use a public email domain like Gmail or Hotmail, you can also use social login with Apple, GitHub, or Google to sign in.&lt;/li&gt;
&lt;li&gt;If you manage a Cloudflare account for work:
&lt;ul&gt;
&lt;li&gt;Have at least two administrators in case one of them unexpectedly leaves your company&lt;/li&gt;
&lt;li&gt;Use SCIM to automate permissions management for members in your Cloudflare account&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 07 Oct 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>WAF - WAF Release - 2025-10-07 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-10-07-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-07-emergency-waf-release/</guid><description>&lt;p&gt;This week highlights multiple critical Cisco vulnerabilities (CVE-2025-20363, CVE-2025-20333, CVE-2025-20362). This flaw stems from improper input validation in HTTP(S) requests. An authenticated VPN user could send crafted requests to execute code as root, potentially compromising the device.
The initial two rules were made available on September 28, with a third rule added today, October 7, for more robust protection.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cisco (CVE-2025-20333, CVE-2025-20362, CVE-2025-20363): Multiple vulnerabilities that could allow attackers to exploit unsafe deserialization and input validation flaws. Successful exploitation may result in arbitrary code execution, privilege escalation, or command injection on affected systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cisco (CVE-2025-20333, CVE-2025-20362, CVE-2025-20363): Exploitation enables attackers to escalate privileges or achieve remote code execution via command injection.
Administrators are strongly advised to apply vendor updates immediately.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;12f808a5315441688f3b7c8a3a4d1bd6 &lt;/td&gt;&lt;td&gt;100788B&lt;/td&gt;&lt;td&gt;Cisco Secure Firewall Adaptive Security Appliance - Remote Code Execution - CVE:CVE-2025-20333, CVE:CVE-2025-20362, CVE:CVE-2025-20363&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Tue, 07 Oct 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - New Overview Page for Cloudflare Workers</title><link>https://developers.cloudflare.com/changelog/post/2025-10-06-new-worker-overview-page/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-06-new-worker-overview-page/</guid><description>&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/workers-overview.BM_exs4R_IaSn9.webp&quot; alt=&quot;Screenshot of the Workers overview page in the Cloudflare dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Each of your Workers now has a new overview page in the Cloudflare dashboard.&lt;/p&gt;
&lt;p&gt;The goal is to make it easier to understand your Worker without digging through multiple tabs. Think of it as a new home base, a place to get a high-level overview on what&apos;s going on.&lt;/p&gt;
&lt;p&gt;It&apos;s the first place you land when you open a Worker in the dashboard, and it gives you an immediate view of what’s going on. You can see requests, errors, and CPU time at a glance. You can view and add bindings, and see recent versions of your app, including who published them.&lt;/p&gt;
&lt;p&gt;Navigation is also simpler, with visually distinct tabs at the top of the page. At the bottom right you&apos;ll find guided steps for what to do next that are based on the state of your Worker, such as adding a &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/&quot;&gt;binding&lt;/a&gt; or connecting a custom domain.&lt;/p&gt;
&lt;p&gt;We plan to add more here over time. Better insights, more controls, and ways to manage your Worker from one page.&lt;/p&gt;
&lt;p&gt;If you have feedback or suggestions for the new Overview page or your Cloudflare Workers experience in general, we&apos;d love to hear from you. Join the Cloudflare developer community on &lt;a href=&quot;https://discord.com/channels/595317990191398933/1064502845061210152&quot; target=&quot;_blank&quot;&gt;Discord&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 07 Oct 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>R2 - R2 Data Catalog table-level compaction</title><link>https://developers.cloudflare.com/changelog/post/2025-10-06-data-catalog-table-compaction/</link><guid isPermaLink="true">https://developers.cloudflare.com/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;&gt;Apache Iceberg&lt;/a&gt; tables in &lt;a href=&quot;https://developers.cloudflare.com/r2/data-catalog/&quot;&gt;R2 Data Catalog&lt;/a&gt;, giving you fine-grained control over different workloads.&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;# Enable compaction for a specific table (no token required)&lt;/span&gt;&lt;/div&gt;&lt;/div&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;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;catalog&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compaction&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;BUCKET&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;NAMESPACE&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;TABLE&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--target-size&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;256&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;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.cloudflare.com/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></item><item><title>Radar - Browser Support Detection for PQ Encryption on Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2025-10-06-radar-pq-encryption-test/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-06-radar-pq-encryption-test/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; now includes browser detection for Post-quantum (PQ) encryption.
The &lt;a href=&quot;https://radar.cloudflare.com/adoption-and-usage#post-quantum-encryption&quot; target=&quot;_blank&quot;&gt;Post-quantum encryption card&lt;/a&gt; now checks whether a user’s browser supports post-quantum encryption.
If support is detected, information about the key agreement in use is displayed.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/pq-encryption-test.gx_uoaMX_1GpnR5.webp&quot; alt=&quot;Screenshot of the PQ encryption browser support test on the Adoption &amp;#x26; Usage page&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Mon, 06 Oct 2025 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>WAF - WAF Release - 2025-10-06</title><link>https://developers.cloudflare.com/changelog/post/2025-10-06-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-06-waf-release/</guid><description>&lt;p&gt;This week’s highlights prioritise an emergency Oracle E-Business Suite RCE rule deployed to block active, high-impact exploitation. Also addressed are high-severity Chaos Mesh controller command-injection flaws that enable unauthenticated in-cluster RCE and potential cluster compromise, plus a form-data multipart boundary issue that permits HTTP Parameter Pollution (HPP). Two new generic SQLi detections were added to catch inline-comment obfuscation and information disclosure techniques.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;New emergency rule released for Oracle E-Business Suite (CVE-2025-61882) addressing an actively exploited remote code execution vulnerability in core business application modules. Immediate mitigation deployed to protect enterprise workloads.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Chaos Mesh (CVE-2025-59358,CVE-2025-59359,CVE-2025-59360,CVE-2025-59361): A GraphQL debug endpoint on the Chaos Controller Manager is exposed without authentication; several controller mutations (&lt;code&gt;cleanTcs&lt;/code&gt;, &lt;code&gt;killProcesses&lt;/code&gt;, &lt;code&gt;cleanIptables&lt;/code&gt;) are vulnerable to OS command injection.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Form-Data (CVE-2025-7783): Attackers who can observe &lt;code&gt;Math.random()&lt;/code&gt; outputs and control request fields in form-data may exploit this flaw to perform HTTP parameter pollution, leading to request tampering or data manipulation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Two new generic SQLi detections added to enhance baseline coverage against inline-comment obfuscation and information disclosure attempts.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;CVE-2025-61882 — Oracle E-Business Suite remote code execution (emergency detection): attacker-controlled input can yield full system compromise, data exfiltration, and operational outage; immediate blocking enforced.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CVE-2025-59358 / CVE-2025-59359 / CVE-2025-59360 / CVE-2025-59361 — Unauthenticated command-injection in Chaos Mesh controllers allowing remote code execution, cluster compromise, and service disruption (high availability risk).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CVE-2025-7783 — Predictable multipart boundaries in form-data enabling HTTP Parameter Pollution; results include request tampering, parameter overwrite, and downstream data integrity loss.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;0c9bf31ab6fa41fc8f12daaf8650f52f &lt;/td&gt;&lt;td&gt;100882&lt;/td&gt;&lt;td&gt;Chaos Mesh - Missing Authentication - CVE:CVE-2025-59358&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5d459ed434ed446c9580c73c2b8c3680 &lt;/td&gt;&lt;td&gt;100883&lt;/td&gt;&lt;td&gt;Chaos Mesh - Command Injection - CVE:CVE-2025-59359&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;a2591ba5befa4815a6861aefef859a04 &lt;/td&gt;&lt;td&gt;100884&lt;/td&gt;&lt;td&gt;Chaos Mesh - Command Injection - CVE:CVE-2025-59361&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;05eea4fabf6f4cf3aac1094b961f26a7 &lt;/td&gt;&lt;td&gt;100886&lt;/td&gt;&lt;td&gt;Form-Data - Parameter Pollution - CVE:CVE-2025-7783&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;90514c7810694b188f56979826a4074c &lt;/td&gt;&lt;td&gt;100888&lt;/td&gt;&lt;td&gt;Chaos Mesh - Command Injection - CVE:CVE-2025-59360&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;42fbc8c09ec84578b9633ffc31101b2f &lt;/td&gt;&lt;td&gt;100916&lt;/td&gt;&lt;td&gt;Oracle E-Business Suite - Remote Code Execution - CVE:CVE-2025-61882&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;badc687a3ba3420a844220b129aa43c3 &lt;/td&gt;&lt;td&gt;100917&lt;/td&gt;&lt;td&gt;Generic Rules - SQLi - Inline Comment Injection&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;28fa27511f29428899ceb5a273c10b6f &lt;/td&gt;&lt;td&gt;100918&lt;/td&gt;&lt;td&gt;Generic Rules - SQLi - Information Disclosure&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 06 Oct 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>WAF - WAF Release - 2025-10-03</title><link>https://developers.cloudflare.com/changelog/post/2025-10-03-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-03-waf-release/</guid><description>&lt;p&gt;&lt;strong&gt;Managed Ruleset Updated&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This update introduces 21 new detections in the Cloudflare Managed Ruleset (all currently set to Disabled mode to preserve remediation logic and allow quick activation if needed). The rules cover a broad spectrum of threats - SQL injection techniques, command and code injection, information disclosure of common files, URL anomalies, and cross-site scripting.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;0d02c2fb14eb4cec9c2e2b58d61fac74 &lt;/td&gt;&lt;td&gt;100902&lt;/td&gt;&lt;td&gt;Generic Rules - Command Execution - 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;c3079865ce9a41368657026b514aeeb8 &lt;/td&gt;&lt;td&gt;100908&lt;/td&gt;&lt;td&gt;Generic Rules - Command Execution - 3&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;107ae2922b654bb28df7ca978d46a6f4 &lt;/td&gt;&lt;td&gt;100910&lt;/td&gt;&lt;td&gt;Generic Rules - Command Execution - 4&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;68bdb75ae6d24e139a83e5731bd0a329 &lt;/td&gt;&lt;td&gt;100915&lt;/td&gt;&lt;td&gt;Generic Rules - Command Execution - 5&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ea04bb580f7d400386c7dc1d5e51450a &lt;/td&gt;&lt;td&gt;100899&lt;/td&gt;&lt;td&gt;Generic Rules - Content-Type Abuse&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;233364f656ff42b8acc41dcd7996012f &lt;/td&gt;&lt;td&gt;100914&lt;/td&gt;&lt;td&gt;Generic Rules - Content-Type Injection&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;1aa695281c954513be3d003b93209312 &lt;/td&gt;&lt;td&gt;100911&lt;/td&gt;&lt;td&gt;Generic Rules - Cookie Header Injection&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;d9f9e4f5bf11489da52dccb40f373b3f &lt;/td&gt;&lt;td&gt;100905&lt;/td&gt;&lt;td&gt;Generic Rules - NoSQL Injection&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5a1897b714e044a887c0f3f078a0ed04 &lt;/td&gt;&lt;td&gt;100913&lt;/td&gt;&lt;td&gt;Generic Rules - NoSQL Injection - 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;4d6fd28df4f1494e95e70d2c5d649624 &lt;/td&gt;&lt;td&gt;100907&lt;/td&gt;&lt;td&gt;Generic Rules - Parameter Pollution&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;61181e3af5304f7396c7d01cfd1c674e &lt;/td&gt;&lt;td&gt;100906&lt;/td&gt;&lt;td&gt;Generic Rules - PHP Object Injection&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ed5190bfbe1b45a6a645126334c88168 &lt;/td&gt;&lt;td&gt;100904&lt;/td&gt;&lt;td&gt;Generic Rules - Prototype Pollution&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;3ec33bc5ac77495a9f55020e3ab43f7e &lt;/td&gt;&lt;td&gt;100897&lt;/td&gt;&lt;td&gt;Generic Rules - Prototype Pollution 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;c6d752c4909e4b7e8eff6c780d94ee22 &lt;/td&gt;&lt;td&gt;100903&lt;/td&gt;&lt;td&gt;Generic Rules - Reverse Shell&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;caf37e7800bb4635bcc2eefcd5add8e3 &lt;/td&gt;&lt;td&gt;100909&lt;/td&gt;&lt;td&gt;Generic Rules - Reverse Shell - 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;475d090baead467c88dfabbb565c78b0 &lt;/td&gt;&lt;td&gt;100898&lt;/td&gt;&lt;td&gt;Generic Rules - SSJI NoSQL&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;f4c7f98934264c9c937eec1212b837a0 &lt;/td&gt;&lt;td&gt;100896&lt;/td&gt;&lt;td&gt;Generic Rules - SSRF&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;efd01b814d144e90b36522b311c4fb00 &lt;/td&gt;&lt;td&gt;100895&lt;/td&gt;&lt;td&gt;Generic Rules - Template Injection&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;00a9a0d663da4add95b863abd3ed0123 &lt;/td&gt;&lt;td&gt;100895A&lt;/td&gt;&lt;td&gt;Generic Rules - Template Injection - 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;e58c0fffee4f4374bd37f2577501a1d9 &lt;/td&gt;&lt;td&gt;100912&lt;/td&gt;&lt;td&gt;Generic Rules - XXE&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ab09ba8d00eb4cdbb7a6a65ddc55cdb6 &lt;/td&gt;&lt;td&gt;100900&lt;/td&gt;&lt;td&gt;Relative Paths - Anomaly Headers&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Fri, 03 Oct 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - One-click Cloudflare Access for Workers</title><link>https://developers.cloudflare.com/changelog/post/2025-10-03-one-click-access-for-workers/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-03-one-click-access-for-workers/</guid><description>&lt;p&gt;You can now enable &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/policies/&quot;&gt;Cloudflare Access&lt;/a&gt; for your &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/routing/workers-dev/&quot;&gt;&lt;code&gt;workers.dev&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/previews/&quot;&gt;Preview URLs&lt;/a&gt; in a single click.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/workers-access.DGGYThLx_1YsjKO.webp&quot; alt=&quot;Screenshot of the Enable/Disable Cloudflare Access button on the workers.dev route settings page&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Access allows you to limit access to your Workers to specific users or groups. You can limit access to yourself, your teammates, your organization, or anyone else you specify in your &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/policies/&quot;&gt;Access policy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To enable Cloudflare Access:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;In the Cloudflare dashboard, go to the &lt;strong&gt;Workers &amp;#x26; Pages&lt;/strong&gt; page.&lt;/p&gt;
&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers-and-pages&quot; target=&quot;_blank&quot;&gt;  Go to &lt;strong&gt;Workers &amp;#x26; Pages&lt;/strong&gt;  &lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In &lt;strong&gt;Overview&lt;/strong&gt;, select your Worker.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Go to &lt;strong&gt;Settings&lt;/strong&gt; &gt; &lt;strong&gt;Domains &amp;#x26; Routes&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For &lt;code&gt;workers.dev&lt;/code&gt; or Preview URLs, click &lt;strong&gt;Enable Cloudflare Access&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Optionally, to configure the Access application, click &lt;strong&gt;Manage Cloudflare Access&lt;/strong&gt;. There, you can change the email addresses you want to authorize. View &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/policies/#selectors&quot;&gt;Access policies&lt;/a&gt; to learn about configuring alternate rules.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To fully secure your application, it is important that you validate the JWT that Cloudflare Access adds to the &lt;code&gt;Cf-Access-Jwt-Assertion&lt;/code&gt; header on the incoming request.&lt;/p&gt;
&lt;p&gt;The following code will validate the JWT using the &lt;a href=&quot;https://www.npmjs.com/package/jose&quot; target=&quot;_blank&quot;&gt;jose NPM package&lt;/a&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jwtVerify&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createRemoteJWKSet&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;jose&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&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;// Verify the POLICY_AUD environment variable is set&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&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;POLICY_AUD&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Missing required audience&quot;&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;status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;403&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;headers&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;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;text/plain&quot;&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;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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Get the JWT from the request headers&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;cf-access-jwt-assertion&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Check if token exists&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;token&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Missing required CF Access JWT&quot;&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;status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;403&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;headers&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;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;text/plain&quot;&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;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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;try&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;// Create JWKS from your team 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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JWKS&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createRemoteJWKSet&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;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;URL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&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;TEAM_DOMAIN&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/cdn-cgi/access/certs`&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;span&gt;;&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;// Verify the JWT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;payload&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;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jwtVerify&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;token&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JWKS&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;issuer&lt;/span&gt;&lt;span&gt;:&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;TEAM_DOMAIN&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;audience&lt;/span&gt;&lt;span&gt;:&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;POLICY_AUD&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// Token is valid, proceed with your application logic&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Hello &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;email&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;||&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;authenticated user&quot;&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;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;headers&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;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;text/plain&quot;&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;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;catch&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;error&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;// Token verification failed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Invalid token: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;message&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;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;status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;403&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;headers&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;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;text/plain&quot;&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;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;h4&gt;Required environment variables&lt;/h4&gt;
&lt;p&gt;Add these &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/environment-variables/&quot;&gt;environment variables&lt;/a&gt; to your Worker:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;POLICY_AUD&lt;/code&gt;: Your application&apos;s AUD tag&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TEAM_DOMAIN&lt;/code&gt;: &lt;code&gt;https://&amp;#x3C;your-team-name&gt;.cloudflareaccess.com&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both of these appear in the modal that appears when you enable Cloudflare Access.&lt;/p&gt;
&lt;p&gt;You can set these variables by adding them to your Worker&apos;s &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/configuration/&quot;&gt;Wrangler configuration file&lt;/a&gt;, or via the Cloudflare dashboard under &lt;strong&gt;Workers &amp;#x26; Pages&lt;/strong&gt; &gt; &lt;strong&gt;your-worker&lt;/strong&gt; &gt; &lt;strong&gt;Settings&lt;/strong&gt; &gt; &lt;strong&gt;Environment Variables&lt;/strong&gt;.&lt;/p&gt;</description><pubDate>Fri, 03 Oct 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare Fundamentals, Access - Fine-grained Permissioning for Access for Apps, IdPs, &amp; Targets now in Public Beta</title><link>https://developers.cloudflare.com/changelog/post/2025-10-01-fine-grained-permissioning-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-01-fine-grained-permissioning-beta/</guid><description>&lt;p&gt;Fine-grained permissions for &lt;strong&gt;Access Applications, Identity Providers (IdPs), and Targets&lt;/strong&gt; is now available in Public Beta. This expands our RBAC model beyond account &amp;#x26; zone-scoped roles, enabling administrators to grant permissions scoped to individual resources.&lt;/p&gt;
&lt;h4&gt;What&apos;s New&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/applications/http-apps/&quot; target=&quot;_blank&quot;&gt;Access Applications&lt;/a&gt;&lt;/strong&gt;: Grant admin permissions to specific Access Applications.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/integrations/identity-providers/&quot; target=&quot;_blank&quot;&gt;Identity Providers&lt;/a&gt;&lt;/strong&gt;: Grant admin permissions to individual Identity Providers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/applications/non-http/infrastructure-apps/#1-add-a-target&quot; target=&quot;_blank&quot;&gt;Targets&lt;/a&gt;&lt;/strong&gt;: Grant admin rights to specific Targets&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-10-01-fine-grained-permissioning-ux.BWVmQsVF_Z1p4MJh.webp&quot; alt=&quot;Updated Permissions Policy UX&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;aside&gt; &lt;p&gt; Note &lt;/p&gt; &lt;div&gt; &lt;p&gt;During the public beta, members must also be assigned an account-scoped, read only role to view resources in the dashboard. This restriction will be lifted in a future release.&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Account Read Only&lt;/strong&gt; plus a fine-grained permission for a specific App, IdP, or Target&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare Zero Trust Read Only&lt;/strong&gt; plus fine-grained permission for a specific App, IdP, or Target&lt;/li&gt;
&lt;/ul&gt; &lt;/div&gt; &lt;/aside&gt;
&lt;p&gt;For more info:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/manage-members/roles/&quot;&gt;Get started with Cloudflare Permissioning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/manage-members/manage&quot;&gt;Manage Member Permissioning via the UI &amp;#x26; API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 02 Oct 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Access</category></item><item><title>Workers AI - New Deepgram Flux model available on Workers AI</title><link>https://developers.cloudflare.com/changelog/post/2025-10-02-deepgram-flux/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-02-deepgram-flux/</guid><description>&lt;p&gt;Deepgram&apos;s newest Flux model &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/flux/&quot;&gt;&lt;code&gt;@cf/deepgram/flux&lt;/code&gt;&lt;/a&gt; is now available on Workers AI, hosted directly on Cloudflare&apos;s infrastructure. We&apos;re excited to be a launch partner with Deepgram and offer their new Speech Recognition model built specifically for enabling voice agents. Check out &lt;a href=&quot;https://deepgram.com/flux&quot; target=&quot;_blank&quot;&gt;Deepgram&apos;s blog&lt;/a&gt; for more details on the release.&lt;/p&gt;
&lt;p&gt;The Flux model can be used in conjunction with Deepgram&apos;s speech-to-text model &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/nova-3/&quot;&gt;&lt;code&gt;@cf/deepgram/nova-3&lt;/code&gt;&lt;/a&gt; and text-to-speech model &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/aura-1/&quot;&gt;&lt;code&gt;@cf/deepgram/aura-1&lt;/code&gt;&lt;/a&gt; to build end-to-end voice agents. Having Deepgram on Workers AI takes advantage of our edge GPU infrastructure, for ultra low latency voice AI applications.&lt;/p&gt;
&lt;h4&gt;Promotional Pricing&lt;/h4&gt;
&lt;p&gt;For the month of October 2025, Deepgram&apos;s Flux model will be free to use on Workers AI. Official pricing will be announced soon and charged after the promotional pricing period ends on October 31, 2025. Check out the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/flux/&quot;&gt;model page&lt;/a&gt; for pricing details in the future.&lt;/p&gt;
&lt;h4&gt;Example Usage&lt;/h4&gt;
&lt;p&gt;The new Flux model is WebSocket only as it requires live bi-directional streaming in order to recognize speech activity.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a worker that establishes a websocket connection with &lt;code&gt;@cf/deepgram/flux&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;@cf/deepgram/flux&quot;&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;encoding&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;linear16&quot;&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;sample_rate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;16000&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;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;websocket&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resp&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;satisfies&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ExportedHandler&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Env&lt;/span&gt;&lt;span&gt;&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;ol&gt;
&lt;li&gt;Deploy your worker&lt;/li&gt;
&lt;/ol&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;deploy&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;ol&gt;
&lt;li&gt;Write a client script to connect to your worker and start sending random audio bytes to it&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ws&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WebSocket&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;wss://&amp;#x3C;your-worker-url.com&gt;&apos;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ws&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;onopen&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;span&gt; &lt;/span&gt;&lt;span&gt;=&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Connected to WebSocket&apos;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Generate and send random audio bytes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// You can replace this part with a function&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// that reads from your mic or other audio source&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;audioData&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generateRandomAudio&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;ws&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;audioData&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Audio data sent&apos;&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ws&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;onmessage&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;span&gt;event&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;// Transcription will be received here&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Add your custom logic to parse the data&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Received:&apos;&lt;/span&gt;&lt;span&gt;,&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;data&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ws&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;onerror&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;span&gt;error&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;WebSocket error:&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;error&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ws&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;onclose&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;span&gt; &lt;/span&gt;&lt;span&gt;=&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;WebSocket closed&apos;&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Generate random audio data (1 second of noise at 44.1kHz, mono)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generateRandomAudio&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sampleRate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;44100&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;const&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;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;numSamples&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sampleRate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;duration&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;buffer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ArrayBuffer&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;numSamples&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;view&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Int16Array&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;buffer&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;numSamples&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;i&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;view&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;floor&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Math&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;random&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;65536&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;32768&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;/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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;buffer&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;</description><pubDate>Thu, 02 Oct 2025 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>Workers Analytics Engine, Workers - Workers Analytics Engine adds supports for new SQL functions</title><link>https://developers.cloudflare.com/changelog/post/2025-09-26-analytics-engine-sql-enhancements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-26-analytics-engine-sql-enhancements/</guid><description>&lt;p&gt;You can now perform more powerful queries directly in &lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/&quot; target=&quot;_blank&quot;&gt;Workers Analytics Engine&lt;/a&gt; with a major expansion of our SQL function library.&lt;/p&gt;
&lt;p&gt;Workers Analytics Engine allows you to ingest and store high-cardinality data at scale (such as custom analytics) and query your data through a simple SQL API.&lt;/p&gt;
&lt;p&gt;Today, we&apos;ve expanded Workers Analytics Engine&apos;s SQL capabilities with several new functions:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/aggregate-functions/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;New aggregate functions:&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;argMin()&lt;/code&gt; - Returns the value associated with the minimum in a group&lt;/li&gt;
&lt;li&gt;&lt;code&gt;argMax()&lt;/code&gt; - Returns the value associated with the maximum in a group&lt;/li&gt;
&lt;li&gt;&lt;code&gt;topK()&lt;/code&gt; - Returns an array of the most frequent values in a group&lt;/li&gt;
&lt;li&gt;&lt;code&gt;topKWeighted()&lt;/code&gt; - Returns an array of the most frequent values in a group using weights&lt;/li&gt;
&lt;li&gt;&lt;code&gt;first_value()&lt;/code&gt; - Returns the first value in an ordered set of values within a partition&lt;/li&gt;
&lt;li&gt;&lt;code&gt;last_value()&lt;/code&gt; - Returns the last value in an ordered set of values within a partition&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/bit-functions/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;New bit functions:&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bitAnd()&lt;/code&gt; - Returns the bitwise AND of two expressions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitCount()&lt;/code&gt; - Returns the number of bits set to one in the binary representation of a number&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitHammingDistance()&lt;/code&gt; - Returns the number of bits that differ between two numbers&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitNot()&lt;/code&gt; - Returns a number with all bits flipped&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitOr()&lt;/code&gt; - Returns the inclusive bitwise OR of two expressions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitRotateLeft()&lt;/code&gt; - Rotates all bits in a number left by specified positions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitRotateRight()&lt;/code&gt; - Rotates all bits in a number right by specified positions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitShiftLeft()&lt;/code&gt; - Shifts all bits in a number left by specified positions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitShiftRight()&lt;/code&gt; - Shifts all bits in a number right by specified positions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitTest()&lt;/code&gt; - Returns the value of a specific bit in a number&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bitXor()&lt;/code&gt; - Returns the bitwise exclusive-or of two expressions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/mathematical-functions/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;New mathematical functions:&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;abs()&lt;/code&gt; - Returns the absolute value of a number&lt;/li&gt;
&lt;li&gt;&lt;code&gt;log()&lt;/code&gt; - Computes the natural logarithm of a number&lt;/li&gt;
&lt;li&gt;&lt;code&gt;round()&lt;/code&gt; - Rounds a number to a specified number of decimal places&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ceil()&lt;/code&gt; - Rounds a number up to the nearest integer&lt;/li&gt;
&lt;li&gt;&lt;code&gt;floor()&lt;/code&gt; - Rounds a number down to the nearest integer&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pow()&lt;/code&gt; - Returns a number raised to the power of another number&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/string-functions/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;New string functions:&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;lowerUTF8()&lt;/code&gt; - Converts a string to lowercase using UTF-8 encoding&lt;/li&gt;
&lt;li&gt;&lt;code&gt;upperUTF8()&lt;/code&gt; - Converts a string to uppercase using UTF-8 encoding&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/encoding-functions/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;New encoding functions:&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hex()&lt;/code&gt; - Converts a number to its hexadecimal representation&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bin()&lt;/code&gt; - Converts a string to its binary representation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/type-conversion-functions/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;New type conversion functions:&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;toUInt8()&lt;/code&gt; - Converts any numeric expression, or expression resulting in a string representation of a decimal, into an unsigned 8 bit integer&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Ready to get started?&lt;/h4&gt;
&lt;p&gt;Whether you&apos;re building usage-based billing systems, customer analytics dashboards, or other custom analytics, these functions let you get the most out of your data. &lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/get-started/&quot;&gt;Get started &lt;/a&gt; with Workers Analytics Engine and explore all available functions in our &lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/&quot;&gt;SQL reference documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 02 Oct 2025 00:00:00 GMT</pubDate><product>Workers Analytics Engine</product><category>Workers Analytics Engine</category><category>Workers</category></item><item><title>Analytics - New Confidence Intervals in GraphQL Analytics API</title><link>https://developers.cloudflare.com/changelog/post/2025-10-01-confidence-intervals/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-01-confidence-intervals/</guid><description>&lt;p&gt;The GraphQL Analytics API now supports confidence intervals for &lt;code&gt;sum&lt;/code&gt; and &lt;code&gt;count&lt;/code&gt; fields on adaptive (sampled) datasets. Confidence intervals provide a statistical range around sampled results, helping verify accuracy and quantify uncertainty.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Supported datasets&lt;/strong&gt;: Adaptive (sampled) datasets only.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Supported fields&lt;/strong&gt;: All &lt;code&gt;sum&lt;/code&gt; and &lt;code&gt;count&lt;/code&gt; fields.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Usage&lt;/strong&gt;: The confidence &lt;code&gt;level&lt;/code&gt; must be provided as a decimal between 0 and 1 (e.g. &lt;code&gt;0.90&lt;/code&gt;, &lt;code&gt;0.95&lt;/code&gt;, &lt;code&gt;0.99&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default&lt;/strong&gt;: If no confidence level is specified, no intervals are returned.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For examples and more details, see the &lt;a href=&quot;https://developers.cloudflare.com/analytics/graphql-api/features/confidence-intervals/&quot;&gt;GraphQL Analytics API documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 01 Oct 2025 00:00:00 GMT</pubDate><product>Analytics</product><category>Analytics</category></item><item><title>Containers - Larger Container instance types</title><link>https://developers.cloudflare.com/changelog/post/2025-10-01-new-container-instance-types/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-01-new-container-instance-types/</guid><description>&lt;p&gt;New instance types provide up to 4 vCPU, 12 GiB of memory, and 20 GB of disk per container instance.&lt;/p&gt;















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Instance Type&lt;/th&gt;&lt;th&gt;vCPU&lt;/th&gt;&lt;th&gt;Memory&lt;/th&gt;&lt;th&gt;Disk&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;lite&lt;/td&gt;&lt;td&gt;1/16&lt;/td&gt;&lt;td&gt;256 MiB&lt;/td&gt;&lt;td&gt;2 GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;basic&lt;/td&gt;&lt;td&gt;1/4&lt;/td&gt;&lt;td&gt;1 GiB&lt;/td&gt;&lt;td&gt;4 GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;standard-1&lt;/td&gt;&lt;td&gt;1/2&lt;/td&gt;&lt;td&gt;4 GiB&lt;/td&gt;&lt;td&gt;8 GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;standard-2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;6 GiB&lt;/td&gt;&lt;td&gt;12 GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;standard-3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;8 GiB&lt;/td&gt;&lt;td&gt;16 GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;standard-4&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;12 GiB&lt;/td&gt;&lt;td&gt;20 GB&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The &lt;code&gt;dev&lt;/code&gt; and &lt;code&gt;standard&lt;/code&gt; instance types are preserved for backward compatibility and are aliases for &lt;code&gt;lite&lt;/code&gt; and &lt;code&gt;standard-1&lt;/code&gt;, respectively. The &lt;code&gt;standard-1&lt;/code&gt; instance type now provides up to 8 GB of disk instead of only 4 GB.&lt;/p&gt;
&lt;p&gt;See the &lt;a href=&quot;https://developers.cloudflare.com/containers/get-started/&quot;&gt;getting started guide&lt;/a&gt; to deploy your first Container,
and the &lt;a href=&quot;https://developers.cloudflare.com/containers/platform-details/limits/&quot;&gt;limits documentation&lt;/a&gt; for more details on the available instance types and limits.&lt;/p&gt;</description><pubDate>Wed, 01 Oct 2025 00:00:00 GMT</pubDate><product>Containers</product><category>Containers</category></item><item><title>Data Loss Prevention - Expanded File Type Controls for Executables and Disk Images</title><link>https://developers.cloudflare.com/changelog/post/2025-10-01-new-file-type-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-01-new-file-type-support/</guid><description>&lt;p&gt;You can now enhance your security posture by blocking additional application installer and disk image file types with Cloudflare Gateway. Preventing the download of unauthorized software packages is a critical step in securing endpoints from malware and unwanted applications.&lt;/p&gt;
&lt;p&gt;We have expanded Gateway&apos;s file type controls to include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apple Disk Image (dmg)&lt;/li&gt;
&lt;li&gt;Microsoft Software Installer (msix, appx)&lt;/li&gt;
&lt;li&gt;Apple Software Package (pkg)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can find these new options within the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/http-policies/#download-and-upload-file-types&quot;&gt;&lt;em&gt;Upload File Types&lt;/em&gt; and &lt;em&gt;Download File Types&lt;/em&gt; selectors&lt;/a&gt; when creating or editing an HTTP policy. The file types are categorized as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;System&lt;/strong&gt;: &lt;em&gt;Apple Disk Image (dmg)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Executable&lt;/strong&gt;: &lt;em&gt;Microsoft Software Installer (msix)&lt;/em&gt;, &lt;em&gt;Microsoft Software Installer (appx)&lt;/em&gt;, &lt;em&gt;Apple Software Package (pkg)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To ensure these file types are blocked effectively, please note the following behaviors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DMG: Due to their file structure, DMG files are blocked at the very end of the transfer. A user&apos;s download may appear to progress but will fail at the last moment, preventing the browser from saving the file.&lt;/li&gt;
&lt;li&gt;MSIX: To comprehensively block Microsoft Software Installers, you should also include the file type &lt;em&gt;Unscannable&lt;/em&gt;. MSIX files larger than 100 MB are identified as Unscannable ZIP files during inspection.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get started, go to your HTTP policies in Zero Trust. For a full list of file types, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/http-policies/#supported-file-types&quot;&gt;supported file types&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 01 Oct 2025 00:00:00 GMT</pubDate><product>Data Loss Prevention</product><category>Data Loss Prevention</category></item><item><title>Cloudflare Fundamentals - Return markdown</title><link>https://developers.cloudflare.com/changelog/post/2025-10-01-md-returned/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-10-01-md-returned/</guid><description>&lt;p&gt;Users can now specify that they want to retrieve Cloudflare documentation as markdown rather than the previous HTML default. This can significantly reduce token consumption when used alongside Large Language Model (LLM) tools.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://developers.cloudflare.com/workers/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Accept: text/markdown&apos;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;-v&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;If you maintain your own site and want to adopt this practice using Cloudflare Workers for your own users you can follow the example &lt;a href=&quot;https://github.com/cloudflare/cloudflare-docs/pull/25493&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 01 Oct 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.7.176.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-09-30-warp-windows-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-30-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MASQUE is now the default &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#device-tunnel-protocol&quot;&gt;tunnel protocol&lt;/a&gt; for all new WARP device profiles.&lt;/li&gt;
&lt;li&gt;Improvement to limit idle connections in &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#dns-only-mode&quot;&gt;Gateway with DoH mode&lt;/a&gt; to avoid unnecessary resource usage that can lead to DoH requests not resolving.&lt;/li&gt;
&lt;li&gt;Improvement to maintain TCP connections to reduce interruptions in long-lived connections such as RDP or SSH.&lt;/li&gt;
&lt;li&gt;Improvements to maintain &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#disconnect-warp-on-all-devices&quot;&gt;Global WARP override&lt;/a&gt; settings when &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/switch-organizations/#switch-organizations-in-the-cloudflare-one-client&quot;&gt;switching between organizations&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Improvements to maintain client connectivity during network changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For Windows 11 24H2 users, Microsoft has confirmed a regression that may lead to performance issues like mouse lag, audio cracking, or other slowdowns. Cloudflare recommends users experiencing these issues upgrade to a minimum &lt;a href=&quot;https://support.microsoft.com/en-us/topic/july-8-2025-kb5062553-os-build-26100-4652-523e69cb-051b-43c6-8376-6a76d6caeefd&quot;&gt;Windows 11 24H2 KB5062553&lt;/a&gt; or higher for resolution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with KB5055523 installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 30 Sep 2025 20:43:09 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.7.176.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-09-30-warp-macos-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-30-warp-macos-ga/</guid><description>&lt;p&gt;A new GA release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed a bug preventing the &lt;code&gt;warp-diag captive-portal&lt;/code&gt; command from running successfully due to the client not parsing SSID on macOS.&lt;/li&gt;
&lt;li&gt;Improvements to maintain &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#disconnect-warp-on-all-devices&quot;&gt;Global WARP override&lt;/a&gt; settings when &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/switch-organizations/#switch-organizations-in-the-cloudflare-one-client&quot;&gt;switching between organizations&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;MASQUE is now the default &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#device-tunnel-protocol&quot;&gt;tunnel protocol&lt;/a&gt; for all new WARP device profiles.&lt;/li&gt;
&lt;li&gt;Improvement to limit idle connections in &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#dns-only-mode&quot;&gt;Gateway with DoH mode&lt;/a&gt; to avoid unnecessary resource usage that can lead to DoH requests not resolving.&lt;/li&gt;
&lt;li&gt;Improvements to maintain client connectivity during network changes.&lt;/li&gt;
&lt;li&gt;The WARP client now supports macOS Tahoe (version 26.0).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;macOS Sequoia: Due to changes Apple introduced in macOS 15.0.x, the WARP client may not behave as expected. Cloudflare recommends the use of macOS 15.4 or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 30 Sep 2025 20:43:08 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for Linux (version 2025.7.176.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-09-30-warp-linux-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-30-warp-linux-ga/</guid><description>&lt;p&gt;A new GA release for the Linux WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements including an updated public key for Linux packages. The public key must be updated if it was installed before September 12, 2025 to ensure the repository remains functional after December 4, 2025. Instructions to make this update are available at &lt;a href=&quot;https://pkg.cloudflareclient.com/&quot;&gt;pkg.cloudflareclient.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MASQUE is now the default &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#device-tunnel-protocol&quot;&gt;tunnel protocol&lt;/a&gt; for all new WARP device profiles.&lt;/li&gt;
&lt;li&gt;Improvement to limit idle connections in &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#dns-only-mode&quot;&gt;Gateway with DoH mode&lt;/a&gt; to avoid unnecessary resource usage that can lead to DoH requests not resolving.&lt;/li&gt;
&lt;li&gt;Improvements to maintain &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#disconnect-warp-on-all-devices&quot;&gt;Global WARP override&lt;/a&gt; settings when &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/switch-organizations/#switch-organizations-in-the-cloudflare-one-client&quot;&gt;switching between organizations&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Improvements to maintain client connectivity during network changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 30 Sep 2025 20:20:30 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Gateway - Application granular controls for operations in SaaS applications</title><link>https://developers.cloudflare.com/changelog/post/2025-09-25-new-granular-controls-for-saas-applications/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-25-new-granular-controls-for-saas-applications/</guid><description>&lt;p&gt;Gateway users can now apply granular controls to their file sharing and AI chat applications through &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/http-policies&quot;&gt;HTTP policies&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The new feature offers two methods of controlling SaaS applications:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Application Controls&lt;/strong&gt; are curated groupings of Operations which provide an easy way for users to achieve a specific outcome. Application Controls may include &lt;em&gt;Upload&lt;/em&gt;, &lt;em&gt;Download&lt;/em&gt;, &lt;em&gt;Prompt&lt;/em&gt;, &lt;em&gt;Voice&lt;/em&gt;, and &lt;em&gt;Share&lt;/em&gt; depending on the application.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operations&lt;/strong&gt; are controls aligned to the most granular action a user can take. This provides a fine-grained approach to enforcing policy and generally aligns to the SaaS providers API specifications in naming and function.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Get started using &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/http-policies/granular-controls&quot;&gt;Application Granular Controls&lt;/a&gt; and refer to the list of &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/http-policies/granular-controls/#compatible-applications&quot;&gt;supported applications&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 30 Sep 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>Radar - Regional Data in Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2025-09-29-radar-regional-data/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-29-radar-regional-data/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; now introduces Regional Data, providing traffic insights that bring a more localized perspective to the traffic trends shown on Radar.&lt;/p&gt;
&lt;p&gt;The following API endpoints are now available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/geolocations/methods/get/&quot;&gt;&lt;code&gt;Get Geolocation&lt;/code&gt;&lt;/a&gt; - Retrieves geolocation by &lt;code&gt;geoId&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/geolocations/methods/list/&quot;&gt;&lt;code&gt;List Geolocations&lt;/code&gt;&lt;/a&gt; - Lists geolocations.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/netflows/methods/summary_v2/&quot;&gt;&lt;code&gt;NetFlows Summary By Dimension&lt;/code&gt;&lt;/a&gt; - Retrieves NetFlows summary by dimension.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All &lt;code&gt;summary&lt;/code&gt; and &lt;code&gt;timeseries_groups&lt;/code&gt; endpoints in &lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/http/&quot;&gt;&lt;code&gt;HTTP&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/netflows/&quot;&gt;&lt;code&gt;NetFlows&lt;/code&gt;&lt;/a&gt; now include an &lt;code&gt;adm1&lt;/code&gt; dimension for grouping data by first level administrative division (for example, state, province, etc.)&lt;/p&gt;
&lt;p&gt;A new filter &lt;code&gt;geoId&lt;/code&gt; was also added to all endpoints in &lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/http/&quot;&gt;&lt;code&gt;HTTP&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/netflows/&quot;&gt;&lt;code&gt;NetFlows&lt;/code&gt;&lt;/a&gt;, allowing filtering by a specific administrative division.&lt;/p&gt;
&lt;p&gt;Check out the new Regional traffic insights on a country specific traffic page &lt;a href=&quot;https://radar.cloudflare.com/traffic/pt&quot; target=&quot;_blank&quot;&gt;new Radar page&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 29 Sep 2025 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>WAF - WAF Release - 2025-09-29</title><link>https://developers.cloudflare.com/changelog/post/2025-09-29-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-29-waf-release/</guid><description>&lt;p&gt;This week highlights four important vendor- and component-specific issues: an authentication bypass in SimpleHelp (CVE-2024-57727), an information-disclosure flaw in Flowise Cloud (CVE-2025-58434), an SSRF in the WordPress plugin Ditty (CVE-2025-8085), and a directory-traversal bug in Vite (CVE-2025-30208). These are paired with improvements to our generic detection coverage (SQLi, SSRF) to raise the baseline and reduce noisy gaps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;SimpleHelp (CVE-2024-57727): Authentication bypass in SimpleHelp that can allow unauthorized access to management interfaces or sessions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Flowise Cloud (CVE-2025-58434): Information-disclosure vulnerability in Flowise Cloud that may expose sensitive configuration or user data to unauthenticated or low-privileged actors.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WordPress:Plugin: Ditty (CVE-2025-8085): SSRF in the Ditty WordPress plugin enabling server-side requests that could reach internal services or cloud metadata endpoints.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Vite (CVE-2025-30208): Directory-traversal vulnerability in Vite allowing access to filesystem paths outside the intended web root.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These vulnerabilities allow attackers to gain access, escalate privileges, or execute actions that were previously unavailable:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;SimpleHelp (CVE-2024-57727): An authentication bypass that can let unauthenticated attackers access management interfaces or hijack sessions — enabling lateral movement, credential theft, or privilege escalation within affected environments.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Flowise Cloud (CVE-2025-58434): Information-disclosure flaw that can expose sensitive configuration, tokens, or user data; leaked secrets may be chained into account takeover or privileged access to backend services.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WordPress:Plugin: Ditty (CVE-2025-8085): SSRF that enables server-side requests to internal services or cloud metadata endpoints, potentially allowing attackers to retrieve credentials or reach otherwise inaccessible infrastructure, leading to privilege escalation or cloud resource compromise.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Vite (CVE-2025-30208): Directory-traversal vulnerability that can expose filesystem contents outside the web root (configuration files, keys, source code), which attackers can use to escalate privileges or further compromise systems.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;6fe90532af50427484a5275c8c2e30fb &lt;/td&gt;&lt;td&gt;100717&lt;/td&gt;&lt;td&gt;SimpleHelp - Auth Bypass - CVE:CVE-2024-57727&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This rule is merged to 100717 in legacy WAF and 498fcd81a62a4b5ca943e2de958094d3  in new WAF&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;013ef5de3f074fd5a43cdd70d58b886b &lt;/td&gt;&lt;td&gt;100775&lt;/td&gt;&lt;td&gt;Flowise Cloud - Information Disclosure - CVE:CVE-2025-58434&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;68fc5c086ccb4b40a35a63b19bce1ff4 &lt;/td&gt;&lt;td&gt;100881&lt;/td&gt;&lt;td&gt;WordPress:Plugin:Ditty - SSRF - CVE:CVE-2025-8085&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;9e1a56e6b3bc49b187bf6e35ddc329dd &lt;/td&gt;&lt;td&gt;100887&lt;/td&gt;&lt;td&gt;Vite - Directory Traversal - CVE:CVE-2025-30208&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 29 Sep 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>WAF - WAF Release - 2025-09-28 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-09-28-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-28-emergency-waf-release/</guid><description>&lt;p&gt;This week highlights multiple critical Cisco vulnerabilities (CVE-2025-20363, CVE-2025-20333, CVE-2025-20362). This flaw stems from improper input validation in HTTP(S) requests. An authenticated VPN user could send crafted requests to execute code as root, potentially compromising the device.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cisco (CVE-2025-20333, CVE-2025-20362, CVE-2025-20363): Multiple vulnerabilities that could allow attackers to exploit unsafe deserialization and input validation flaws. Successful exploitation may result in arbitrary code execution, privilege escalation, or command injection on affected systems.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cisco (CVE-2025-20333, CVE-2025-20362, CVE-2025-20363): Exploitation enables attackers to escalate privileges or achieve remote code execution via command injection.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;a1bef4ada0b146d2862cad439ee0ab84 &lt;/td&gt;&lt;td&gt;100788&lt;/td&gt;&lt;td&gt;Cisco Secure Firewall Adaptive Security Appliance - Remote Code Execution - CVE:CVE-2025-20333, CVE:CVE-2025-20362, CVE:CVE-2025-20363&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;51de6ce6596a40eb8200452ad30f768e &lt;/td&gt;&lt;td&gt;100788A&lt;/td&gt;&lt;td&gt;Cisco Secure Firewall Adaptive Security Appliance - Remote Code Execution - CVE:CVE-2025-20333, CVE:CVE-2025-20362, CVE:CVE-2025-20363&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Sun, 28 Sep 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>WAF - WAF Release - 2025-09-26</title><link>https://developers.cloudflare.com/changelog/post/2025-09-26-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-26-waf-release/</guid><description>&lt;p&gt;&lt;strong&gt;Managed Ruleset Updated&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This update introduces 11 new detections in the Cloudflare Managed Ruleset (all currently set to Disabled mode to preserve remediation logic and allow quick activation if needed). The rules cover a broad spectrum of threats - SQL injection techniques, command and code injection, information disclosure of common files, URL anomalies, and cross-site scripting.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;3ffd242b4ba242ca965022d3a67d8561 &lt;/td&gt;&lt;td&gt;100859A&lt;/td&gt;&lt;td&gt;SQLi - UNION - 3&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;91d9cf56355b4ab88481b2fd4de80468 &lt;/td&gt;&lt;td&gt;100889&lt;/td&gt;&lt;td&gt;Command Injection - Generic 9&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;c15ca8e8290f485287037665f2be3ddf &lt;/td&gt;&lt;td&gt;100890&lt;/td&gt;&lt;td&gt;Information Disclosure - Common Files - 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;56669615f2984c2cac8c608980a252a8 &lt;/td&gt;&lt;td&gt;100891&lt;/td&gt;&lt;td&gt;Anomaly:URL - Relative Paths&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;c41789fb6370431d809567d17e7d3865 &lt;/td&gt;&lt;td&gt;100894&lt;/td&gt;&lt;td&gt;XSS - Inline Function&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;b995d0b930604fa6b8d9b2a13792565c &lt;/td&gt;&lt;td&gt;100895&lt;/td&gt;&lt;td&gt;XSS - DOM&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ab8277e3f432400bbd9403dd42978e38 &lt;/td&gt;&lt;td&gt;100896&lt;/td&gt;&lt;td&gt;SQLi - MSSQL Length Enumeration&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;3ec33bc5ac77495a9f55020e3ab43f7e &lt;/td&gt;&lt;td&gt;100897&lt;/td&gt;&lt;td&gt;Generic Rules - Code Injection - 3&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;4375dc90c7af4c55908f6b95c1686741 &lt;/td&gt;&lt;td&gt;100898&lt;/td&gt;&lt;td&gt;SQLi - Evasion&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;945c5aa9f45141dd872d7ec920999be0 &lt;/td&gt;&lt;td&gt;100899&lt;/td&gt;&lt;td&gt;SQLi - Probing 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;2c20b5e8684043f48620ff77b4026c88 &lt;/td&gt;&lt;td&gt;100900&lt;/td&gt;&lt;td&gt;SQLi - Probing&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Fri, 26 Sep 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Automatic loopback bindings via ctx.exports</title><link>https://developers.cloudflare.com/changelog/post/2025-09-26-ctx-exports/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-26-ctx-exports/</guid><description>&lt;p&gt;The &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/context/#exports&quot;&gt;&lt;code&gt;ctx.exports&lt;/code&gt; API&lt;/a&gt; contains automatically-configured bindings corresponding to your Worker&apos;s top-level exports. For each top-level export extending &lt;code&gt;WorkerEntrypoint&lt;/code&gt;, &lt;code&gt;ctx.exports&lt;/code&gt; will contain a &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings&quot;&gt;Service Binding&lt;/a&gt; by the same name, and for each export extending &lt;code&gt;DurableObject&lt;/code&gt; (and for which storage has been configured via a &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/reference/durable-objects-migrations/&quot;&gt;migration&lt;/a&gt;), &lt;code&gt;ctx.exports&lt;/code&gt; will contain a &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/api/namespace/&quot;&gt;Durable Object namespace binding&lt;/a&gt;. This means you no longer have to configure these bindings explicitly in &lt;code&gt;wrangler.jsonc&lt;/code&gt;/&lt;code&gt;wrangler.toml&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WorkerEntrypoint&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;cloudflare:workers&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Greeter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WorkerEntrypoint&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;greet&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`Hello, &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;name&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;/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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&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;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;greeting&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;exports&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Greeter&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;greet&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;World&quot;&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;greeting&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;/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;At present, you must use &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/compatibility-flags#enable-ctxexports&quot;&gt;the &lt;code&gt;enable_ctx_exports&lt;/code&gt; compatibility flag&lt;/a&gt; to enable this API, though it will be on by default in the future.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/context/#exports&quot;&gt;See the API reference for more information.&lt;/a&gt;&lt;/p&gt;</description><pubDate>Fri, 26 Sep 2025 00:00:00 GMT</pubDate><product>Workers</product><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>R2 SQL - Announcing R2 SQL</title><link>https://developers.cloudflare.com/changelog/post/2025-09-25-announcing-r2-sql-open-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-25-announcing-r2-sql-open-beta/</guid><description>&lt;p&gt;Today, we&apos;re launching the &lt;strong&gt;open beta&lt;/strong&gt; for &lt;a href=&quot;https://developers.cloudflare.com/r2-sql/&quot;&gt;R2 SQL&lt;/a&gt;: A serverless, distributed query engine that can efficiently analyze petabytes of data in &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot;&gt;Apache Iceberg&lt;/a&gt; tables managed by &lt;a href=&quot;https://developers.cloudflare.com/r2/data-catalog&quot;&gt;R2 Data Catalog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;R2 SQL is ideal for exploring analytical and time-series data stored in R2, such as logs, events from &lt;a href=&quot;https://developers.cloudflare.com/pipelines/&quot;&gt;Pipelines&lt;/a&gt;, or clickstream and user behavior data.&lt;/p&gt;
&lt;p&gt;If you already have a table in R2 Data Catalog, running queries is as simple as:&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;r2&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sql&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;YOUR_WAREHOUSE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&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;&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;value&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;FROM events.user_events&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;WHERE event_type = &apos;CHANGELOG&apos; or event_type = &apos;BLOG&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;&lt;/span&gt;&lt;span&gt;AND __ingest_ts &gt; &apos;2025-09-24T00:00:00Z&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ORDER BY __ingest_ts DESC&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;LIMIT 100&quot;&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;To get started with R2 SQL, check out our &lt;a href=&quot;https://developers.cloudflare.com/r2-sql/get-started/&quot;&gt;getting started guide&lt;/a&gt; or learn more about supported features in the &lt;a href=&quot;https://developers.cloudflare.com/r2-sql/sql-reference/&quot;&gt;SQL reference&lt;/a&gt;. For a technical deep dive into how we built R2 SQL, read our &lt;a href=&quot;https://blog.cloudflare.com/r2-sql-deep-dive/&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>R2 SQL</product><category>R2 SQL</category></item><item><title>Browser Rendering - Browser Rendering Playwright GA, Stagehand support (Beta), and higher limits</title><link>https://developers.cloudflare.com/changelog/post/2025-09-25-br-playwright-ga-stagehand-limits/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-25-br-playwright-ga-stagehand-limits/</guid><description>&lt;p&gt;We’re shipping three updates to Browser Rendering:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Playwright support is now Generally Available and synced with &lt;a href=&quot;https://playwright.dev/docs/release-notes#version-155&quot; target=&quot;_blank&quot;&gt;Playwright v1.55&lt;/a&gt;, giving you a stable foundation for critical automation and AI-agent workflows.&lt;/li&gt;
&lt;li&gt;We’re also adding &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/stagehand/&quot;&gt;Stagehand support (Beta)&lt;/a&gt; so you can combine code with natural language instructions to build more resilient automations.&lt;/li&gt;
&lt;li&gt;Finally, we’ve tripled &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/limits/#workers-paid&quot;&gt;limits&lt;/a&gt; for paid plans across both the &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/rest-api/&quot;&gt;REST API&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/workers-bindings/&quot;&gt;Workers Bindings&lt;/a&gt; to help you scale.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get started with Stagehand, refer to the &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/stagehand/&quot;&gt;Stagehand&lt;/a&gt; example that uses Stagehand and &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/&quot;&gt;Workers AI&lt;/a&gt; to search for a movie on this &lt;a href=&quot;https://demo.playwright.dev/movies&quot; target=&quot;_blank&quot;&gt;example movie directory&lt;/a&gt;, extract its details using natural language (title, year, rating, duration, and genre), and return the information along with a screenshot of the webpage.&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stagehand&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Stagehand&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;env&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;LOCAL&quot;&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;localBrowserLaunchOptions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; cdpUrl&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;endpointURLString&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;BROWSER&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;llmClient&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WorkersAIClient&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;AI&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;verbose&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stagehand&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;init&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stagehand&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;;&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;goto&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;https://demo.playwright.dev/movies&apos;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// if search is a multi-step action, stagehand will return an array of actions it needs to act on&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;actions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;observe&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Search for &quot;Furiosa&quot;&apos;&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;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;action&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;actions&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;act&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;action&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;act&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Click the search result&apos;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// normal playwright functions work as expected&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;waitForSelector&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;.info-wrapper .cast&apos;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;movieInfo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;extract&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;instruction&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Extract movie information&apos;&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;schema&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;object&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;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;string&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;year&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;number&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;rating&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;number&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;genres&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;string&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;duration&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;number&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;describe&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Duration in minutes&quot;&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;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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stagehand&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;close&lt;/span&gt;&lt;span&gt;()&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;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/images/browser-rendering/speedystagehand.gif&quot; alt=&quot;Stagehand video&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Thu, 25 Sep 2025 12:00:00 GMT</pubDate><product>Browser Rendering</product><category>Browser Rendering</category></item><item><title>AI Search - AI Search (formerly AutoRAG) now with More Models To Choose From</title><link>https://developers.cloudflare.com/changelog/post/2025-09-25-ai-search-more-models/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-25-ai-search-more-models/</guid><description>&lt;p&gt;AutoRAG is now AI Search! The new name marks a new and bigger mission: to make world-class search infrastructure available to every developer and business.&lt;/p&gt;
&lt;p&gt;With AI Search you can now use models from different providers like OpenAI and Anthropic. By attaching your provider keys to the AI Gateway linked to your AI Search instance, you can use many more models for both embedding and inference.&lt;/p&gt;
&lt;p&gt;To use AI Search with other &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/models/&quot;&gt;model providers&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Add provider keys to AI Gateway&lt;/strong&gt;
&lt;ol&gt;
&lt;li&gt;Go to AI &gt; AI Gateway in the dashboard.&lt;/li&gt;
&lt;li&gt;Select or create an AI gateway.&lt;/li&gt;
&lt;li&gt;In Provider Keys, choose your provider, click Add, and enter the key.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connect a gateway to AI Search&lt;/strong&gt;: When creating a new AI Search, select the AI Gateway with your provider keys. For an existing AI Search, go to Settings and switch to a gateway that has your keys under Resources.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Select models&lt;/strong&gt;: Embedding models are only available to be changed when creating a new AI Search. Generation model can be selected when creating a new AI Search and can be changed at any time in Settings.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Once configured, your AI Search instance will be able to reference models available through your AI Gateway when making a &lt;code&gt;/ai-search&lt;/code&gt; request:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;{&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;// Query your AI Search instance with a natural language question to an OpenAI model&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;autorag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;my-ai-search&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;aiSearch&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;query&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;What&apos;s new for Cloudflare Birthday Week?&quot;&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;model&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;openai/gpt-5&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;span&gt;;&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;// Return only the generated answer as plain text&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;response&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;headers&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;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;text/plain&quot;&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;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;In the coming weeks we will also roll out updates to align the APIs with the new name. The existing APIs will continue to be supported for the time being. Stay tuned to the &lt;a href=&quot;https://developers.cloudflare.com/changelog/product/ai-search/&quot;&gt;AI Search Changelog&lt;/a&gt; and &lt;a href=&quot;https://discord.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Discord&lt;/a&gt; for more updates!&lt;/p&gt;</description><pubDate>Thu, 25 Sep 2025 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>Containers - Run more Containers with higher resource limits</title><link>https://developers.cloudflare.com/changelog/post/2025-09-24-higher-container-resource-limits/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-24-higher-container-resource-limits/</guid><description>&lt;p&gt;You can now run more Containers concurrently with higher limits on CPU, memory, and disk.&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Limit&lt;/th&gt;&lt;th&gt;New Limit&lt;/th&gt;&lt;th&gt;Previous Limit&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Memory for concurrent live Container instances&lt;/td&gt;&lt;td&gt;400GiB&lt;/td&gt;&lt;td&gt;40GiB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;vCPU for concurrent live Container instances&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Disk for concurrent live Container instances&lt;/td&gt;&lt;td&gt;2TB&lt;/td&gt;&lt;td&gt;100GB&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;You can now run 1000 instances of the &lt;code&gt;dev&lt;/code&gt; instance type, 400 instances of &lt;code&gt;basic&lt;/code&gt;, or 100 instances of &lt;code&gt;standard&lt;/code&gt; concurrently.&lt;/p&gt;
&lt;p&gt;This opens up new possibilities for running larger-scale workloads on Containers.&lt;/p&gt;
&lt;p&gt;See the &lt;a href=&quot;https://developers.cloudflare.com/containers/get-started/&quot;&gt;getting started guide&lt;/a&gt; to deploy your first Container,
and the &lt;a href=&quot;https://developers.cloudflare.com/containers/platform-details/limits/&quot;&gt;limits documentation&lt;/a&gt; for more details on the available instance types and limits.&lt;/p&gt;</description><pubDate>Thu, 25 Sep 2025 00:00:00 GMT</pubDate><product>Containers</product><category>Containers</category></item><item><title>Gateway, Data Loss Prevention - Refine DLP Scans with New Body Phase Selector</title><link>https://developers.cloudflare.com/changelog/post/2025-09-25-body-phase-selector/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-25-body-phase-selector/</guid><description>&lt;p&gt;You can now more precisely control your HTTP DLP policies by specifying whether to scan the request or response body, helping to reduce false positives and target specific data flows.&lt;/p&gt;
&lt;p&gt;In the Gateway HTTP policy builder, you will find a new selector called &lt;em&gt;Body Phase&lt;/em&gt;. This allows you to define the direction of traffic the DLP engine will inspect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Request Body&lt;/em&gt;: Scans data sent from a user&apos;s machine to an upstream service. This is ideal for monitoring data uploads, form submissions, or other user-initiated data exfiltration attempts.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Response Body&lt;/em&gt;: Scans data sent to a user&apos;s machine from an upstream service. Use this to inspect file downloads and website content for sensitive data.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, consider a policy that blocks Social Security Numbers (SSNs). Previously, this policy might trigger when a user visits a website that contains example SSNs in its content (the response body). Now, by setting the &lt;strong&gt;Body Phase&lt;/strong&gt; to &lt;em&gt;Request Body&lt;/em&gt;, the policy will only trigger if the user attempts to upload or submit an SSN, ignoring the content of the web page itself.&lt;/p&gt;
&lt;p&gt;All policies without this selector will continue to scan both request and response bodies to ensure continued protection.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/http-policies/#body-phase&quot;&gt;Gateway HTTP policy selectors&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 25 Sep 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category><category>Data Loss Prevention</category></item><item><title>Cloudflare Fundamentals - Sign in with GitHub</title><link>https://developers.cloudflare.com/changelog/post/2025-09-25-sign-in-with-github/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-25-sign-in-with-github/</guid><description>&lt;p&gt;Cloudflare has launched sign in with GitHub as a log in option. This feature is available to all users with a verified email address who are not using SSO. To use it, simply click on the &lt;code&gt;Sign in with GitHub&lt;/code&gt; button on the dashboard login page. You will be logged in with your primary GitHub email address.&lt;/p&gt;
&lt;h4&gt;For more information&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/user-profiles/login/&quot;&gt;Log in to Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 25 Sep 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Cloudflare Fundamentals - SSO for all</title><link>https://developers.cloudflare.com/changelog/post/2025-09-25-sso-for-all/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-25-sso-for-all/</guid><description>&lt;p&gt;Single sign-on (SSO) streamlines the process of logging into Cloudflare for Enterprise customers who manage a custom email domain and manage their own identity provider. Instead of managing a password and two-factor authentication credentials directly for Cloudflare, SSO lets you reuse your existing login infrastructure to seamlessly log in. SSO also provides additional security opportunities such as device health checks which are not available natively within Cloudflare.&lt;/p&gt;
&lt;p&gt;Historically, SSO was only available for Enterprise accounts. Today, we are announcing that we are making SSO available to all users for free. We have also added the ability to directly manage SSO configurations using the API. This removes the previous requirement to contact support to configure SSO.&lt;/p&gt;
&lt;h4&gt;For more information&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.cloudflare.com/enterprise-grade-features-for-all/&quot; target=&quot;_blank&quot;&gt;Every Cloudflare feature, available to all&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/manage-members/dashboard-sso/&quot;&gt;Configure Dashboard SSO&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 25 Sep 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>R2 - R2 Data Catalog now supports compaction</title><link>https://developers.cloudflare.com/changelog/post/2025-09-25-data-catalog-compaction/</link><guid isPermaLink="true">https://developers.cloudflare.com/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;&gt;Apache Iceberg&lt;/a&gt; tables in &lt;a href=&quot;https://developers.cloudflare.com/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;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/compaction.MLojYuHL_wkqll.webp&quot; alt=&quot;compaction-dash&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Or with &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt;, run:&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;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;catalog&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;compaction&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;BUCKET_NAME&gt;&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;--target-size&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;128&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--token&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;API_TOKEN&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;To get started with compaction, check out &lt;a href=&quot;https://developers.cloudflare.com/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.cloudflare.com/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></item><item><title>WAF - WAF Release - 2025-09-24 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-09-24-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-24-emergency-waf-release/</guid><description>&lt;p&gt;This week highlights a critical vendor-specific vulnerability: a deserialization flaw in the License Servlet of Fortra’s GoAnywhere MFT. By forging a license response signature, an attacker can trigger deserialization of arbitrary objects, potentially leading to command injection.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GoAnywhere MFT (CVE-2025-10035): Deserialization vulnerability in the License Servlet that allows attackers with a forged license response signature to deserialize arbitrary objects, potentially resulting in command injection.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;GoAnywhere MFT (CVE-2025-10035): Exploitation enables attackers to escalate privileges or achieve remote code execution via command injection.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;8fe242c7c0d64d689f4fc9a1e08b39f3 &lt;/td&gt;&lt;td&gt;100787&lt;/td&gt;&lt;td&gt;Fortra GoAnywhere - Auth Bypass - CVE:CVE-2025-10035&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Wed, 24 Sep 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Email security - Invalid Submissions Feedback</title><link>https://developers.cloudflare.com/changelog/post/2025-09-23-invalid-submissions/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-23-invalid-submissions/</guid><description>&lt;p&gt;Email security relies on your submissions to continuously improve our detection models. However, we often receive submissions in formats that cannot be ingested, such as incomplete EMLs, screenshots, or text files.&lt;/p&gt;
&lt;p&gt;To ensure all customer feedback is actionable, we have launched two new features to manage invalid submissions sent to our team and user &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/email-security/settings/phish-submissions/submission-addresses/&quot;&gt;submission aliases&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Email Notifications:&lt;/strong&gt; We now automatically notify users by email when they provide an invalid submission, educating them on the correct format. To disable notifications, go to &lt;strong&gt;&lt;a href=&quot;https://one.dash.cloudflare.com/?to=/:account/email-security/settings&quot; target=&quot;_blank&quot;&gt;Settings&lt;/a&gt;&lt;/strong&gt; &gt; &lt;strong&gt;Invalid submission emails&lt;/strong&gt; and turn the feature off.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/EmailSec-Invalid-Submissions-Toggle.DXjbR6aX_ZsxWGB.webp&quot; alt=&quot;EmailSec-Invalid-Submissions-Toggle&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Invalid Submission dashboard:&lt;/strong&gt; You can quickly identify which users need education to provide valid submissions so Cloudflare can provide continuous protection.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/EmailSec-Invalid-Submissions-Dashboard.zuf1on2n_2gjnGS.webp&quot; alt=&quot;EmailSec-Invalid-Submissions-Dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Learn more about this feature on &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/email-security/submissions/invalid-submissions/&quot;&gt;invalid submissions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This feature is available across these Email security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Advantage&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 23 Sep 2025 23:11:49 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>Workers - Improved support for running multiple Workers with `wrangler dev`</title><link>https://developers.cloudflare.com/changelog/post/2025-09-23-wrangler-dev-multi-config-cross-command-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-23-wrangler-dev-multi-config-cross-command-support/</guid><description>&lt;p&gt;You can run multiple Workers in a single dev command by passing multiple config files to &lt;code&gt;wrangler dev&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--config&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./web/wrangler.jsonc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--config&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./api/wrangler.jsonc&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;Previously, if you ran the command above and then also ran wrangler dev for a different Worker, the Workers running in separate wrangler dev sessions could not communicate with each other. This prevented you from being able to use &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings/&quot; target=&quot;_blank&quot;&gt;Service Bindings&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/logs/tail-workers/&quot; target=&quot;_blank&quot;&gt;Tail Workers&lt;/a&gt; in local development, when running separate wrangler dev sessions.&lt;/p&gt;
&lt;p&gt;Now, the following works as expected:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Terminal 1: Run your application that includes both Web and API workers&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--config&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./web/wrangler.jsonc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--config&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./api/wrangler.jsonc&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;# Terminal 2: Run your auth worker separately&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--config&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./auth/wrangler.jsonc&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;These Workers can now communicate with each other across separate dev commands, regardless of your development setup.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;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;// This service binding call now works across dev commands&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;authorized&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AUTH&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;isAuthorized&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;&lt;span&gt;!&lt;/span&gt;&lt;span&gt;authorized&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Unauthorized&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;401&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;/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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Hello from API Worker!&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;200&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;/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;Check out the &lt;a href=&quot;https://developers.cloudflare.com/workers/development-testing/multi-workers&quot;&gt;Developing with multiple Workers&lt;/a&gt; guide to learn more about the different approaches and when to use each one.&lt;/p&gt;</description><pubDate>Tue, 23 Sep 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Access - Access Remote Desktop Protocol (RDP) destinations securely from your browser — now generally available!</title><link>https://developers.cloudflare.com/changelog/post/2025-09-22-browser-based-rdp-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-22-browser-based-rdp-ga/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/rdp-browser/&quot;&gt;Browser-based RDP&lt;/a&gt; with &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/policies/&quot;&gt;Cloudflare Access&lt;/a&gt; is now generally available for all Cloudflare customers. It enables secure, remote Windows server access without VPNs or RDP clients.&lt;/p&gt;
&lt;p&gt;Since we announced our &lt;a href=&quot;https://developers.cloudflare.com/changelog/access/#2025-06-30&quot;&gt;open beta&lt;/a&gt;, we&apos;ve made a few improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for targets with IPv6.&lt;/li&gt;
&lt;li&gt;Support for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/&quot;&gt;Magic WAN&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/warp-connector/&quot;&gt;WARP Connector&lt;/a&gt; as on-ramps.&lt;/li&gt;
&lt;li&gt;More robust error messaging on the login page to help you if you encounter an issue.&lt;/li&gt;
&lt;li&gt;Worldwide keyboard support. Whether your day-to-day is in Portuguese, Chinese, or something in between, your browser-based RDP experience will look and feel exactly like you are using a desktop RDP client.&lt;/li&gt;
&lt;li&gt;Cleaned up some other miscellaneous issues, including but not limited to enhanced support for Entra ID accounts and support for usernames with spaces, quotes, and special characters.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As a refresher, here are some benefits browser-based RDP provides:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Control how users authenticate to internal RDP resources&lt;/strong&gt; with single sign-on (SSO), multi-factor authentication (MFA), and granular access policies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Record who is accessing which servers and when&lt;/strong&gt; to support regulatory compliance requirements and to gain greater visibility in the event of a security event.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eliminate the need to install and manage software on user devices&lt;/strong&gt;. You will only need a web browser.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduce your attack surface&lt;/strong&gt; by keeping your RDP servers off the public Internet and protecting them from common threats like credential stuffing or brute-force attacks.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/browser-based-rdp-access-app.BNXce1JL_1TDoUX.webp&quot; alt=&quot;Example of a browser-based RDP Access application&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To get started, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/rdp-browser/&quot;&gt;Connect to RDP in a browser&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>WAF - WAF Release - 2025-09-22</title><link>https://developers.cloudflare.com/changelog/post/2025-09-22-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-22-waf-release/</guid><description>&lt;p&gt;This week emphasizes two critical vendor-specific vulnerabilities: a full elevation-of-privilege in Microsoft Azure Networking (CVE-2025-54914) and a server-side template injection (SSTI) leading to remote code execution (RCE) in Skyvern (CVE-2025-49619). These are complemented by enhancements in generic detections (SQLi, SSRF) to improve baseline coverage.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Azure (CVE-2025-54914): Vulnerability in Azure Networking allowing elevation of privileges.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Skyvern (CVE-2025-49619): Skyvern ≤ 0.1.85 has a server-side template injection (SSTI) vulnerability in its Prompt field (workflow blocks) via Jinja2. Authenticated users with low privileges can get remote code execution (blind).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Generic SQLi / SSRF improvements: Expanded rule coverage to detect obfuscated SQL injection patterns and SSRF across host, local, and cloud contexts.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These vulnerabilities allow attackers to escalate privileges or execute code under conditions where previously they could not:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Azure CVE-2025-54914 enables an attacker from the network with no credentials to gain high-level access within Azure Networking; could lead to full compromise of networking components.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Skyvern CVE-2025-49619 allows authenticated users with minimal privilege to exploit SSTI for remote code execution, undermining isolation of workflow components.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The improvements for SQLi and SSRF reduce risk from common injection and request-based attacks.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;c36a425ae0c94789a9bc34f06a135cbf &lt;/td&gt;&lt;td&gt;100146&lt;/td&gt;&lt;td&gt;SSRF - Host - 2&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;dfa84b0aed5a4b45b953a36a57035abf &lt;/td&gt;&lt;td&gt;100146B&lt;/td&gt;&lt;td&gt;SSRF - Local - 2&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;276073e60c7a4b4d91faba1fbbe18d50 &lt;/td&gt;&lt;td&gt;100146C&lt;/td&gt;&lt;td&gt;SSRF - Cloud - 2&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;78c856218f2d40f4b5988c8c956c1961 &lt;/td&gt;&lt;td&gt;100714&lt;/td&gt;&lt;td&gt;Azure - Auth Bypass - CVE:CVE-2025-54914&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;9f1c8d4cbf3848dbb940771bc5ced231 &lt;/td&gt;&lt;td&gt;100758&lt;/td&gt;&lt;td&gt;Skyvern - Remote Code Execution - CVE:CVE-2025-49619&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;6be7e7829f3b43c688e1ac4284a619a1 &lt;/td&gt;&lt;td&gt;100773&lt;/td&gt;&lt;td&gt;Next.js - SSRF&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;0cc3f50216bf4b448210bcc3983ff2dd &lt;/td&gt;&lt;td&gt;100774&lt;/td&gt;&lt;td&gt;Adobe Commerce - Remote Code Execution - CVE:CVE-2025-54236&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;53bfaeb311a049e3877fa15c0380a1a6 &lt;/td&gt;&lt;td&gt;100800_BETA&lt;/td&gt;&lt;td&gt;SQLi - Obfuscated Boolean - Beta&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This rule has been merged into the original rule (ID: 7663ea44178441a0b3205c145563445f )&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 22 Sep 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>AI Search - New Metrics View in AutoRAG</title><link>https://developers.cloudflare.com/changelog/post/2025-09-19-autorag-metrics/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-19-autorag-metrics/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-search/&quot;&gt;AutoRAG&lt;/a&gt; now includes a &lt;strong&gt;Metrics&lt;/strong&gt; tab that shows how your data is indexed and searched. Get a clear view of the health of your indexing pipeline, compare usage between &lt;code&gt;ai-search&lt;/code&gt; and &lt;code&gt;search&lt;/code&gt;, and see which files are retrieved most often.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/metrics.BBUwKIos_zR8bd.webp&quot; alt=&quot;Metrics&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;You can find these metrics within each AutoRAG instance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Indexing: Track how files are ingested and see status changes over time.&lt;/li&gt;
&lt;li&gt;Search breakdown: Compare usage between &lt;code&gt;ai-search&lt;/code&gt; and &lt;code&gt;search&lt;/code&gt; endpoints.&lt;/li&gt;
&lt;li&gt;Top file retrievals: Identify which files are most frequently retrieved in a given period.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Try it today in &lt;a href=&quot;https://developers.cloudflare.com/ai-search/get-started/&quot;&gt;AutoRAG&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 19 Sep 2025 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>Workers - Rate Limiting in Workers is now GA</title><link>https://developers.cloudflare.com/changelog/post/2025-09-19-ratelimit-workers-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-19-ratelimit-workers-ga/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/rate-limit/&quot;&gt;Rate Limiting within Cloudflare Workers&lt;/a&gt; is now Generally Available (GA).&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;ratelimit&lt;/code&gt; binding is now stable and recommended for all production workloads. Existing deployments using the unsafe binding will continue to function to allow for a smooth transition.&lt;/p&gt;
&lt;p&gt;For more details, refer to &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/rate-limit/&quot;&gt;Workers Rate Limiting&lt;/a&gt; documentation.&lt;/p&gt;</description><pubDate>Fri, 19 Sep 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Panic Recovery for Rust Workers</title><link>https://developers.cloudflare.com/changelog/post/2025-09-19-workers-rs-panic-recovery/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-19-workers-rs-panic-recovery/</guid><description>&lt;p&gt;In &lt;a href=&quot;https://github.com/cloudflare/workers-rs&quot; target=&quot;_blank&quot;&gt;workers-rs&lt;/a&gt;, Rust panics were previously non-recoverable. A panic would put the Worker into an invalid state, and further function calls could result in memory overflows or exceptions.&lt;/p&gt;
&lt;p&gt;Now, when a panic occurs, in-flight requests will throw 500 errors, but the Worker will automatically and instantly recover for future requests.&lt;/p&gt;
&lt;p&gt;This ensures more reliable deployments. Automatic panic recovery is enabled for all new workers-rs deployments as of version 0.6.5, with no configuration required.&lt;/p&gt;
&lt;h4&gt;Fixing Rust Panics with Wasm Bindgen&lt;/h4&gt;
&lt;p&gt;Rust Workers are built with Wasm Bindgen, which treats panics as non-recoverable. After a panic, the entire Wasm application is considered to be in an invalid state.&lt;/p&gt;
&lt;p&gt;We now attach a default panic handler in Rust:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;rust&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;std&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;panic&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;set_hook&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Box&lt;/span&gt;&lt;span&gt;::&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;move&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;panic_info&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;hook_impl&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;panic_info&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;Which is registered by default in the JS initialization:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;setPanicHook&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;./index.js&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;setPanicHook&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;err&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Panic handler!&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;err&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;/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;When a panic occurs, we reset the Wasm state to revert the Wasm application to how it was when the application started.&lt;/p&gt;
&lt;h4&gt;Resetting VM State in Wasm Bindgen&lt;/h4&gt;
&lt;p&gt;We worked upstream on the Wasm Bindgen project to implement a new &lt;a href=&quot;https://github.com/wasm-bindgen/wasm-bindgen/pull/4644&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;--experimental-reset-state-function&lt;/code&gt; compilation option&lt;/a&gt; which outputs a new &lt;code&gt;__wbg_reset_state&lt;/code&gt; function.&lt;/p&gt;
&lt;p&gt;This function clears all internal state related to the Wasm VM, and updates all function bindings in place to reference the new WebAssembly instance.&lt;/p&gt;
&lt;p&gt;One other necessary change here was associating Wasm-created JS objects with an instance identity. If a JS object created by an earlier instance is then passed into a new instance later on, a new &quot;stale object&quot; error is specially thrown when using this feature.&lt;/p&gt;
&lt;h4&gt;Layered Solution&lt;/h4&gt;
&lt;p&gt;Building on this new Wasm Bindgen feature, layered with our new default panic handler, we also added a proxy wrapper to ensure all top-level exported class instantiations (such as for Rust Durable Objects) are tracked and fully reinitialized when resetting the Wasm instance. This was necessary because
the workerd runtime will instantiate exported classes, which would then be associated with the Wasm instance.&lt;/p&gt;
&lt;p&gt;This approach now provides full panic recovery for Rust Workers on subsequent requests.&lt;/p&gt;
&lt;p&gt;Of course, we never want panics, but when they do happen they are isolated and can be investigated further from the error logs - avoiding broader service disruption.&lt;/p&gt;
&lt;h4&gt;WebAssembly Exception Handling&lt;/h4&gt;
&lt;p&gt;In the future, full support for recoverable panics could be implemented without needing reinitialization at all, utilizing the &lt;a href=&quot;https://github.com/WebAssembly/exception-handling/blob/main/proposals/exception-handling/Exceptions.md&quot; target=&quot;_blank&quot;&gt;WebAssembly Exception Handling&lt;/a&gt;
proposal, part of the newly announced &lt;a href=&quot;https://webassembly.org/news/2025-09-17-wasm-3.0/&quot; target=&quot;_blank&quot;&gt;WebAssembly 3.0&lt;/a&gt; specification. This would allow unwinding panics as normal JS errors, and concurrent requests would no longer fail.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We&apos;re making significant improvements to the reliability of &lt;a href=&quot;https://github.com/cloudflare/workers-rs&quot; target=&quot;_blank&quot;&gt;Rust Workers&lt;/a&gt;. Join us in &lt;code&gt;#rust-on-workers&lt;/code&gt; on the &lt;a href=&quot;https://discord.gg/cloudflaredev&quot; target=&quot;_blank&quot;&gt;Cloudflare Developers Discord&lt;/a&gt; to stay updated.&lt;/strong&gt;&lt;/p&gt;</description><pubDate>Fri, 19 Sep 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare Tunnel, Cloudflare Tunnel for SASE - Connect and secure any private or public app by hostname, not IP — with hostname routing for Cloudflare Tunnel</title><link>https://developers.cloudflare.com/changelog/post/2025-09-18-tunnel-hostname-routing/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-18-tunnel-hostname-routing/</guid><description>&lt;p&gt;You can now route private traffic to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/&quot;&gt;Cloudflare Tunnel&lt;/a&gt; based on a hostname or domain, moving beyond the limitations of IP-based routing. This new capability is &lt;strong&gt;free for all Cloudflare One customers&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Previously, Tunnel routes could only be defined by IP address or &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-cidr/&quot;&gt;CIDR range&lt;/a&gt;. This created a challenge for modern applications with dynamic or ephemeral IP addresses, often forcing administrators to maintain complex and brittle IP lists.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/tunnel-hostname-routing.DSi8MP_7_Z1E6Ym4.webp&quot; alt=&quot;Hostname-based routing in Cloudflare Tunnel&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;strong&gt;What’s new:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hostname &amp;#x26; Domain Routing&lt;/strong&gt;: Create routes for individual hostnames (e.g., &lt;code&gt;payroll.acme.local&lt;/code&gt;) or entire domains (e.g., &lt;code&gt;*.acme.local&lt;/code&gt;) and direct their traffic to a specific Tunnel.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simplified Zero Trust Policies&lt;/strong&gt;: Build resilient policies in Cloudflare Access and Gateway using stable hostnames, making it dramatically easier to apply per-resource authorization for your private applications.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Precise Egress Control&lt;/strong&gt;: Route traffic for public hostnames (e.g., &lt;code&gt;bank.example.com&lt;/code&gt;) through a specific Tunnel to enforce a dedicated source IP, solving the IP allowlist problem for third-party services.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No More IP Lists&lt;/strong&gt;: This feature makes the workaround of maintaining dynamic IP Lists for Tunnel connections obsolete.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Get started in the Tunnels section of the Zero Trust dashboard with your first &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-private-hostname/&quot;&gt;private hostname&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/egress-policies/egress-cloudflared/&quot;&gt;public hostname&lt;/a&gt; route.&lt;/p&gt;
&lt;p&gt;Learn more in our &lt;a href=&quot;https://blog.cloudflare.com/tunnel-hostname-routing/&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate><product>Cloudflare Tunnel</product><category>Cloudflare Tunnel</category><category>Cloudflare Tunnel for SASE</category></item><item><title>Workers - Increased vCPU for Workers Builds on paid plans</title><link>https://developers.cloudflare.com/changelog/post/2025-09-07-builds-increased-cpu-paid/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-07-builds-increased-cpu-paid/</guid><description>&lt;p&gt;We recently &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-08-04-builds-increased-disk-size/&quot;&gt;increased the available disk space&lt;/a&gt; from 8 GB to 20 GB for &lt;strong&gt;all&lt;/strong&gt; plans. Building on that improvement, we’re now doubling the CPU power available for paid plans — from 2 vCPU to &lt;strong&gt;4 vCPU&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;These changes continue our focus on making &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/&quot;&gt;Workers Builds&lt;/a&gt; faster and more reliable.&lt;/p&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Metric&lt;/th&gt;&lt;th&gt;Free Plan&lt;/th&gt;&lt;th&gt;Paid Plans&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;CPU&lt;/td&gt;&lt;td&gt;2 vCPU&lt;/td&gt;&lt;td&gt;&lt;strong&gt;4 vCPU&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;Performance Improvements&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fast build times&lt;/strong&gt;: Even single-threaded workloads benefit from having more vCPUs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2x faster multi-threaded builds&lt;/strong&gt;: Tools like &lt;a href=&quot;https://esbuild.github.io/&quot; target=&quot;_blank&quot;&gt;esbuild&lt;/a&gt; and &lt;a href=&quot;https://webpack.js.org/&quot; target=&quot;_blank&quot;&gt;webpack&lt;/a&gt; can now utilize additional cores, delivering near-linear performance scaling&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All other &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/limits-and-pricing/&quot;&gt;build limits&lt;/a&gt; — including memory, build minutes, and timeout remain unchanged.&lt;/p&gt;</description><pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Preview URLs now default to opt-in</title><link>https://developers.cloudflare.com/changelog/post/2025-09-17-update-preview-url-setting/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-17-update-preview-url-setting/</guid><description>&lt;p&gt;To prevent the accidental exposure of applications, we&apos;ve updated how &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/previews/&quot;&gt;Worker preview URLs&lt;/a&gt; (&lt;code&gt;&amp;#x3C;PREVIEW&gt;-&amp;#x3C;WORKER_NAME&gt;.&amp;#x3C;SUBDOMAIN&gt;.workers.dev&lt;/code&gt;) are handled. We made this change to ensure preview URLs are only active when intentionally configured, improving the default security posture of your Workers.&lt;/p&gt;
&lt;h4&gt;One-Time Update for Workers with workers.dev Disabled&lt;/h4&gt;
&lt;p&gt;We performed a one-time update to disable preview URLs for existing Workers where the &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/routing/workers-dev/&quot;&gt;workers.dev subdomain&lt;/a&gt; was also disabled.&lt;/p&gt;
&lt;p&gt;Because preview URLs were historically enabled by default, users who had intentionally disabled their workers.dev route may not have realized their Worker was still accessible at a separate preview URL. This update was performed to ensure that using a preview URL is always an intentional, opt-in choice.&lt;/p&gt;
&lt;p&gt;If your Worker was affected, its preview URL (&lt;code&gt;&amp;#x3C;PREVIEW&gt;-&amp;#x3C;WORKER_NAME&gt;.&amp;#x3C;SUBDOMAIN&gt;.workers.dev&lt;/code&gt;) will now direct to an informational page explaining this change.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How to Re-enable Your Preview URL&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If your preview URL was disabled, you can re-enable it &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/previews/#toggle-preview-urls-enable-or-disable&quot;&gt;via the Cloudflare dashboard&lt;/a&gt; by navigating to your Worker&apos;s Settings page and toggling on the Preview URL.&lt;/p&gt;
&lt;p&gt;Alternatively, you can use Wrangler by adding the &lt;code&gt;preview_urls = true&lt;/code&gt; setting to your Wrangler file and redeploying the Worker.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;preview_urls&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;preview_urls&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You can set &lt;code&gt;preview_urls = true&lt;/code&gt; with any Wrangler version that supports the preview URL flag (v3.91.0+). However, we recommend updating to v4.34.0 or newer, as this version defaults &lt;code&gt;preview_urls&lt;/code&gt; to false, ensuring preview URLs are always enabled by explicit choice.&lt;/p&gt;</description><pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare One - New AI-Enabled Search for Zero Trust Dashboard</title><link>https://developers.cloudflare.com/changelog/post/2025-09-16-new-ai-enabled-search-for-zero-trust-dashboard/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-16-new-ai-enabled-search-for-zero-trust-dashboard/</guid><description>&lt;p&gt;Zero Trust Dashboard has a brand new, AI-powered search functionality. You can search your account by resources (applications, policies, device profiles, settings, etc.), pages, products, and more.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/searchexample.Di8yS8ju_1GmPhw.webp&quot; alt=&quot;Example search results in the Zero Trust dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;strong&gt;Ask Cloudy&lt;/strong&gt; — You can also ask Cloudy, our AI agent, questions about Cloudflare Zero Trust. Cloudy is trained on our developer documentation and implementation guides, so it can tell you how to configure functionality, best practices, and can make recommendations.&lt;/p&gt;
&lt;p&gt;Cloudy can then stay open with you as you move between pages to build configuration or answer more questions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Find Recents&lt;/strong&gt; — Recent searches and Cloudy questions also have a new tab under Zero Trust Overview.&lt;/p&gt;</description><pubDate>Tue, 16 Sep 2025 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category></item><item><title>DNS - DNS Firewall Analytics — now in the Cloudflare dashboard</title><link>https://developers.cloudflare.com/changelog/post/2025-09-16-dnsfw-analytics-ui/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-16-dnsfw-analytics-ui/</guid><description>&lt;h4&gt;What&apos;s New&lt;/h4&gt;
&lt;p&gt;Access &lt;a href=&quot;https://developers.cloudflare.com/dns/dns-firewall/analytics/&quot;&gt;GraphQL-powered DNS Firewall analytics&lt;/a&gt; directly in the Cloudflare dashboard.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/DNSFW_Analytics_UI.CgjmZFOO_Z1tNsEz.webp&quot; alt=&quot;DNS Firewall Analytics UI&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;Explore Four Interactive Panels&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Query summary&lt;/strong&gt;: Describes trends over time, segmented by dimensions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Query statistics&lt;/strong&gt;: Describes totals, cached/uncached queries, and processing/response times.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DNS queries by data center&lt;/strong&gt;: Describes global view and the top 10 data centers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Top query statistics&lt;/strong&gt;: Shows a breakdown by key dimensions, with search and expand options (up to top 100 items).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additional features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Apply filters and time ranges once. Changes reflect across all panels.&lt;/li&gt;
&lt;li&gt;Filter by dimensions like query name, query type, cluster, data center, protocol (UDP/TCP), IP version, response code/reason, and more.&lt;/li&gt;
&lt;li&gt;Access up to 62 days of historical data with flexible intervals.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Availability&lt;/h4&gt;
&lt;p&gt;Available to all DNS Firewall customers as part of their existing subscription.&lt;/p&gt;
&lt;h4&gt;Where to Find It&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;In the Cloudflare dashboard, go to the &lt;strong&gt;DNS Firewall&lt;/strong&gt; page.&lt;/p&gt;
&lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/dns-firewall/analytics&quot; target=&quot;_blank&quot;&gt;  Go to &lt;strong&gt;Analytics&lt;/strong&gt;  &lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Refer to the &lt;a href=&quot;https://developers.cloudflare.com/dns/dns-firewall/analytics/&quot;&gt;DNS Firewall Analytics&lt;/a&gt; to learn more.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 16 Sep 2025 00:00:00 GMT</pubDate><product>DNS</product><category>DNS</category></item><item><title>Workers - Remote bindings GA - Connect to remote resources (D1, KV, R2, etc.) during local development</title><link>https://developers.cloudflare.com/changelog/post/2025-09-16-remote-bindings-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-16-remote-bindings-ga/</guid><description>&lt;p&gt;Three months ago &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-06-18-remote-bindings-beta/&quot;&gt;we announced the public beta&lt;/a&gt; of &lt;a href=&quot;https://developers.cloudflare.com/workers/development-testing/#remote-bindings&quot;&gt;remote bindings&lt;/a&gt; for local development. Now, we&apos;re excited to say that it&apos;s available for everyone in Wrangler, Vite, and Vitest without using an experimental flag!&lt;/p&gt;
&lt;p&gt;With remote bindings, you can now connect to deployed resources like &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;R2 buckets&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/d1/&quot;&gt;D1 databases&lt;/a&gt; while running Worker code on your local machine. This means you can test your local code changes against real data and services, without the overhead of deploying for each iteration.&lt;/p&gt;
&lt;h4&gt;Example configuration&lt;/h4&gt;
&lt;p&gt;To enable remote bindings, add &lt;code&gt;&quot;remote&quot; : true&lt;/code&gt; to each binding that you want to rely on a remote resource running on Cloudflare:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-worker&quot;&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;// Set this to today&apos;s date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;compatibility_date&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2026-04-03&quot;&lt;/span&gt;&lt;span&gt;,&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;&quot;&lt;/span&gt;&lt;span&gt;r2_buckets&lt;/span&gt;&lt;span&gt;&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;bucket_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;screenshots-bucket&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;screenshots_bucket&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;remote&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-worker&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Set this to today&apos;s date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;compatibility_date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2026-04-03&quot;&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;r2_buckets&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bucket_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;screenshots-bucket&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;screenshots_bucket&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;remote&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;When remote bindings are configured, your Worker &lt;strong&gt;still executes locally&lt;/strong&gt;, but all binding calls are proxied to the deployed resource that runs on Cloudflare&apos;s network.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You can &lt;a href=&quot;https://developers.cloudflare.com/workers/development-testing/#remote-bindings&quot;&gt;try out remote bindings&lt;/a&gt; for local development today with:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/&quot;&gt;Wrangler v4.37.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/&quot;&gt;Cloudflare Vite Plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://developers.cloudflare.com/workers/testing/vitest-integration/&quot;&gt;Cloudflare Vitest Plugin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 16 Sep 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>WAF - WAF Release - 2025-09-15</title><link>https://developers.cloudflare.com/changelog/post/2025-09-15-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-15-waf-release/</guid><description>&lt;p&gt;&lt;strong&gt;This week&apos;s update&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This week&apos;s focus highlights newly disclosed vulnerabilities in DevOps tooling, data visualization platforms, and enterprise CMS solutions. These issues include sensitive information disclosure and remote code execution, putting organizations at risk of credential leakage, unauthorized access, and full system compromise.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Argo CD (CVE-2025-55190): Exposure of sensitive information could allow attackers to access credential data stored in configurations, potentially leading to compromise of Kubernetes workloads and secrets.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DataEase (CVE-2025-57773): Insufficient input validation enables JNDI injection and insecure deserialization, resulting in remote code execution (RCE). Successful exploitation grants attackers control over the application server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sitecore (CVE-2025-53694): A sensitive information disclosure flaw allows unauthorized access to confidential information stored in Sitecore deployments, raising the risk of data breaches and privilege escalation.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These vulnerabilities expose organizations to serious risks, including credential theft, unauthorized access, and full system compromise. Argo CD&apos;s flaw may expose Kubernetes secrets, DataEase exploitation could give attackers remote execution capabilities, and Sitecore&apos;s disclosure issue increases the likelihood of sensitive data leakage and business impact.&lt;/p&gt;
&lt;p&gt;Administrators are strongly advised to apply vendor patches immediately, rotate exposed credentials, and review access controls to mitigate these risks.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;199cce9ab21e40bcb535f01b2ee2085f &lt;/td&gt;&lt;td&gt;100646&lt;/td&gt;&lt;td&gt;Argo CD - Information Disclosure - CVE:CVE-2025-55190s&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;e513bb21b6a44f9cbfcd2462f5e20788 &lt;/td&gt;&lt;td&gt;100874&lt;/td&gt;&lt;td&gt;DataEase - JNDI injection - CVE:CVE-2025-57773&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;be097f5a71a04f27aa87b60d005a12fd &lt;/td&gt;&lt;td&gt;100880&lt;/td&gt;&lt;td&gt;Sitecore - Information Disclosure - CVE:CVE-2025-53694&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 15 Sep 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Email security - Regional Email Processing for Germany, India, or Australia</title><link>https://developers.cloudflare.com/changelog/post/2025-09-11-regional-email-processing-gia/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-11-regional-email-processing-gia/</guid><description>&lt;p&gt;We’re excited to announce that Email security customers can now choose their preferred mail processing location directly from the UI when onboarding a domain. This feature is available for the following onboarding methods: &lt;strong&gt;MX&lt;/strong&gt;, &lt;strong&gt;BCC&lt;/strong&gt;, and &lt;strong&gt;Journaling&lt;/strong&gt;.&lt;/p&gt;
&lt;h4&gt;What’s new&lt;/h4&gt;
&lt;p&gt;Customers can now select where their email is processed. The following regions are supported:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Germany&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;India&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Australia&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Global processing remains the default option, providing flexibility to meet both compliance requirements or operational preferences.&lt;/p&gt;
&lt;h4&gt;How to use it&lt;/h4&gt;
&lt;p&gt;When onboarding a domain with MX, BCC, or Journaling:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Select the desired processing location (Germany, India, or Australia).&lt;/li&gt;
&lt;li&gt;The UI will display updated processing addresses specific to that region.&lt;/li&gt;
&lt;li&gt;For MX onboarding, if your domain is managed by Cloudflare, you can automatically update MX records directly from the UI.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Availability&lt;/h4&gt;
&lt;p&gt;This feature is available across these Email security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Advantage&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;What’s next&lt;/h4&gt;
&lt;p&gt;We’re expanding the list of processing locations to match our &lt;a href=&quot;https://developers.cloudflare.com/data-localization/&quot;&gt;Data Localization Suite (DLS)&lt;/a&gt; footprint, giving customers the broadest set of regional options in the market without the complexity of self-hosting.&lt;/p&gt;</description><pubDate>Thu, 11 Sep 2025 23:15:00 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>D1, Workers - D1 automatically retries read-only queries</title><link>https://developers.cloudflare.com/changelog/post/2025-09-11-d1-automatic-read-retries/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-11-d1-automatic-read-retries/</guid><description>&lt;p&gt;D1 now detects read-only queries and automatically attempts up to two retries to execute those queries in the event of failures with retryable errors. You can access the number of execution attempts in the returned &lt;a href=&quot;https://developers.cloudflare.com/d1/worker-api/return-object/#d1result&quot;&gt;response metadata&lt;/a&gt; property &lt;code&gt;total_attempts&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;At the moment, only read-only queries are retried, that is, queries containing only the following SQLite keywords: &lt;code&gt;SELECT&lt;/code&gt;, &lt;code&gt;EXPLAIN&lt;/code&gt;, &lt;code&gt;WITH&lt;/code&gt;. Queries containing any &lt;a href=&quot;https://sqlite.org/lang_keywords.html&quot; target=&quot;_blank&quot;&gt;SQLite keyword&lt;/a&gt; that leads to database writes are not retried.&lt;/p&gt;
&lt;p&gt;The retry success ratio among read-only retryable errors varies from 5% all the way up to 95%, depending on the underlying error and its duration (like network errors or other internal errors).&lt;/p&gt;
&lt;p&gt;The retry success ratio among all retryable errors is lower, indicating that there are write-queries that could be retried. Therefore, we recommend D1 users to continue applying &lt;a href=&quot;https://developers.cloudflare.com/d1/best-practices/retry-queries/&quot;&gt;retries in their own code&lt;/a&gt; for queries that are not read-only but are idempotent according to the business logic of the application.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/d1-auto-retry-success-ratio.yPw8B0tB_1c6euA.webp&quot; alt=&quot;D1 automatically query retries success ratio&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;D1 ensures that any retry attempt does not cause database writes, making the automatic retries safe from side-effects, even if a query causing changes slips through the read-only detection. D1 achieves this by checking for modifications after every query execution, and if any write occurred due to a retry attempt, the query is rolled back.&lt;/p&gt;
&lt;p&gt;The read-only query detection heuristics are simple for now, and there is room for improvement to capture more cases of queries that can be retried, so this is just the beginning.&lt;/p&gt;</description><pubDate>Thu, 11 Sep 2025 00:00:00 GMT</pubDate><product>D1</product><category>D1</category><category>Workers</category></item><item><title>Gateway, Cloudflare WAN, Cloudflare Tunnel for SASE - DNS filtering for private network onramps</title><link>https://developers.cloudflare.com/changelog/post/2025-09-11-dns-filtering-for-private-network-onramps/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-11-dns-filtering-for-private-network-onramps/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/zero-trust/cloudflare-gateway/#dns-filtering&quot;&gt;Magic WAN&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/warp-connector/site-to-internet/#configure-dns-resolver-on-devices&quot;&gt;WARP Connector&lt;/a&gt; users can now securely route their DNS traffic to the Gateway resolver without exposing traffic to the public Internet.&lt;/p&gt;
&lt;p&gt;Routing DNS traffic to the Gateway resolver allows DNS resolution and filtering for traffic coming from private networks while preserving source internal IP visibility. This ensures Magic WAN users have full integration with our Cloudflare One features, including &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/resolver-policies/#internal-dns&quot;&gt;Internal DNS&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/egress-policies/#selector-prerequisites&quot;&gt;hostname-based policies&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To configure DNS filtering, change your Magic WAN or WARP Connector DNS settings to use Cloudflare&apos;s shared resolver IPs, &lt;code&gt;172.64.36.1&lt;/code&gt; and &lt;code&gt;172.64.36.2&lt;/code&gt;. Once you configure DNS resolution and filtering, you can use &lt;em&gt;Source Internal IP&lt;/em&gt; as a traffic selector in your &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/resolver-policies/&quot;&gt;resolver policies&lt;/a&gt; for routing private DNS traffic to your &lt;a href=&quot;https://developers.cloudflare.com/dns/internal-dns/&quot;&gt;Internal DNS&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 11 Sep 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category><category>Cloudflare WAN</category><category>Cloudflare Tunnel for SASE</category></item><item><title>Log Explorer - Contextual pivots</title><link>https://developers.cloudflare.com/changelog/post/2025-09-11-contextual-pivots/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-11-contextual-pivots/</guid><description>&lt;p&gt;Directly from &lt;a href=&quot;https://developers.cloudflare.com/log-explorer/log-search/&quot;&gt;Log Search&lt;/a&gt; results, customers can pivot to other parts of the Cloudflare dashboard to immediately take action as a result of their investigation.&lt;/p&gt;
&lt;p&gt;From the &lt;code&gt;http_requests&lt;/code&gt; or &lt;code&gt;fw_events&lt;/code&gt; dataset results, right click on an IP Address or JA3 Fingerprint to pivot to the Investigate portal to lookup the reputation of an IP address or JA3 fingerprint.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/investigate-ip-address.BMVSMzDi_Z1KASOQ.webp&quot; alt=&quot;Investigate IP address&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Easily learn about error codes by linking directly to our documentation from the &lt;strong&gt;EdgeResponseStatus&lt;/strong&gt; or &lt;strong&gt;OriginResponseStatus&lt;/strong&gt; fields.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/view-documentation.Cem5QgeO_Z1vzjwR.webp&quot; alt=&quot;View documentation&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;From the &lt;code&gt;gateway_http&lt;/code&gt; dataset, click on a &lt;strong&gt;policyid&lt;/strong&gt; to link directly to the Zero Trust dashboard to review or make changes to a specific Gateway policy.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/policyid.CVjEdahj_1GFFHp.webp&quot; alt=&quot;View policy&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Thu, 11 Sep 2025 00:00:00 GMT</pubDate><product>Log Explorer</product><category>Log Explorer</category></item><item><title>Log Explorer - New results table view</title><link>https://developers.cloudflare.com/changelog/post/2025-09-11-new-results-table-view/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-11-new-results-table-view/</guid><description>&lt;p&gt;The results table view of &lt;strong&gt;Log Search&lt;/strong&gt; has been updated with additional functionality and a more streamlined user experience. Users can now easily:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Remove/add columns.&lt;/li&gt;
&lt;li&gt;Resize columns.&lt;/li&gt;
&lt;li&gt;Sort columns.&lt;/li&gt;
&lt;li&gt;Copy values from any field.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/new-table.C2Q8mWJ9_ZFs2Aq.webp&quot; alt=&quot;New results table view&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Thu, 11 Sep 2025 00:00:00 GMT</pubDate><product>Log Explorer</product><category>Log Explorer</category></item><item><title>Workers - Worker version rollback limit increased from 10 to 100</title><link>https://developers.cloudflare.com/changelog/post/2025-09-11-increased-version-rollback-limit/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-11-increased-version-rollback-limit/</guid><description>&lt;p&gt;The number of recent versions available for a Worker rollback has been increased from 10 to 100.&lt;/p&gt;
&lt;p&gt;This allows you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Promote any of the 100 most recent versions to be the active deployment.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Split traffic using &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/versions-and-deployments/gradual-deployments/&quot;&gt;gradual deployments&lt;/a&gt; between your latest code and any of the 100 most recent versions.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can do this through the Cloudflare dashboard or with &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/general/#rollback&quot;&gt;Wrangler&apos;s rollback command&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Learn more about &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/versions-and-deployments/&quot;&gt;versioned deployments&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/versions-and-deployments/rollbacks/&quot;&gt;rollbacks&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 11 Sep 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.7.106.1)</title><link>https://developers.cloudflare.com/changelog/post/2025-09-10-warp-windows-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-10-warp-windows-beta/</guid><description>&lt;p&gt;A new Beta release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements including enhancements to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode&quot;&gt;Proxy mode&lt;/a&gt; for even faster resolution. The MASQUE protocol is now the only protocol that can use Proxy mode. If you previously configured a device profile to use Proxy mode with Wireguard, you will need to select a new &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/&quot;&gt;WARP mode&lt;/a&gt; or all devices matching the profile will lose connectivity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enhancements to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode&quot;&gt;Proxy mode&lt;/a&gt; for even faster resolution. The MASQUE protocol is now the only protocol that can use Proxy mode. If you previously configured a device profile to use Proxy mode with Wireguard, you will need to select a new &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/&quot;&gt;WARP mode&lt;/a&gt; or all devices matching the profile will lose connectivity.&lt;/li&gt;
&lt;li&gt;Improvement to keep TCP connections up the first time WARP connects on devices so that remote desktop sessions (such as RDP or SSH) continue to work.&lt;/li&gt;
&lt;li&gt;Improvements to maintain Global WARP Override settings when switching between organization configurations.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#device-tunnel-protocol&quot;&gt;MASQUE protocol&lt;/a&gt; is now the default protocol for all new WARP device profiles.&lt;/li&gt;
&lt;li&gt;Improvement to limit idle connections in DoH mode to avoid unnecessary resource usage that can lead to DoH requests not resolving.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For Windows 11 24H2 users, Microsoft has confirmed a regression that may lead to performance issues like mouse lag, audio cracking, or other slowdowns. Cloudflare recommends users experiencing these issues upgrade to a minimum &lt;a href=&quot;https://support.microsoft.com/en-us/topic/july-8-2025-kb5062553-os-build-26100-4652-523e69cb-051b-43c6-8376-6a76d6caeefd&quot;&gt;Windows 11 24H2 KB5062553&lt;/a&gt; or higher for resolution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with KB5055523 installed may receive a warning about Win32/ClickFix.ABA being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 10 Sep 2025 14:09:30 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.7.106.1)</title><link>https://developers.cloudflare.com/changelog/post/2025-09-10-warp-macos-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-10-warp-macos-beta/</guid><description>&lt;p&gt;A new Beta release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements including enhancements to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode&quot;&gt;Proxy mode&lt;/a&gt; for even faster resolution. The MASQUE protocol is now the only protocol that can use Proxy mode. If you previously configured a device profile to use Proxy mode with Wireguard, you will need to select a new &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/&quot;&gt;WARP mode&lt;/a&gt; or all devices matching the profile will lose connectivity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enhancements to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode&quot;&gt;Proxy mode&lt;/a&gt; for even faster resolution. The MASQUE protocol is now the only protocol that can use Proxy mode. If you previously configured a device profile to use Proxy mode with Wireguard, you will need to select a new &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/&quot;&gt;WARP mode&lt;/a&gt; or all devices matching the profile will lose connectivity.&lt;/li&gt;
&lt;li&gt;Fixed a bug preventing the &lt;code&gt;warp-diag captive-portal&lt;/code&gt; command from running successfully due to the client not parsing SSID on macOS.&lt;/li&gt;
&lt;li&gt;Improvements to maintain Global WARP Override settings when switching between organization configurations.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#device-tunnel-protocol&quot;&gt;MASQUE protocol&lt;/a&gt; is now the default protocol for all new WARP device profiles.&lt;/li&gt;
&lt;li&gt;Improvement to limit idle connections in DoH mode to avoid unnecessary resource usage that can lead to DoH requests not resolving.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS Sequoia: Due to changes Apple introduced in macOS 15.0.x, the WARP client may not behave as expected. Cloudflare recommends the use of macOS 15.4 or later.&lt;/li&gt;
&lt;li&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 10 Sep 2025 14:09:02 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Agents, Workers - Agents SDK v0.1.0 and workers-ai-provider v2.0.0 with AI SDK v5 support</title><link>https://developers.cloudflare.com/changelog/post/2025-09-03-agents-sdk-beta-v5/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-03-agents-sdk-beta-v5/</guid><description>&lt;p&gt;We&apos;ve shipped a new release for the &lt;a href=&quot;https://github.com/cloudflare/agents&quot; target=&quot;_blank&quot;&gt;Agents SDK&lt;/a&gt; bringing full compatibility with &lt;a href=&quot;https://ai-sdk.dev/docs/introduction&quot; target=&quot;_blank&quot;&gt;AI SDK v5&lt;/a&gt; and introducing automatic message migration that handles all legacy formats transparently.&lt;/p&gt;
&lt;p&gt;This release includes improved streaming and tool support, tool confirmation detection (for &quot;human in the loop&quot; systems), enhanced React hooks with automatic tool resolution, improved error handling for streaming responses, and seamless migration utilities that work behind the scenes.&lt;/p&gt;
&lt;p&gt;This makes it ideal for building production AI chat interfaces with Cloudflare Workers AI models, agent workflows, human-in-the-loop systems, or any application requiring reliable message handling across SDK versions — all while maintaining backward compatibility.&lt;/p&gt;
&lt;p&gt;Additionally, we&apos;ve updated workers-ai-provider v2.0.0, the official provider for Cloudflare Workers AI models, to be compatible with AI SDK v5.&lt;/p&gt;
&lt;h4&gt;useAgentChat(options)&lt;/h4&gt;
&lt;p&gt;Creates a new chat interface with enhanced v5 capabilities.&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;// Basic chat setup&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sendMessage&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;addToolResult&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;span&gt; &lt;/span&gt;&lt;span&gt;useAgentChat&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;agent&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;experimental_automaticToolResolution&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&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;tools&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// With custom tool confirmation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;chat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useAgentChat&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;agent&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;experimental_automaticToolResolution&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&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;toolsRequiringConfirmation&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;dangerousOperation&quot;&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4&gt;Automatic Tool Resolution&lt;/h4&gt;
&lt;p&gt;Tools are automatically categorized based on their configuration:&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tools&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;// Auto-executes (has execute function)&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;getLocalTime&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;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Get current local time&quot;&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;inputSchema&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;object&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;execute&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toLocaleString&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;/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;// Requires confirmation (no execute function)&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;deleteFile&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;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Delete a file from the system&quot;&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;inputSchema&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;object&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;filename&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;string&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;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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Server-executed (no client confirmation)&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;analyzeData&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;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Analyze dataset on server&quot;&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;inputSchema&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;object&lt;/span&gt;&lt;span&gt;(&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; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;array&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;number&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;serverExecuted&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&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;satisfies&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Record&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AITool&lt;/span&gt;&lt;span&gt;&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;h4&gt;Message Handling&lt;/h4&gt;
&lt;p&gt;Send messages using the new v5 format with parts array:&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;// Text message&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;sendMessage&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;role&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&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;parts&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; text&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Hello, assistant!&quot;&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;;&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;// Multi-part message with file&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;sendMessage&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;role&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&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;parts&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; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; text&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Analyze this image:&quot;&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; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;image&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; image&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageData&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;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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4&gt;Tool Confirmation Detection&lt;/h4&gt;
&lt;p&gt;Simplified logic for detecting pending tool confirmations:&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pendingToolCallConfirmation&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;some&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;m&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &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;m&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parts&lt;/span&gt;&lt;span&gt;?.&lt;/span&gt;&lt;span&gt;some&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;part&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isToolUIPart&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;part&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;&amp;#x26;&amp;#x26;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;part&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;state&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;input-available&quot;&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;/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;// Handle tool confirmation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;pendingToolCallConfirmation&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;addToolResult&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;toolCallId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;part&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toolCallId&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;tool&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getToolName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;part&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;output&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;User approved the action&quot;&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;/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;h4&gt;Automatic Message Migration&lt;/h4&gt;
&lt;p&gt;Seamlessly handle legacy message formats without code changes.&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;// All these formats are automatically converted:&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;// Legacy v4 string content&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;legacyMessage&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;role&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&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;content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Hello world&quot;&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Legacy v4 with tool calls&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;legacyWithTools&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;role&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;assistant&quot;&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;content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&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;toolInvocations&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;/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;toolCallId&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;123&quot;&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;toolName&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;weather&quot;&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;args&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; city&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;SF&quot;&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;state&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;result&quot;&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;result&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Sunny, 72°F&quot;&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;]&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Automatically becomes v5 format:&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;//   role: &quot;assistant&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;//   parts: [{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;//     type: &quot;tool-call&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;//     toolCallId: &quot;123&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;//     toolName: &quot;weather&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;//     args: { city: &quot;SF&quot; },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;//     state: &quot;result&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;//     result: &quot;Sunny, 72°F&quot;&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;/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;h4&gt;Tool Definition Updates&lt;/h4&gt;
&lt;p&gt;Migrate tool definitions to use the new &lt;code&gt;inputSchema&lt;/code&gt; property.&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;// Before (AI SDK v4)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tools&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;weather&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;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Get weather information&quot;&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;parameters&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;object&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;city&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;string&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;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;execute&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getWeather&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;city&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;/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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// After (AI SDK v5)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tools&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;weather&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;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Get weather information&quot;&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;inputSchema&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;object&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;city&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;string&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;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;execute&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getWeather&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;city&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;/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;h4&gt;Cloudflare Workers AI Integration&lt;/h4&gt;
&lt;p&gt;Seamless integration with Cloudflare Workers AI models through the updated workers-ai-provider v2.0.0.&lt;/p&gt;
&lt;h4&gt;Model Setup with Workers AI&lt;/h4&gt;
&lt;p&gt;Use Cloudflare Workers AI models directly in your agent workflows:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createWorkersAI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;workers-ai-provider&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useAgentChat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;agents/ai-react&quot;&lt;/span&gt;&lt;span&gt;;&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;// Create Workers AI model (v2.0.0 - same API, enhanced v5 internals)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;model&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createWorkersAI&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;binding&lt;/span&gt;&lt;span&gt;:&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;AI&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;@cf/meta/llama-3.2-3b-instruct&quot;&lt;/span&gt;&lt;span&gt;)&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;h4&gt;Enhanced File and Image Support&lt;/h4&gt;
&lt;p&gt;Workers AI models now support v5 file handling with automatic conversion:&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;// Send images and files to Workers AI models&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;sendMessage&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;role&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&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;parts&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; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; text&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Analyze this image:&quot;&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;/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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;file&quot;&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;data&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;imageBuffer&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;mediaType&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;image/jpeg&quot;&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;]&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Workers AI provider automatically converts to proper format&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;h4&gt;Streaming with Workers AI&lt;/h4&gt;
&lt;p&gt;Enhanced streaming support with automatic warning detection:&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;// Streaming with Workers AI models&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;streamText&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;model&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createWorkersAI&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; binding&lt;/span&gt;&lt;span&gt;:&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;AI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;)(&lt;/span&gt;&lt;span&gt;&quot;@cf/meta/llama-3.2-3b-instruct&quot;&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;messages&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;onChunk&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;chunk&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;// Enhanced streaming with warning handling&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;chunk&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;/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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4&gt;Import Updates&lt;/h4&gt;
&lt;p&gt;Update your imports to use the new v5 types:&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;// Before (AI SDK v4)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import type &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Message&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;ai&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useChat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;ai/react&quot;&lt;/span&gt;&lt;span&gt;;&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;// After (AI SDK v5)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import type &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UIMessage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;ai&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// or alias for compatibility&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import type &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UIMessage&lt;/span&gt;&lt;span&gt; as &lt;/span&gt;&lt;span&gt;Message&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;ai&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;useChat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@ai-sdk/react&quot;&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;h4&gt;Resources&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/agents/blob/main/docs/migration-to-ai-sdk-v5.md&quot; target=&quot;_blank&quot;&gt;Migration Guide&lt;/a&gt; - Comprehensive migration documentation&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ai-sdk.dev/docs/migration-guides/migration-guide-5-0&quot; target=&quot;_blank&quot;&gt;AI SDK v5 Documentation&lt;/a&gt; - Official AI SDK migration guide&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/agents-starter/pull/105&quot; target=&quot;_blank&quot;&gt;An Example PR showing the migration from AI SDK v4 to v5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/agents/issues&quot; target=&quot;_blank&quot;&gt;GitHub Issues&lt;/a&gt; - Report bugs or request features&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Feedback Welcome&lt;/h4&gt;
&lt;p&gt;We&apos;d love your feedback! We&apos;re particularly interested in feedback on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Migration experience&lt;/strong&gt; - How smooth was the upgrade process?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tool confirmation workflow&lt;/strong&gt; - Does the new automatic detection work as expected?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Message format handling&lt;/strong&gt; - Any edge cases with legacy message conversion?&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 10 Sep 2025 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>Workers - Built with Cloudflare button</title><link>https://developers.cloudflare.com/changelog/post/2025-09-10-built-with-cloudflare-button/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-10-built-with-cloudflare-button/</guid><description>&lt;p&gt;We&apos;ve updated our &quot;Built with Cloudflare&quot; button to make it easier to share that you&apos;re building on Cloudflare with the world. Embed it in your project&apos;s README, blog post, or wherever you want to let people know.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://workers.cloudflare.com/built-with-cloudflare.svg&quot; alt=&quot;Built with Cloudflare&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/built-with-cloudflare&quot;&gt;documentation&lt;/a&gt; for usage information.&lt;/p&gt;</description><pubDate>Wed, 10 Sep 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Deploy static sites to Workers without a configuration file</title><link>https://developers.cloudflare.com/changelog/post/2025-09-09-interactive-wrangler-assets/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-09-interactive-wrangler-assets/</guid><description>&lt;p&gt;Deploying static site to Workers is now easier. When you run &lt;code&gt;wrangler deploy [directory]&lt;/code&gt; or &lt;code&gt;wrangler deploy --assets [directory]&lt;/code&gt; without an existing &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/configuration/&quot;&gt;configuration file&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/&quot;&gt;Wrangler CLI&lt;/a&gt; now guides you through the deployment process with interactive prompts.&lt;/p&gt;
&lt;h4&gt;Before and after&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt; Required remembering multiple flags and parameters&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;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--assets&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./dist&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--compatibility-date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2025-09-09&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-project&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;&lt;strong&gt;After:&lt;/strong&gt; Simple directory deployment with guided setup&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;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Interactive prompts handle the rest as shown in the example flow below&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;h4&gt;What&apos;s new&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Interactive prompts for missing configuration:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Wrangler detects when you&apos;re trying to deploy a directory of static assets&lt;/li&gt;
&lt;li&gt;Prompts you to confirm the deployment type&lt;/li&gt;
&lt;li&gt;Asks for a project name (with smart defaults)&lt;/li&gt;
&lt;li&gt;Automatically sets the compatibility date to today&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Automatic configuration generation:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Creates a &lt;code&gt;wrangler.jsonc&lt;/code&gt; file with your deployment settings&lt;/li&gt;
&lt;li&gt;Stores your choices for future deployments&lt;/li&gt;
&lt;li&gt;Eliminates the need to remember complex command-line flags&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Example workflow&lt;/h4&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;# Deploy your built static site&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dist&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;# Wrangler will prompt:&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;It&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;looks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;like&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;are&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;trying&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;deploy&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;directory&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;static&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;assets&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;only.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;correct?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;…&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;yes&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;What&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;do&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;want&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;name&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;project?&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;…&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-astro-site&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;# Automatically generates a wrangler.jsonc file and adds it to your project:&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;&quot;name&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-astro-site&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;&quot;compatibility_date&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2025-09-09&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;&quot;assets&quot;&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;&quot;directory&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;dist&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;/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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Next time you run wrangler deploy, this will use the configuration in your newly generated wrangler.jsonc file&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deploy&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;h4&gt;Requirements&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;You must use Wrangler version 4.24.4 or later in order to use this feature&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 09 Sep 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare WAN - Custom IKE ID for IPsec Tunnels</title><link>https://developers.cloudflare.com/changelog/post/2025-09-08-custom-ike-id-ipsec-tunnels/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-08-custom-ike-id-ipsec-tunnels/</guid><description>&lt;p&gt;Now, Magic WAN customers can configure a custom IKE ID for their IPsec tunnels. Customers that are using Magic WAN and a VeloCloud SD-WAN device together can utilize this new feature to create a high availability configuration.&lt;/p&gt;
&lt;p&gt;This feature is available via API only. Customers can read the Magic WAN documentation to learn more about the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/configuration/common-settings/custom-ike-id-ipsec/&quot;&gt;Custom IKE ID feature and the API call to configure it&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 08 Sep 2025 00:00:00 GMT</pubDate><product>Cloudflare WAN</product><category>Cloudflare WAN</category></item><item><title>Cloudflare Fundamentals - Reminders about two-factor authentication backup codes</title><link>https://developers.cloudflare.com/changelog/post/2025-09-08-reminders-about-two-factor-authentication-backup-codes/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-08-reminders-about-two-factor-authentication-backup-codes/</guid><description>&lt;p&gt;Two-factor authentication is the best way to help protect your account from account takeovers, but if you lose your second factor, you could be locked out of your account. Lock outs are one of the top reasons customers contact Cloudflare support, and our policies often don&apos;t allow us to bypass two-factor authentication for customers that are locked out. Today we are releasing an improvement where Cloudflare will periodically remind you to securely save your backup codes so you don&apos;t get locked out in the future.&lt;/p&gt;
&lt;h4&gt;For more information&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/user-profiles/2fa/&quot;&gt;Two-factor authentication&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 08 Sep 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>WAF - WAF Release - 2025-09-08</title><link>https://developers.cloudflare.com/changelog/post/2025-09-08-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-08-waf-release/</guid><description>&lt;p&gt;&lt;strong&gt;This week&apos;s update&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This week’s focus highlights newly disclosed vulnerabilities in web frameworks, enterprise applications, and widely deployed CMS plugins. The vulnerabilities include SSRF, authentication bypass, arbitrary file upload, and remote code execution (RCE), exposing organizations to high-impact risks such as unauthorized access, system compromise, and potential data exposure. In addition, security rule enhancements have been deployed to cover general command injection and server-side injection attacks, further strengthening protections.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Next.js (CVE-2025-57822): Improper handling of redirects in custom middleware can lead to server-side request forgery (SSRF) when user-supplied headers are forwarded. Attackers could exploit this to access internal services or cloud metadata endpoints. The issue has been resolved in versions 14.2.32 and 15.4.7. Developers using custom middleware should upgrade and verify proper redirect handling in &lt;code&gt;next()&lt;/code&gt; calls.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ScriptCase (CVE-2025-47227, CVE-2025-47228): In the Production Environment extension in Netmake ScriptCase through 9.12.006 (23), two vulnerabilities allow attackers to reset admin accounts and execute system commands, potentially leading to full compromise of affected deployments.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sar2HTML (CVE-2025-34030): In Sar2HTML version 3.2.2 and earlier, insufficient input sanitization of the plot parameter allows remote, unauthenticated attackers to execute arbitrary system commands. Exploitation could compromise the underlying server and its data.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Zhiyuan OA (CVE-2025-34040): An arbitrary file upload vulnerability exists in the Zhiyuan OA platform. Improper validation in the &lt;code&gt;wpsAssistServlet&lt;/code&gt; interface allows unauthenticated attackers to upload crafted files via path traversal, which can be executed on the web server, leading to remote code execution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WordPress:Plugin:InfiniteWP Client (CVE-2020-8772): A vulnerability in the InfiniteWP Client plugin allows attackers to perform restricted actions and gain administrative control of connected WordPress sites.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These vulnerabilities could allow attackers to gain unauthorized access, execute malicious code, or take full control of affected systems. The Next.js SSRF flaw may expose internal services or cloud metadata endpoints to attackers. Exploitations of ScriptCase and Sar2HTML could result in remote code execution, administrative takeover, and full server compromise. In Zhiyuan OA, the arbitrary file upload vulnerability allows attackers to execute malicious code on the web server, potentially exposing sensitive data and applications. The authentication bypass in WordPress InfiniteWP Client enables attackers to gain administrative access, risking data exposure and unauthorized control of connected sites.&lt;/p&gt;
&lt;p&gt;Administrators are strongly advised to apply vendor patches immediately, remove unsupported software, and review authentication and access controls to mitigate these risks.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;7c5812a31fd94996b3299f7e963d7afc &lt;/td&gt;&lt;td&gt;100007D&lt;/td&gt;&lt;td&gt;Command Injection - Common Attack Commands Args&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This rule has been merged into the original rule &quot;Command Injection - Common Attack Commands&quot; (ID: 89557ce9b26e4d4dbf29e90c28345b9b ) for New WAF customers only.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;cd528243d6824f7ab56182988230a75b &lt;/td&gt;&lt;td&gt;100617&lt;/td&gt;&lt;td&gt;Next.js - SSRF - CVE:CVE-2025-57822&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;503b337dac5c409d8f833a6ba22dabf1 &lt;/td&gt;&lt;td&gt;100659_BETA&lt;/td&gt;&lt;td&gt;Common Payloads for Server-Side Template Injection - Beta&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This rule is merged into the original rule &quot;Common Payloads for Server-Side Template Injection&quot; (ID: 21c7a963e1b749e7b1753238a28a42c4 )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;6d24266148f24f5e9fa487f8b416b7ca &lt;/td&gt;&lt;td&gt;100824B&lt;/td&gt;&lt;td&gt;CrushFTP - Remote Code Execution - CVE:CVE-2025-54309 - 3&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;154b217c43d04f11a13aeff05db1fa6b &lt;/td&gt;&lt;td&gt;100848&lt;/td&gt;&lt;td&gt;ScriptCase - Auth Bypass - CVE:CVE-2025-47227&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;cad6f1c8c6d44ef59929e6532c62d330 &lt;/td&gt;&lt;td&gt;100849&lt;/td&gt;&lt;td&gt;ScriptCase - Command Injection - CVE:CVE-2025-47228&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;e7464139fd3e44938b56716bef971afd &lt;/td&gt;&lt;td&gt;100872&lt;/td&gt;&lt;td&gt;WordPress:Plugin:InfiniteWP Client - Missing Authorization - CVE:CVE-2020-8772&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;0181ebb2cc234f2d863412e1bab19b0b &lt;/td&gt;&lt;td&gt;100873&lt;/td&gt;&lt;td&gt;Sar2HTML - Command Injection - CVE:CVE-2025-34030&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;34d5c7c7b08b40eaad5b2bb3f24c0fbe &lt;/td&gt;&lt;td&gt;100875&lt;/td&gt;&lt;td&gt;Zhiyuan OA - Remote Code Execution - CVE:CVE-2025-34040&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 08 Sep 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Cloudflare WAN - Bidirectional tunnel health checks are compatible with all Magic on-ramps</title><link>https://developers.cloudflare.com/changelog/post/2025-09-05-bidirectional-health-check-any-on-ramp/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-05-bidirectional-health-check-any-on-ramp/</guid><description>&lt;p&gt;All bidirectional tunnel health check return packets are accepted by any Magic on-ramp.&lt;/p&gt;
&lt;p&gt;Previously, when a Magic tunnel had a bidirectional health check configured, the bidirectional health check would pass when the return packets came back to Cloudflare over the same tunnel that was traversed by the forward packets.&lt;/p&gt;
&lt;p&gt;There are SD-WAN devices, like VeloCloud, that do not offer controls to steer traffic over one tunnel versus another in a high availability tunnel configuration.&lt;/p&gt;
&lt;p&gt;Now, when a Magic tunnel has a bidirectional health check configured, the bidirectional health check will pass when the return packet traverses over any tunnel in a high availability configuration.&lt;/p&gt;</description><pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate><product>Cloudflare WAN</product><category>Cloudflare WAN</category></item><item><title>Workers AI - Introducing EmbeddingGemma from Google on Workers AI</title><link>https://developers.cloudflare.com/changelog/post/2025-09-05-embeddinggemma/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-05-embeddinggemma/</guid><description>&lt;p&gt;We&apos;re excited to be a launch partner alongside &lt;a href=&quot;https://developers.googleblog.com/en/introducing-embeddinggemma/&quot; target=&quot;_blank&quot;&gt;Google&lt;/a&gt; to bring their newest embedding model, &lt;strong&gt;EmbeddingGemma&lt;/strong&gt;, to Workers AI that delivers best-in-class performance for its size, enabling RAG and semantic search use cases.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/embeddinggemma-300m/&quot;&gt;&lt;code&gt;@cf/google/embeddinggemma-300m&lt;/code&gt;&lt;/a&gt; is a 300M parameter embedding model from Google, built from Gemma 3 and the same research used to create Gemini models. This multilingual model supports 100+ languages, making it ideal for RAG systems, semantic search, content classification, and clustering tasks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Using EmbeddingGemma in AI Search:&lt;/strong&gt;
Now you can leverage EmbeddingGemma directly through AI Search for your RAG pipelines. EmbeddingGemma&apos;s multilingual capabilities make it perfect for global applications that need to understand and retrieve content across different languages with exceptional accuracy.&lt;/p&gt;
&lt;p&gt;To use EmbeddingGemma for your AI Search projects:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Create&lt;/strong&gt; in the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/ai/ai-search&quot; target=&quot;_blank&quot;&gt;AI Search dashboard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Follow the setup flow for your new RAG instance&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Generate Index&lt;/strong&gt; step, open up &lt;strong&gt;More embedding models&lt;/strong&gt; and select &lt;code&gt;@cf/google/embeddinggemma-300m&lt;/code&gt; as your embedding model&lt;/li&gt;
&lt;li&gt;Complete the setup to create an AI Search&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Try it out and let us know what you think!&lt;/p&gt;</description><pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>WAF - WAF Release - 2025-09-04 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-09-04-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-04-emergency-waf-release/</guid><description>&lt;p&gt;&lt;strong&gt;This week&apos;s update&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This week, new critical vulnerabilities were disclosed in Sitecore’s Sitecore Experience Manager (XM), Sitecore Experience Platform (XP), specifically versions 9.0 through 9.3, and 10.0 through 10.4.
These flaws are caused by unsafe data deserialization and code reflection, leaving affected systems at high risk of exploitation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CVE-2025-53690: Remote Code Execution through Insecure Deserialization&lt;/li&gt;
&lt;li&gt;CVE-2025-53691: Remote Code Execution through Insecure Deserialization&lt;/li&gt;
&lt;li&gt;CVE-2025-53693: HTML Cache Poisoning through Unsafe Reflections&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Exploitation could allow attackers to execute arbitrary code remotely on the affected system and conduct cache poisoning attacks, potentially leading to further compromise. Applying the latest vendor-released solution without delay is strongly recommended.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;588edc74df1f4609b3c2f7ef0ee2c15e &lt;/td&gt;&lt;td&gt;100878&lt;/td&gt;&lt;td&gt;Sitecore - Remote Code Execution - CVE:CVE-2025-53691&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;d1bd7563e6254db48ce703807c5b669c &lt;/td&gt;&lt;td&gt;100631&lt;/td&gt;&lt;td&gt;Sitecore - Cache Poisoning - CVE:CVE-2025-53693&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ed94c7ce5301411a94a21a096c410240 &lt;/td&gt;&lt;td&gt;100879&lt;/td&gt;&lt;td&gt;Sitecore - Remote Code Execution - CVE:CVE-2025-53690&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Thu, 04 Sep 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers, Workers for Platforms - Increased static asset limits for Workers</title><link>https://developers.cloudflare.com/changelog/post/2025-09-02-increased-static-asset-limits/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-02-increased-static-asset-limits/</guid><description>&lt;p&gt;You can now upload up to &lt;strong&gt;100,000 static assets&lt;/strong&gt; per Worker version&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Paid and Workers for Platforms users can now upload up to &lt;strong&gt;100,000 static assets&lt;/strong&gt; per Worker version, a 5x increase from the previous limit of 20,000.&lt;/li&gt;
&lt;li&gt;Customers on the free plan still have the same limit as before — 20,000 static assets per version of your Worker&lt;/li&gt;
&lt;li&gt;The individual file size limit of 25 MiB remains unchanged for all customers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This increase allows you to build larger applications with more static assets without hitting limits.&lt;/p&gt;
&lt;h4&gt;Wrangler&lt;/h4&gt;
&lt;p&gt;To take advantage of the increased limits, you must use &lt;strong&gt;Wrangler version 4.34.0 or higher&lt;/strong&gt;.
Earlier versions of Wrangler will continue to enforce the previous 20,000 file limit.&lt;/p&gt;
&lt;h4&gt;Learn more&lt;/h4&gt;
&lt;p&gt;For more information about Workers static assets, see the &lt;a href=&quot;https://developers.cloudflare.com/workers/static-assets/&quot;&gt;Static Assets documentation&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/limits/#static-assets&quot;&gt;Platform Limits&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 04 Sep 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category><category>Workers for Platforms</category></item><item><title>Workers - A new, simpler REST API for Cloudflare Workers (Beta)</title><link>https://developers.cloudflare.com/changelog/post/2025-09-03-new-workers-api/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-03-new-workers-api/</guid><description>&lt;p&gt;You can now manage &lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/beta/subresources/workers/methods/create/&quot;&gt;&lt;strong&gt;Workers&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/beta/subresources/workers/models/worker/#(schema)&quot;&gt;&lt;strong&gt;Versions&lt;/strong&gt;&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/scripts/subresources/content/methods/update/&quot;&gt;&lt;strong&gt;Deployments&lt;/strong&gt;&lt;/a&gt; as separate resources with a new, resource-oriented API (Beta).&lt;/p&gt;
&lt;p&gt;This new API is supported in the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;Cloudflare Terraform provider&lt;/a&gt; and the &lt;a href=&quot;https://github.com/cloudflare/cloudflare-typescript&quot; target=&quot;_blank&quot;&gt;Cloudflare Typescript SDK&lt;/a&gt;, allowing platform teams to manage a Worker&apos;s infrastructure in Terraform, while development teams handle code deployments from a separate repository or workflow. We also designed this API with AI agents in mind, as a clear, predictable structure is essential for them to reliably build, test, and deploy applications.&lt;/p&gt;
&lt;h4&gt;Try it out&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/beta/&quot;&gt;&lt;strong&gt;New beta API endpoints&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/cloudflare-typescript&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Cloudflare TypeScript SDK v5.0.0&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/cloudflare-go&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Cloudflare Go SDK v6.0.0&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Terraform provider v5.9.0&lt;/strong&gt;&lt;/a&gt;: &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_worker&lt;/code&gt;&lt;/a&gt; , &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker_version&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_worker_version&lt;/code&gt;&lt;/a&gt;, and &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workers_deployment&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_workers_deployments&lt;/code&gt;&lt;/a&gt; resources.&lt;/li&gt;
&lt;li&gt;See full examples in our &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/infrastructure-as-code&quot;&gt;Infrastructure as Code (IaC) guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Before: Eight+ endpoints with mixed responsibilities&lt;/h4&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/api-before.VkE1i-Rj_eezro.webp&quot; alt=&quot;Before&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;The existing API was originally designed for simple, one-shot script uploads:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PUT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span&gt;/workers/scripts/&lt;/span&gt;&lt;span&gt;$SCRIPT_NAME&lt;/span&gt;&lt;span&gt;&quot;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;X-Auth-Email: &lt;/span&gt;&lt;span&gt;$CLOUDFLARE_EMAIL&lt;/span&gt;&lt;span&gt;&quot;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;X-Auth-Key: &lt;/span&gt;&lt;span&gt;$CLOUDFLARE_API_KEY&lt;/span&gt;&lt;span&gt;&quot;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Content-Type: multipart/form-data&quot;&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;-F&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;metadata={&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;main_module&quot;: &quot;worker.js&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;compatibility_date&quot;: &quot;$today$&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;}&apos;&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;-F&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;worker.js=@worker.js;type=application/javascript+module&quot;&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;This API worked for creating a basic Worker, uploading all of its code, and deploying it immediately — but came with challenges:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;A Worker couldn&apos;t exist without code&lt;/strong&gt;: To create a Worker, you had to upload its code in the same API request. This meant platform teams couldn&apos;t provision Workers with the proper settings, and then hand them off to development teams to deploy the actual code.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Several endpoints implicitly created deployments&lt;/strong&gt;: Simple updates like adding a secret or changing a script&apos;s content would implicitly create a new version and immediately deploy it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Updating a setting was confusing&lt;/strong&gt;: Configuration was scattered across eight endpoints with overlapping responsibilities.  This ambiguity made it difficult for human developers (and even more so for AI agents) to reliably update a Worker via API.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Scripts used names as primary identifiers&lt;/strong&gt;: This meant simple renames could turn into a risky migration, requiring you to create a brand new Worker and update every reference. If you were using Terraform, this could inadvertently destroy your Worker altogether.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;After: Three resources with clear boundaries&lt;/h4&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/api-after.J8u2vIcT_ZesBmg.webp&quot; alt=&quot;After&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;All endpoints now use simple JSON payloads, with script content embedded as &lt;code&gt;base64&lt;/code&gt;-encoded strings -- a more consistent and reliable approach than the previous &lt;code&gt;multipart/form-data&lt;/code&gt; format.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Worker&lt;/strong&gt;: The parent resource representing your application. It has a stable UUID and holds persistent settings like &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;tags&lt;/code&gt;, and &lt;code&gt;logpush&lt;/code&gt;. You can now create a Worker to establish its identity and settings &lt;strong&gt;before&lt;/strong&gt; any code is uploaded.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Version&lt;/strong&gt;: An immutable snapshot of your code and its specific configuration, like bindings and &lt;code&gt;compatibility_date&lt;/code&gt;. Creating a new version is a safe action that doesn&apos;t affect live traffic.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Deployment&lt;/strong&gt;: An explicit action that directs traffic to a specific version.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/beta/subresources/workers/&quot;&gt;Workers&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/beta/subresources/workers/subresources/versions/&quot;&gt;Versions&lt;/a&gt; use the new &lt;code&gt;/workers/&lt;/code&gt; beta endpoints, while &lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/scripts/subresources/deployments/&quot;&gt;Deployments&lt;/a&gt; remain on the existing &lt;code&gt;/scripts/&lt;/code&gt; endpoint. Pair the new endpoints with the existing Deployment API for a complete workflow.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;h4&gt;Why this matters&lt;/h4&gt;
&lt;h4&gt;You can now create Workers before uploading code&lt;/h4&gt;
&lt;p&gt;Workers are now standalone resources that can be created and configured without any code. Platform teams can provision Workers with the right settings, then hand them off to development teams for implementation.&lt;/p&gt;
&lt;h4&gt;Example: Typescript SDK&lt;/h4&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;// Step 1: Platform team creates the Worker resource (no code needed)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;worker&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;workers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;beta&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;workers&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;{&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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;payment-service&quot;&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;account_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;...&quot;&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;observability&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;enabled&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&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;;&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;// Step 2: Development team adds code and creates a version later&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;workers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;beta&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;workers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;versions&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;worker&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;id&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;account_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;...&quot;&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;main_module&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;worker.js&quot;&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;compatibility_date&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;$today&quot;&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;bindings&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;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;modules&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;/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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;worker.js&quot;&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;content_type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/javascript+module&quot;&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;content_base64&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Buffer&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;scriptContent&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;base64&quot;&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;/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;;&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;// Step 3: Deploy explicitly when ready&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deployment&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;workers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;scripts&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;deployments&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;worker&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;name&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;account_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;...&quot;&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;strategy&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;percentage&quot;&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;versions&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;/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;percentage&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;100&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;version_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;version&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;id&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;]&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h4&gt;Example: Terraform&lt;/h4&gt;
&lt;p&gt;If you use Terraform, you can now declare the Worker in your Terraform configuration and manage configuration outside of Terraform in your Worker&apos;s &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/configuration/&quot;&gt;&lt;code&gt;wrangler.jsonc&lt;/code&gt; file&lt;/a&gt; and deploy code changes using &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;tf&quot;&gt;&lt;code class=&quot;language-tf&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_worker&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_worker&quot;&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;account_id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;...&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;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-important-service&quot;&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;# Manage Versions and Deployments here or outside of Terraform&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# resource &quot;cloudflare_worker_version&quot; &quot;my_worker_version&quot; {}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# resource &quot;cloudflare_workers_deployment&quot; &quot;my_worker_deployment&quot; {}&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;h4&gt;Deployments are always explicit, never implicit&lt;/h4&gt;
&lt;p&gt;Creating a version and deploying it are now always explicit, separate actions - never implicit side effects. To update version-specific settings (like bindings), you create a new version with those changes. The existing deployed version remains unchanged until you explicitly deploy the new one.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Step 1: Create a new version with updated settings (doesn&apos;t affect live traffic)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/workers/workers/{id}/versions&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;&quot;compatibility_date&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$today&lt;/span&gt;&lt;span&gt;&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;&quot;bindings&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MY_NEW_ENV_VAR&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;&quot;text&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;new_value&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;&quot;type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;plain_text&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;/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;&quot;modules&quot;&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Step 2: Explicitly deploy when ready (now affects live traffic)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/workers/scripts/{script_name}/deployments&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;&quot;strategy&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;percentage&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;&quot;versions&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;percentage&quot;&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;&quot;version_id&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;new_version_id&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;/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;h4&gt;Settings are clearly organized by scope&lt;/h4&gt;
&lt;p&gt;Configuration is now logically divided: &lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/beta/subresources/workers/&quot;&gt;&lt;strong&gt;Worker settings&lt;/strong&gt;&lt;/a&gt; (like &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;tags&lt;/code&gt;) persist across all versions, while &lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/beta/subresources/workers/subresources/versions/&quot;&gt;&lt;strong&gt;Version settings&lt;/strong&gt;&lt;/a&gt; (like &lt;code&gt;bindings&lt;/code&gt; and &lt;code&gt;compatibility_date&lt;/code&gt;) are specific to each code snapshot.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Worker settings (the parent resource)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PUT&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/workers/workers/{id}&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;&quot;name&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;payment-service&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;&quot;tags&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;production&quot;&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;&quot;logpush&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Version settings (the &quot;code&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/workers/workers/{id}/versions&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;&quot;compatibility_date&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;$today&lt;/span&gt;&lt;span&gt;&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;&quot;bindings&quot;&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;&quot;modules&quot;&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;h4&gt;&lt;code&gt;/workers&lt;/code&gt; API endpoints now support UUIDs (in addition to names)&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;/workers/workers/&lt;/code&gt; path now supports addressing a Worker by both its immutable UUID and its mutable name.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Both work for the same Worker&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;GET&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/workers/workers/29494978e03748669e8effb243cf2515&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# UUID (stable for automation)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;GET&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/workers/workers/payment-service&lt;/span&gt;&lt;span&gt;                  &lt;/span&gt;&lt;span&gt;# Name (convenient for humans)&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;This dual approach means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Developers can use readable names for debugging.&lt;/li&gt;
&lt;li&gt;Automation can rely on stable UUIDs to prevent errors when Workers are renamed.&lt;/li&gt;
&lt;li&gt;Terraform can rename Workers without destroying and recreating them.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Learn more&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/platform/infrastructure-as-code&quot;&gt;Infrastructure as Code (IaC) guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/beta/&quot;&gt;API documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/versions-and-deployments/&quot;&gt;Versions and Deployments overview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Technical notes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;The pre-existing Workers REST API remains fully supported. Once the new API exits beta, we&apos;ll provide a migration timeline with ample notice and comprehensive migration guides.&lt;/li&gt;
&lt;li&gt;Existing Terraform resources and SDK methods will continue to be fully supported through the current major version.&lt;/li&gt;
&lt;li&gt;While the Deployments API currently remains on the &lt;code&gt;/scripts/&lt;/code&gt; endpoint, we plan to introduce a new Deployments endpoint under &lt;code&gt;/workers/&lt;/code&gt; to match the new API structure.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 04 Sep 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare Fundamentals - Introducing new headers for rate limiting on Cloudflare&apos;s API</title><link>https://developers.cloudflare.com/changelog/post/2025-09-03-rate-limiting-improvement/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-03-rate-limiting-improvement/</guid><description>&lt;p&gt;Cloudflare&apos;s API now supports rate limiting headers using the pattern developed by the &lt;a href=&quot;https://ietf-wg-httpapi.github.io/ratelimit-headers/draft-ietf-httpapi-ratelimit-headers.html&quot; target=&quot;_blank&quot;&gt;IETF draft on rate limiting&lt;/a&gt;. This allows API consumers to know how many more calls are left until the rate limit is reached, as well as how long you will need to wait until more capacity is available.&lt;/p&gt;
&lt;p&gt;Our SDKs automatically work with these new headers, backing off when rate limits are approached. There is no action required for users of the latest Cloudflare SDKs to take advantage of this.&lt;/p&gt;
&lt;p&gt;As always, if you need any help with rate limits, please contact Support.&lt;/p&gt;
&lt;h4&gt;Changes&lt;/h4&gt;
&lt;h4&gt;New Headers&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Headers that are always returned:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ratelimit&lt;/code&gt;: List of service limit items, composed of the limit name, the remaining quota (&lt;code&gt;r&lt;/code&gt;) and the time next window resets (&lt;code&gt;t&lt;/code&gt;). For example: &lt;code&gt;&quot;default&quot;;r=50;t=30&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ratelimit-Policy&lt;/code&gt;: List of quota policy items, composed of the policy name, the total quota (&lt;code&gt;q&lt;/code&gt;) and the time window the quota applies to (&lt;code&gt;w&lt;/code&gt;). For example: &lt;code&gt;&quot;burst&quot;;q=100;w=60&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Returned only when a rate limit has been reached (error code: 429):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Retry-After: Number of Seconds until more capacity is available, rounded up&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;SDK Back offs&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;All of Cloudflare&apos;s latest SDKs will automatically respond to the headers, instituting a backoff when limits are approached.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;GraphQL and Edge APIs&lt;/h4&gt;
&lt;p&gt;These new headers and back offs are only available for Cloudflare REST APIs, and will not affect GraphQL.&lt;/p&gt;
&lt;h4&gt;For more information&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/api/reference/limits/&quot; target=&quot;_blank&quot;&gt;Rate limits at Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 03 Sep 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Log Explorer - Logging headers and cookies using custom fields</title><link>https://developers.cloudflare.com/changelog/post/2025-09-03-log-headers-and-cookies/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-03-log-headers-and-cookies/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/log-explorer/&quot;&gt;Log Explorer&lt;/a&gt; now supports logging and filtering on header or cookie fields in the &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/datasets/zone/http_requests/&quot;&gt;&lt;code&gt;http_requests&lt;/code&gt; dataset&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Create a custom field to log desired header or cookie values into the &lt;code&gt;http_requests&lt;/code&gt; dataset and Log Explorer will import these as searchable fields. Once configured, use the custom SQL editor in Log Explorer to view or filter on these requests.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/edit-custom-fields.Cy4qXSpL_1ma19s.webp&quot; alt=&quot;Edit Custom fields&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;For more details, refer to &lt;a href=&quot;https://developers.cloudflare.com/log-explorer/log-search/#headers-and-cookies&quot;&gt;Headers and cookies&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 03 Sep 2025 00:00:00 GMT</pubDate><product>Log Explorer</product><category>Log Explorer</category></item><item><title>Cloudflare Tunnel, Cloudflare Tunnel for SASE - Cloudflare Tunnel and Networks API will no longer return deleted resources by default starting December 1, 2025</title><link>https://developers.cloudflare.com/changelog/post/2025-09-02-tunnel-networks-list-endpoints-new-default/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-02-tunnel-networks-list-endpoints-new-default/</guid><description>&lt;p&gt;Starting &lt;strong&gt;December 1, 2025&lt;/strong&gt;, list endpoints for the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/zero_trust/subresources/tunnels/&quot;&gt;Cloudflare Tunnel API&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/api/resources/zero_trust/subresources/networks/&quot;&gt;Zero Trust Networks API&lt;/a&gt; will no longer return deleted tunnels, routes, subnets and virtual networks by default. This change makes the API behavior more intuitive by only returning active resources unless otherwise specified.&lt;/p&gt;
&lt;p&gt;No action is required if you already explicitly set &lt;code&gt;is_deleted=false&lt;/code&gt; or if you only need to list active resources.&lt;/p&gt;
&lt;p&gt;This change affects the following API endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;List all tunnels: &lt;a href=&quot;https://developers.cloudflare.com/api/resources/zero_trust/subresources/tunnels/methods/list/&quot;&gt;&lt;code&gt;GET /accounts/{account_id}/tunnels&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;List &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/&quot;&gt;Cloudflare Tunnels&lt;/a&gt;: &lt;a href=&quot;https://developers.cloudflare.com/api/resources/zero_trust/subresources/tunnels/subresources/cloudflared/methods/list/&quot;&gt;&lt;code&gt;GET /accounts/{account_id}/cfd_tunnel&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;List &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/warp-connector/&quot;&gt;WARP Connector&lt;/a&gt; tunnels: &lt;a href=&quot;https://developers.cloudflare.com/api/resources/zero_trust/subresources/tunnels/subresources/warp_connector/methods/list/&quot;&gt;&lt;code&gt;GET /accounts/{account_id}/warp_connector&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;List tunnel routes: &lt;a href=&quot;https://developers.cloudflare.com/api/resources/zero_trust/subresources/networks/subresources/routes/methods/list/&quot;&gt;&lt;code&gt;GET /accounts/{account_id}/teamnet/routes&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;List subnets: &lt;a href=&quot;https://developers.cloudflare.com/api/resources/zero_trust/subresources/networks/subresources/subnets/methods/list/&quot;&gt;&lt;code&gt;GET /accounts/{account_id}/zerotrust/subnets&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;List virtual networks: &lt;a href=&quot;https://developers.cloudflare.com/api/resources/zero_trust/subresources/networks/subresources/virtual_networks/methods/list/&quot;&gt;&lt;code&gt;GET /accounts/{account_id}/teamnet/virtual_networks&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;What is changing?&lt;/h4&gt;
&lt;p&gt;The default behavior of the &lt;code&gt;is_deleted&lt;/code&gt; query parameter will be updated.&lt;/p&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Scenario&lt;/th&gt;&lt;th&gt;Previous behavior (before December 1, 2025)&lt;/th&gt;&lt;th&gt;New behavior (from December 1, 2025)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;is_deleted&lt;/code&gt; parameter is omitted&lt;/td&gt;&lt;td&gt;Returns &lt;strong&gt;active &amp;#x26; deleted&lt;/strong&gt; tunnels, routes, subnets and virtual networks&lt;/td&gt;&lt;td&gt;Returns &lt;strong&gt;only active&lt;/strong&gt; tunnels, routes, subnets and virtual networks&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h4&gt;Action required&lt;/h4&gt;
&lt;p&gt;If you need to retrieve deleted (or all) resources, please update your API calls to explicitly include the &lt;code&gt;is_deleted&lt;/code&gt; parameter before &lt;strong&gt;December 1, 2025&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;To get a list of only deleted resources, you must now explicitly add the &lt;code&gt;is_deleted=true&lt;/code&gt; query parameter to your request:&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;# Example: Get ONLY deleted Tunnels&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span&gt;/tunnels?is_deleted=true&quot;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Authorization: Bearer &lt;/span&gt;&lt;span&gt;$API_TOKEN&lt;/span&gt;&lt;span&gt;&quot;&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;# Example: Get ONLY deleted Virtual Networks&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span&gt;$ACCOUNT_ID&lt;/span&gt;&lt;span&gt;/teamnet/virtual_networks?is_deleted=true&quot;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Authorization: Bearer &lt;/span&gt;&lt;span&gt;$API_TOKEN&lt;/span&gt;&lt;span&gt;&quot;&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;Following this change, retrieving a complete list of both active and deleted resources will require two separate API calls: one to get active items (by omitting the parameter or using &lt;code&gt;is_deleted=false&lt;/code&gt;) and one to get deleted items (&lt;code&gt;is_deleted=true&lt;/code&gt;).&lt;/p&gt;
&lt;h4&gt;Why we’re making this change&lt;/h4&gt;
&lt;p&gt;This update is based on user feedback and aims to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Create a more intuitive default:&lt;/strong&gt; Aligning with common API design principles where list operations return only active resources by default.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduce unexpected results:&lt;/strong&gt; Prevents users from accidentally operating on deleted resources that were returned unexpectedly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improve performance:&lt;/strong&gt; For most users, the default query result will now be smaller and more relevant.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To learn more, please visit the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/zero_trust/subresources/tunnels/&quot;&gt;Cloudflare Tunnel API&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/api/resources/zero_trust/subresources/networks/&quot;&gt;Zero Trust Networks API&lt;/a&gt; documentation.&lt;/p&gt;</description><pubDate>Tue, 02 Sep 2025 00:00:00 GMT</pubDate><product>Cloudflare Tunnel</product><category>Cloudflare Tunnel</category><category>Cloudflare Tunnel for SASE</category></item><item><title>Email security - Updated Email security roles</title><link>https://developers.cloudflare.com/changelog/post/2025-09-01-updated-new-roles/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-01-updated-new-roles/</guid><description>&lt;p&gt;To provide more granular controls, we refined the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/roles-permissions/#email-security-roles&quot;&gt;existing roles&lt;/a&gt; for Email security and launched a new Email security role as well.&lt;/p&gt;
&lt;p&gt;All Email security roles no longer have read or write access to any of the other Zero Trust products:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Email Configuration Admin&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email Integration Admin&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email security Read Only&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email security Analyst&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email security Policy Admin&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email security Reporting&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To configure &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/email-security/outbound-dlp/&quot;&gt;Data Loss Prevention (DLP)&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/remote-browser-isolation/setup/clientless-browser-isolation/#set-up-clientless-web-isolation&quot;&gt;Remote Browser Isolation (RBI)&lt;/a&gt;, you now need to be an admin for the Zero Trust dashboard with the &lt;strong&gt;Cloudflare Zero Trust&lt;/strong&gt; role.&lt;/p&gt;
&lt;p&gt;Also through customer feedback, we have created a new additive role to allow &lt;strong&gt;Email security Analyst&lt;/strong&gt; to create, edit, and delete Email security policies, without needing to provide access via the &lt;strong&gt;Email Configuration Admin&lt;/strong&gt; role. This role is called &lt;strong&gt;Email security Policy Admin&lt;/strong&gt;, which can read all settings, but has write access to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/email-security/settings/detection-settings/allow-policies/&quot;&gt;allow policies&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/email-security/settings/detection-settings/trusted-domains/&quot;&gt;trusted domains&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/email-security/settings/detection-settings/blocked-senders/&quot;&gt;blocked senders&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This feature is available across these Email security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Advantage&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 01 Sep 2025 23:25:49 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>WAF - WAF Release - 2025-09-01</title><link>https://developers.cloudflare.com/changelog/post/2025-09-01-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-09-01-waf-release/</guid><description>&lt;p&gt;&lt;strong&gt;This week&apos;s update&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This week, a critical vulnerability was disclosed in Fortinet FortiWeb (versions 7.6.3 and below, versions 7.4.7 and below, versions 7.2.10 and below, and versions 7.0.10 and below), linked to improper parameter handling that could allow unauthorized access.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fortinet FortiWeb (CVE-2025-52970): A vulnerability may allow an unauthenticated remote attacker with access to non-public information to log in as any existing user on the device via a specially crafted request.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Exploitation could allow an unauthenticated attacker to impersonate any existing user on the device, potentially enabling them to modify system settings or exfiltrate sensitive information, posing a serious security risk. Upgrading to the latest vendor-released version is strongly recommended.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;636b145a49a84946b990d4fac49b7cf8 &lt;/td&gt;&lt;td&gt;100586&lt;/td&gt;&lt;td&gt;Fortinet FortiWeb - Auth Bypass - CVE:CVE-2025-52970&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;b5ef1ace353841a0856b5e07790c9dde &lt;/td&gt;&lt;td&gt;100136C&lt;/td&gt;&lt;td&gt;XSS - JavaScript - Headers and Body&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Rule metadata description refined. Detection unchanged.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 01 Sep 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Cache - Smart Tiered Cache Fallback to Generic</title><link>https://developers.cloudflare.com/changelog/post/2025-08-29-smart-tiered-cache-fallback-to-generic/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-29-smart-tiered-cache-fallback-to-generic/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/tiered-cache/#smart-tiered-cache&quot;&gt;Smart Tiered Cache&lt;/a&gt; now falls back to &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/tiered-cache/#generic-global-tiered-cache&quot;&gt;Generic Tiered Cache&lt;/a&gt; when the origin location cannot be determined, improving cache precision for your content.&lt;/p&gt;
&lt;p&gt;Previously, when Smart Tiered Cache was unable to select the optimal upper tier (such as when origins are masked by Anycast IPs), latency could be negatively impacted. This fallback now uses Generic Tiered Cache instead, providing better performance and cache efficiency.&lt;/p&gt;
&lt;h4&gt;How it works&lt;/h4&gt;
&lt;p&gt;When Smart Tiered Cache falls back to Generic Tiered Cache:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Multiple upper-tiers&lt;/strong&gt;: Uses all of Cloudflare&apos;s global data centers as a network of upper-tiers instead of a single optimal location.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Distributed cache requests&lt;/strong&gt;: Lower-tier data centers can query any available upper-tier for cached content.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved global coverage&lt;/strong&gt;: Provides better cache hit ratios across geographically distributed visitors.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic fallback&lt;/strong&gt;: Seamlessly transitions when origin location cannot be determined, such as with Anycast-masked origins.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Benefits&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Preserves high performance during fallback&lt;/strong&gt;: Smart Tiered Cache now maintains strong cache efficiency even when optimal upper tier selection is not possible.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Minimizes latency impact&lt;/strong&gt;: Automatically uses Generic Tiered Cache topology to keep performance high when origin location cannot be determined.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seamless experience&lt;/strong&gt;: No configuration changes or intervention required when fallback occurs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved resilience&lt;/strong&gt;: Smart Tiered Cache remains effective across diverse origin infrastructure, including Anycast-masked origins.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;This improvement is automatically applied to all zones using &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/tiered-cache/&quot;&gt;Smart Tiered Cache&lt;/a&gt;. No action is required on your part.&lt;/p&gt;</description><pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>Cloudflare One Client - Cloudflare One WARP Diagnostic AI Analyzer</title><link>https://developers.cloudflare.com/changelog/post/2025-08-29-warp-ai-diag-analyzer/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-29-warp-ai-diag-analyzer/</guid><description>&lt;p&gt;We&apos;re excited to share a new AI feature, the &lt;a href=&quot;https://blog.cloudflare.com/AI-troubleshoot-warp-and-network-connectivity-issues/&quot; target=&quot;_blank&quot;&gt;WARP diagnostic analyzer&lt;/a&gt;, to help you troubleshoot and resolve WARP connectivity issues faster. This beta feature is now available in the &lt;a href=&quot;https://one.dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Zero Trust dashboard&lt;/a&gt; to all users. The AI analyzer makes it easier for you to identify the root cause of client connectivity issues by parsing &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/dex/remote-captures/#start-a-remote-capture&quot;&gt;remote captures&lt;/a&gt; of &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/diagnostic-logs/#warp-diag-logs&quot;&gt;WARP diagnostic logs&lt;/a&gt;. The WARP diagnostic analyzer provides a summary of impact that may be experienced on the device, lists notable events that may contribute to performance issues, and recommended troubleshooting steps and articles to help you resolve these issues. Refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/dex/remote-captures/#diagnostics-analyzer-beta&quot;&gt;WARP diagnostics analyzer (beta)&lt;/a&gt; to learn more about how to maximize using the WARP diagnostic analyzer to troubleshoot the WARP client.&lt;/p&gt;</description><pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Digital Experience Monitoring - DEX MCP Server</title><link>https://developers.cloudflare.com/changelog/post/2025-08-29-dex-mcp-server/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-29-dex-mcp-server/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/dex/&quot;&gt;Digital Experience Monitoring (DEX)&lt;/a&gt; provides visibility into device connectivity and performance across your Cloudflare SASE deployment.&lt;/p&gt;
&lt;p&gt;We&apos;ve released an MCP server &lt;a href=&quot;https://cloudflare.com/learning/ai/what-is-model-context-protocol-mcp/&quot; target=&quot;_blank&quot;&gt;(Model Context Protocol)&lt;/a&gt; for DEX.&lt;/p&gt;
&lt;p&gt;The DEX MCP server is an AI tool that allows customers to ask a question like, &quot;Show me the connectivity and performance metrics for the device used by carly‌@acme.com&quot;, and receive an answer that contains data from the DEX API.&lt;/p&gt;
&lt;p&gt;Any Cloudflare One customer using a Free, PayGo, or Enterprise account can access the DEX MCP Server. This feature is available to everyone.&lt;/p&gt;
&lt;p&gt;Customers can test the new DEX MCP server in less than one minute. To learn more, read the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/dex/dex-mcp-server/&quot;&gt;DEX MCP server documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate><product>Digital Experience Monitoring</product><category>Digital Experience Monitoring</category></item><item><title>Cloudflare Fundamentals, Terraform - Terraform v5.9 now available</title><link>https://developers.cloudflare.com/changelog/post/2025-08-29-terrform-v59-provider/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-29-terrform-v59-provider/</guid><description>&lt;p&gt;Earlier this year, we announced the launch of the new &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-02-03-terraform-v5-provider/&quot;&gt;Terraform v5 Provider&lt;/a&gt;. We are aware of the high number of &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;issues&lt;/a&gt; reported by the Cloudflare community related to the v5 release. We have committed to releasing improvements on a 2 week cadence to ensure its stability and reliability, including the v5.9 release. We have also pivoted from an issue-to-issue approach to a resource-per-resource approach - we will be focusing on specific resources for every release, stabilizing the release, and closing all associated bugs with that resource before moving onto resolving migration issues.&lt;/p&gt;
&lt;p&gt;Thank you for continuing to raise issues. We triage them weekly and they help make our products stronger.&lt;/p&gt;
&lt;p&gt;This release includes a new resource, &lt;code&gt;cloudflare_snippet&lt;/code&gt;, which replaces &lt;code&gt;cloudflare_snippets&lt;/code&gt;. &lt;code&gt;cloudflare_snippet&lt;/code&gt; is now considered deprecated but can still be used. Please utilize &lt;code&gt;cloudflare_snippet&lt;/code&gt; as soon as possible.&lt;/p&gt;
&lt;h4&gt;Changes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Resources stabilized:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zone_setting&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_worker_script&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_worker_route&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tiered_cache&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NEW&lt;/strong&gt; resource &lt;code&gt;cloudflare_snippet&lt;/code&gt; which should be used in place of &lt;code&gt;cloudflare_snippets&lt;/code&gt;. &lt;code&gt;cloudflare_snippets&lt;/code&gt; is now deprecated. This enables the management of Cloudflare&apos;s snippet functionality through Terraform.&lt;/li&gt;
&lt;li&gt;DNS Record Improvements: Enhanced handling of DNS record drift detection&lt;/li&gt;
&lt;li&gt;Load Balancer Fixes: Resolved &lt;code&gt;created_on&lt;/code&gt; field inconsistencies and improved pool configuration handling&lt;/li&gt;
&lt;li&gt;Bot Management: Enhanced auto-update model state consistency and fight mode configurations&lt;/li&gt;
&lt;li&gt;Other bug fixes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a more detailed look at all of the changes, refer to the
&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/releases/tag/v5.9.0&quot; target=&quot;_blank&quot;&gt;changelog&lt;/a&gt; in GitHub.&lt;/p&gt;
&lt;h4&gt;Issues Closed&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5921&quot; target=&quot;_blank&quot;&gt;#5921: In cloudflare_ruleset removing an existing rule causes recreation of later rules&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5904&quot; target=&quot;_blank&quot;&gt;#5904: cloudflare_zero_trust_access_application is not idempotent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5898&quot; target=&quot;_blank&quot;&gt;#5898: (cloudflare_workers_script) Durable Object migrations not applied&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5892&quot; target=&quot;_blank&quot;&gt;#5892: cloudflare_workers_script secret_text environment variable gets replaced on every deploy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5891&quot; target=&quot;_blank&quot;&gt;#5891: cloudflare_zone suddenly started showing drift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5882&quot; target=&quot;_blank&quot;&gt;#5882: cloudflare_zero_trust_list always marked for change due to read only attributes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5879&quot; target=&quot;_blank&quot;&gt;#5879: cloudflare_zero_trust_gateway_certificate unable to manage resource (cant mark as active/inactive)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5858&quot; target=&quot;_blank&quot;&gt;#5858: cloudflare_dns_records is always updated in-place&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5839&quot; target=&quot;_blank&quot;&gt;#5839: Recurring change on cloudflare_zero_trust_gateway_policy after upgrade to V5 provider &amp;#x26; also setting expiration fails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5811&quot; target=&quot;_blank&quot;&gt;#5811: Reusable policies are imported as inline type for cloudflare_zero_trust_access_application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5795&quot; target=&quot;_blank&quot;&gt;#5795: cloudflare_zone_setting inconsistent value of &quot;editable&quot; upon apply&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5789&quot; target=&quot;_blank&quot;&gt;#5789: Pagination issue fetching all policies in &quot;cloudflare_zero_trust_access_policies&quot; data source&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5770&quot; target=&quot;_blank&quot;&gt;#5770: cloudflare_zero_trust_access_application type warp diff on every apply&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5765&quot; target=&quot;_blank&quot;&gt;#5765: V5 / cloudflare_zone_dnssec fails with HTTP/400 &quot;Malformed request body&quot;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5755&quot; target=&quot;_blank&quot;&gt;#5755: Unable to manage Cloudflare managed WAF rules via Terraform&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5738&quot; target=&quot;_blank&quot;&gt;#5738: v4 to v5 upgrade failing Error: no schema available AND Unable to Read Previously Saved State for UpgradeResourceState&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5727&quot; target=&quot;_blank&quot;&gt;#5727: cloudflare_ruleset http_request_cache_settings bypass mismatch between dashboard and terraform&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5700&quot; target=&quot;_blank&quot;&gt;#5700: cloudflare_account_member invalid type &apos;string&apos; for field &apos;roles&apos;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you have an unaddressed issue with the provider, we encourage you to check the &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues&quot; target=&quot;_blank&quot;&gt;open issues&lt;/a&gt; and open a new issue if one does not already exist for what you are experiencing.&lt;/p&gt;
&lt;h4&gt;Upgrading&lt;/h4&gt;
&lt;p&gt;We suggest holding off on migration to v5 while we work on stabilization. This help will you avoid any blocking issues while the Terraform resources are actively being stabilized.&lt;/p&gt;
&lt;p&gt;If you&apos;d like more information on migrating from v4 to v5, please make use of the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/guides/version-5-upgrade&quot; target=&quot;_blank&quot;&gt;migration guide&lt;/a&gt;. We have provided automated migration scripts using Grit which simplify the transition. These do not support implementations which use Terraform modules, so customers making use of modules need to migrate manually. Please make use of &lt;code&gt;terraform plan&lt;/code&gt; to test
your changes before applying, and let us know if you encounter any additional issues by reporting to our &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;For more info&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;Terraform provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/terraform/&quot;&gt;Documentation on using Terraform with Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Terraform</category></item><item><title>WAF - WAF Release - 2025-08-29 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-08-29-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-29-emergency-waf-release/</guid><description>&lt;p&gt;&lt;strong&gt;This week&apos;s update&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This week, new critical vulnerabilities were disclosed in Next.js’s image optimization functionality, exposing a broad range of production environments to risks of data exposure and cache manipulation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;CVE-2025-55173: Arbitrary file download from the server via image optimization.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CVE-2025-57752: Cache poisoning leading to unauthorized data disclosure.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Exploitation could expose sensitive files, leak user or backend data, and undermine application trust. Given Next.js’s wide use, immediate patching and cache hardening are strongly advised.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ea55f8aac44246cc9b827eea9ff4bfe3 &lt;/td&gt;&lt;td&gt;100613&lt;/td&gt;&lt;td&gt;Next.js - Dangerous File Download - CVE:CVE-2025-55173&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;e2b2d77a79cc4a76bf7ba53d69b9ea7d &lt;/td&gt;&lt;td&gt;100616&lt;/td&gt;&lt;td&gt;Next.js - Information Disclosure - CVE:CVE-2025-57752&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a new detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Fri, 29 Aug 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>AI Crawl Control - Enhanced crawler insights and custom 402 responses</title><link>https://developers.cloudflare.com/changelog/post/2025-08-27-ai-crawl-control-launch/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-27-ai-crawl-control-launch/</guid><description>&lt;p&gt;We improved AI crawler management with detailed analytics and introduced custom HTTP 402 responses for blocked crawlers. AI Audit has been renamed to AI Crawl Control and is now generally available.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enhanced Crawlers tab:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;View total allowed and blocked requests for each AI crawler&lt;/li&gt;
&lt;li&gt;Trend charts show crawler activity over your selected time range per crawler&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ai-crawl-control-table.BDr0Qd-5_ZKex0W.webp&quot; alt=&quot;Updated AI Crawl Control table showing request counts and trend charts&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;strong&gt;Custom block responses (paid plans):&lt;/strong&gt;
You can now return HTTP 402 &quot;Payment Required&quot; responses when blocking AI crawlers, enabling direct communication with crawler operators about licensing terms.&lt;/p&gt;
&lt;p&gt;For users on paid plans, when blocking AI crawlers you can configure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Response code:&lt;/strong&gt; Choose between 403 Forbidden or 402 Payment Required&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Response body:&lt;/strong&gt; Add a custom message with your licensing contact information&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ai-crawl-control-block-response.L4duQj7-_Z2mHb4X.webp&quot; alt=&quot;AI Crawl Control block response configuration interface&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Example 402 response:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;http&quot;&gt;&lt;code class=&quot;language-http&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;HTTP 402 Payment Required&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Date&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Mon, 24 Aug 2025 12:56:49 GMT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Content-type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;application/json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Server&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cloudflare&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Cf-Ray&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;967e8da599d0c3fa-EWR&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Cf-Team&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2902f6db750000c3fa1e2ef400000001&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Please contact the site owner for access.&quot;&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;</description><pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate><product>AI Crawl Control</product><category>AI Crawl Control</category></item><item><title>Gateway, Cloudflare One - Shadow IT - SaaS analytics dashboard</title><link>https://developers.cloudflare.com/changelog/post/2025-08-27-shadow-it-analytics/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-27-shadow-it-analytics/</guid><description>&lt;p&gt;Zero Trust has significantly upgraded its &lt;strong&gt;Shadow IT analytics&lt;/strong&gt;, providing you with unprecedented visibility into your organizations use of SaaS tools. With this dashboard, you can review who is using an application and volumes of data transfer to the application.&lt;/p&gt;
&lt;p&gt;You can review these metrics against application type, such as Artificial Intelligence or Social Media. You can also mark applications with an approval status, including &lt;strong&gt;Unreviewed&lt;/strong&gt;, &lt;strong&gt;In Review&lt;/strong&gt;, &lt;strong&gt;Approved&lt;/strong&gt;, and &lt;strong&gt;Unapproved&lt;/strong&gt; designating how they can be used in your organization.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/shadow-it-analytics.BLNnG72w_Z1vDznE.webp&quot; alt=&quot;Cloudflare One Analytics Dashboards&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;These application statuses can also be used in Gateway HTTP policies, so you can block, isolate, limit uploads and downloads, and more based on the application status.&lt;/p&gt;
&lt;p&gt;Both the analytics and policies are accessible in the Cloudflare &lt;a href=&quot;https://one.dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Zero Trust dashboard&lt;/a&gt;, empowering organizations with better visibility and control.&lt;/p&gt;</description><pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category><category>Cloudflare One</category></item><item><title>Workers AI - Deepgram and Leonardo partner models now available on Workers AI</title><link>https://developers.cloudflare.com/changelog/post/2025-08-27-partner-models/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-27-partner-models/</guid><description>&lt;p&gt;New state-of-the-art models have landed on Workers AI! This time, we&apos;re introducing new &lt;strong&gt;partner models&lt;/strong&gt; trained by our friends at &lt;a href=&quot;https://deepgram.com&quot; target=&quot;_blank&quot;&gt;Deepgram&lt;/a&gt; and &lt;a href=&quot;https://leonardo.ai&quot; target=&quot;_blank&quot;&gt;Leonardo&lt;/a&gt;, hosted on Workers AI infrastructure.&lt;/p&gt;
&lt;p&gt;As well, we&apos;re introuding a new turn detection model that enables you to detect when someone is done speaking — useful for building voice agents!&lt;/p&gt;
&lt;p&gt;Read the &lt;a href=&quot;https://blog.cloudflare.com/workers-ai-partner-models&quot; target=&quot;_blank&quot;&gt;blog&lt;/a&gt; for more details and check out some of the new models on our platform:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/aura-1&quot;&gt;&lt;code&gt;@cf/deepgram/aura-1&lt;/code&gt;&lt;/a&gt; is a text-to-speech model that allows you to input text and have it come to life in a customizable voice&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/nova-3&quot;&gt;&lt;code&gt;@cf/deepgram/nova-3&lt;/code&gt;&lt;/a&gt; is speech-to-text model that transcribes multilingual audio at a blazingly fast speed&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/smart-turn-v2&quot;&gt;&lt;code&gt;@cf/pipecat-ai/smart-turn-v2&lt;/code&gt;&lt;/a&gt; helps you detect when someone is done speaking&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/lucid-origin&quot;&gt;&lt;code&gt;@cf/leonardo/lucid-origin&lt;/code&gt;&lt;/a&gt; is a text-to-image model that generates images with sharp graphic design, stunning full-HD renders, or highly specific creative direction&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/phoenix-1.0&quot;&gt;&lt;code&gt;@cf/leonardo/phoenix-1.0&lt;/code&gt;&lt;/a&gt; is a text-to-image model with exceptional prompt adherence and coherent text&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can filter out new partner models with the &lt;code&gt;Partner&lt;/code&gt; capability on our &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models&quot;&gt;Models&lt;/a&gt; page.&lt;/p&gt;
&lt;p&gt;As well, we&apos;re introducing WebSocket support for some of our audio models, which you can filter though the &lt;code&gt;Realtime&lt;/code&gt; capability on our &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models&quot;&gt;Models&lt;/a&gt; page. WebSockets allows you to create a bi-directional connection to our inference server with low latency — perfect for those that are building voice agents.&lt;/p&gt;
&lt;p&gt;An example python snippet on how to use WebSockets with our new Aura model:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import asyncio&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import websockets&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;uri = f&quot;wss://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/run/@cf/deepgram/aura-1&quot;&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;input = [&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;Line one, out of three lines that will be provided to the aura model.&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;Line two, out of three lines that will be provided to the aura model.&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;Line three, out of three lines that will be provided to the aura model. This is a last line.&quot;,&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;/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;async def text_to_speech():&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;async with websockets.connect(uri, additional_headers={&quot;Authorization&quot;: os.getenv(&quot;CF_TOKEN&quot;)}) as websocket:&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;print(&quot;connection established&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;for line in input:&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;print(f&quot;sending `{line}`&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;await websocket.send(json.dumps({&quot;type&quot;: &quot;Speak&quot;, &quot;text&quot;: line}))&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;print(&quot;line was sent, flushing&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;await websocket.send(json.dumps({&quot;type&quot;: &quot;Flush&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;print(&quot;flushed, recving&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;resp = await websocket.recv()&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;print(f&quot;response received {resp}&quot;)&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;if __name__ == &quot;__main__&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;asyncio.run(text_to_speech())&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;</description><pubDate>Wed, 27 Aug 2025 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>CASB - New CASB integrations for ChatGPT, Claude, and Gemini</title><link>https://developers.cloudflare.com/changelog/post/2025-08-26-casb-ai-integrations/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-26-casb-ai-integrations/</guid><description>&lt;p&gt;&lt;a href=&quot;https://www.cloudflare.com/zero-trust/products/casb/&quot; target=&quot;_blank&quot;&gt;Cloudflare CASB&lt;/a&gt; now supports three of the most widely used GenAI platforms — &lt;strong&gt;OpenAI ChatGPT&lt;/strong&gt;, &lt;strong&gt;Anthropic Claude&lt;/strong&gt;, and &lt;strong&gt;Google Gemini&lt;/strong&gt;. These API-based integrations give security teams agentless visibility into posture, data, and compliance risks across their organization’s use of generative AI.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/casb-ai-integrations-preview.B-zsSA1P_Z1wlfJX.webp&quot; alt=&quot;Cloudflare CASB showing selection of new findings for ChatGPT, Claude, and Gemini integrations.&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;Key capabilities&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Agentless connections&lt;/strong&gt; — connect ChatGPT, Claude, and Gemini tenants via API; no endpoint software required&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Posture management&lt;/strong&gt; — detect insecure settings and misconfigurations that could lead to data exposure&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;DLP detection&lt;/strong&gt; — identify sensitive data in uploaded chat attachments or files&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GenAI-specific insights&lt;/strong&gt; — surface risks unique to each provider’s capabilities&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Learn more&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/integrations/cloud-and-saas/openai/&quot; target=&quot;_blank&quot;&gt;ChatGPT integration docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/integrations/cloud-and-saas/anthropic/&quot; target=&quot;_blank&quot;&gt;Claude integration docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/integrations/cloud-and-saas/google-workspace/gemini/&quot; target=&quot;_blank&quot;&gt;Gemini integration docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These integrations are available to all Cloudflare One customers today.&lt;/p&gt;</description><pubDate>Tue, 26 Aug 2025 16:00:00 GMT</pubDate><product>CASB</product><category>CASB</category></item><item><title>Access - Manage and restrict access to internal MCP servers with Cloudflare Access</title><link>https://developers.cloudflare.com/changelog/post/2025-08-26-access-mcp-oauth/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-26-access-mcp-oauth/</guid><description>&lt;p&gt;You can now control who within your organization has access to internal MCP servers, by putting internal MCP servers behind &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/policies/&quot;&gt;Cloudflare Access&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/ai-controls/linked-apps/&quot;&gt;Self-hosted applications&lt;/a&gt; in Cloudflare Access now support OAuth for MCP server authentication. This allows Cloudflare to delegate access from any self-hosted application to an MCP server via OAuth. The OAuth access token authorizes the MCP server to make requests to your self-hosted applications on behalf of the authorized user, using that user&apos;s specific permissions and scopes.&lt;/p&gt;
&lt;p&gt;For example, if you have an MCP server designed for internal use within your organization, you can configure Access policies to ensure that only authorized users can access it, regardless of which MCP client they use. Support for internal, self-hosted MCP servers also works with MCP server portals, allowing you to provide a single MCP endpoint for multiple MCP servers. For more on MCP server portals, read the &lt;a href=&quot;https://blog.cloudflare.com/zero-trust-mcp-server-portals/&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt; on the Cloudflare Blog.&lt;/p&gt;</description><pubDate>Tue, 26 Aug 2025 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Access - MCP server portals</title><link>https://developers.cloudflare.com/changelog/post/2025-08-26-mcp-server-portals/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-26-mcp-server-portals/</guid><description>&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/mcp-server-portal.BOKqTCoI_ZXYCcF.webp&quot; alt=&quot;MCP server portal&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;An &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/ai-controls/mcp-portals/&quot;&gt;MCP server portal&lt;/a&gt; centralizes multiple Model Context Protocol (MCP) servers onto a single HTTP endpoint. Key benefits include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Streamlined access to multiple MCP servers&lt;/strong&gt;: MCP server portals support both unauthenticated MCP servers as well as MCP servers secured using any third-party or custom OAuth provider. Users log in to the portal URL through Cloudflare Access and are prompted to authenticate separately to each server that requires OAuth.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customized tools per portal&lt;/strong&gt;: Admins can tailor an MCP portal to a particular use case by choosing the specific tools and prompt templates that they want to make available to users through the portal. This allows users to access a curated set of tools and prompts — the less external context exposed to the AI model, the better the AI responses tend to be.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Observability&lt;/strong&gt;: Once the user&apos;s AI agent is connected to the portal, Cloudflare Access logs the indiviudal requests made using the tools in the portal.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is available in an open beta for all customers across all plans! For more information check out our &lt;a href=&quot;https://blog.cloudflare.com/zero-trust-mcp-server-portals/&quot; target=&quot;_blank&quot;&gt;blog&lt;/a&gt; for this release.&lt;/p&gt;</description><pubDate>Tue, 26 Aug 2025 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Vectorize - List all vectors in a Vectorize index with the new list-vectors operation</title><link>https://developers.cloudflare.com/changelog/post/2025-08-26-vectorize-list-vectors/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-26-vectorize-list-vectors/</guid><description>&lt;p&gt;You can now list all vector identifiers in a Vectorize index using the new &lt;code&gt;list-vectors&lt;/code&gt; operation. This enables bulk operations, auditing, and data migration workflows through paginated requests that maintain snapshot consistency.&lt;/p&gt;
&lt;p&gt;The operation is available via Wrangler CLI and REST API. Refer to the &lt;a href=&quot;https://developers.cloudflare.com/vectorize/best-practices/list-vectors/&quot;&gt;list-vectors best practices guide&lt;/a&gt; for detailed usage guidance.&lt;/p&gt;</description><pubDate>Tue, 26 Aug 2025 00:00:00 GMT</pubDate><product>Vectorize</product><category>Vectorize</category></item><item><title>Secrets Store, AI Gateway, SSL/TLS - Manage and deploy your AI provider keys through Bring Your Own Key (BYOK) with AI Gateway, now powered by Cloudflare Secrets Store</title><link>https://developers.cloudflare.com/changelog/post/2025-08-25-secrets-store-ai-gateway/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-25-secrets-store-ai-gateway/</guid><description>&lt;p&gt;Cloudflare Secrets Store is now integrated with AI Gateway, allowing you to store, manage, and deploy your AI provider keys in a secure and seamless configuration through &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/configuration/bring-your-own-keys/&quot; target=&quot;_blank&quot;&gt;Bring Your Own Key&lt;/a&gt;. Instead of passing your AI provider keys directly in every request header, you can centrally manage each key with Secrets Store and deploy in your gateway configuration using only a reference, rather than passing the value in plain text.&lt;/p&gt;
&lt;p&gt;You can now create a secret directly from your AI Gateway &lt;a href=&quot;http://dash.cloudflare.com/?to=/:account/ai-gateway&quot; target=&quot;_blank&quot;&gt;in the dashboard&lt;/a&gt; by navigating into your gateway -&gt; &lt;strong&gt;Provider Keys&lt;/strong&gt; -&gt; &lt;strong&gt;Add&lt;/strong&gt;.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/add-secret-ai-gateway.B-SIPr6s_jJjDD.webp&quot; alt=&quot;Import repo or choose template&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;You can also create your secret with the newly available &lt;strong&gt;ai_gateway&lt;/strong&gt; scope via &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/&quot; target=&quot;_blank&quot;&gt;wrangler&lt;/a&gt;, the &lt;a href=&quot;http://dash.cloudflare.com/?to=/:account/secrets-store&quot; target=&quot;_blank&quot;&gt;Secrets Store dashboard&lt;/a&gt;, or the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/secrets_store/&quot; target=&quot;_blank&quot;&gt;API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Then, pass the key in the request header using its Secrets Store reference:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl -X POST https://gateway.ai.cloudflare.com/v1/&amp;#x3C;ACCOUNT_ID&gt;/my-gateway/anthropic/v1/messages \&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;--header &apos;cf-aig-authorization: ANTHROPIC_KEY_1 \&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;--header &apos;anthropic-version: 2023-06-01&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;&lt;/span&gt;&lt;span&gt;--header &apos;Content-Type: application/json&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;&lt;/span&gt;&lt;span&gt;--data  &apos;{&quot;model&quot;: &quot;claude-3-opus-20240229&quot;, &quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;What is Cloudflare?&quot;}]}&apos;&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;Or, using Javascript:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import Anthropic from &apos;@anthropic-ai/sdk&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const anthropic = new Anthropic({&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;apiKey: &quot;ANTHROPIC_KEY_1&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;baseURL: &quot;https://gateway.ai.cloudflare.com/v1/&amp;#x3C;ACCOUNT_ID&gt;/my-gateway/anthropic&quot;,&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;/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;const message = await anthropic.messages.create({&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;model: &apos;claude-3-opus-20240229&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;&lt;/span&gt;&lt;span&gt;messages: [{role: &quot;user&quot;, content: &quot;What is Cloudflare?&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;max_tokens: 1024&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, check out the &lt;a href=&quot;https://blog.cloudflare.com/ai-gateway-aug-2025-refresh&quot; target=&quot;_blank&quot;&gt;blog&lt;/a&gt;!&lt;/p&gt;</description><pubDate>Mon, 25 Aug 2025 11:00:00 GMT</pubDate><product>Secrets Store</product><category>Secrets Store</category><category>AI Gateway</category><category>SSL/TLS</category></item><item><title>Data Loss Prevention - New DLP topic based detection entries for AI prompt protection</title><link>https://developers.cloudflare.com/changelog/post/2025-08-25-ai-prompt-protection/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-25-ai-prompt-protection/</guid><description>&lt;p&gt;You now have access to a comprehensive suite of capabilities to secure your organization&apos;s use of generative AI. AI prompt protection introduces four key features that work together to provide deep visibility and granular control.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prompt Detection for AI Applications&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;DLP can now natively detect and inspect user prompts submitted to popular AI applications, including &lt;strong&gt;Google Gemini&lt;/strong&gt;, &lt;strong&gt;ChatGPT&lt;/strong&gt;, &lt;strong&gt;Claude&lt;/strong&gt;, and &lt;strong&gt;Perplexity&lt;/strong&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Prompt Analysis and Topic Classification&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Our DLP engine performs deep analysis on each prompt, applying &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/detection-entries/#ai-prompt-topics&quot;&gt;topic classification&lt;/a&gt;. These topics are grouped into two evaluation categories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Content:&lt;/strong&gt; PII, Source Code, Credentials and Secrets, Financial Information, and Customer Data.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Intent:&lt;/strong&gt; Jailbreak attempts, requests for malicious code, or attempts to extract PII.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To help you apply these topics quickly, we have also released five new predefined profiles (for example, AI Prompt: AI Security, AI Prompt: PII) that bundle these new topics.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ai-prompt-detection-entry.4QmdkAuv_Z14HtSJ.webp&quot; alt=&quot;DLP&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Granular Guardrails&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can now build guardrails using Gateway HTTP policies with &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/http-policies/#granular-controls&quot;&gt;application granular controls&lt;/a&gt;. Apply a DLP profile containing an &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/detection-entries/#ai-prompt-topics&quot;&gt;AI prompt topic detection&lt;/a&gt; to individual AI applications (for example, &lt;code&gt;ChatGPT&lt;/code&gt;) and specific user actions (for example, &lt;code&gt;SendPrompt&lt;/code&gt;) to block sensitive prompts.&lt;/p&gt;
&lt;p&gt;&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ai-prompt-policy.CF3H2rbK_2muoEC.webp&quot; alt=&quot;DLP&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Full Prompt Logging&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To aid in incident investigation, an optional setting in your Gateway policy allows you to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/dlp-policies/logging-options/#log-generative-ai-prompt-content&quot;&gt;capture prompt logs&lt;/a&gt; to store the full interaction of prompts that trigger a policy match. To make investigations easier, logs can be filtered by &lt;code&gt;conversation_id&lt;/code&gt;, allowing you to reconstruct the full context of an interaction that led to a policy violation.&lt;/p&gt;
&lt;p&gt;&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ai-prompt-log.ywQDc5qN_2v6nax.webp&quot; alt=&quot;DLP&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;AI prompt protection is now available in open beta. To learn more about it, read the &lt;a href=&quot;https://blog.cloudflare.com/ai-prompt-protection/#closing-the-loop-logging&quot; target=&quot;_blank&quot;&gt;blog&lt;/a&gt; or refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/detection-entries/#ai-prompt-topics&quot;&gt;AI prompt topics&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate><product>Data Loss Prevention</product><category>Data Loss Prevention</category></item><item><title>WAF - WAF Release - 2025-08-25</title><link>https://developers.cloudflare.com/changelog/post/2025-08-25-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-25-waf-release/</guid><description>&lt;p&gt;&lt;strong&gt;This week&apos;s update&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This week, critical vulnerabilities were disclosed that impact widely used open-source infrastructure, creating high-risk scenarios for code execution and operational disruption.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Apache HTTP Server – Code Execution (CVE-2024-38474): A flaw in Apache HTTP Server allows attackers to achieve remote code execution, enabling full compromise of affected servers. This vulnerability threatens the confidentiality, integrity, and availability of critical web services.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Laravel (CVE-2024-55661): A security flaw in Laravel introduces the potential for remote code execution under specific conditions. Exploitation could provide attackers with unauthorized access to application logic and sensitive backend data.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These vulnerabilities pose severe risks to enterprise environments and open-source ecosystems. Remote code execution enables attackers to gain deep system access, steal data, disrupt services, and establish persistent footholds for broader intrusions. Given the widespread deployment of Apache HTTP Server and Laravel in production systems, timely patching and mitigation are critical.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;c550282a0f7343ca887bdab528050359 &lt;/td&gt;&lt;td&gt;100822_BETA&lt;/td&gt;&lt;td&gt;WordPress:Plugin:WPBookit - Remote Code Execution - CVE:CVE-2025-6058&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This was merged in to the original rule &quot;WordPress:Plugin:WPBookit - Remote Code Execution - CVE:CVE-2025-6058&quot; (ID: 9b5c5e13d2ca4253a89769f2194f7b2d )&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;456b1e8f827b4ed89fb4a54b3bdcdbad &lt;/td&gt;&lt;td&gt;100831&lt;/td&gt;&lt;td&gt;Apache HTTP Server - Code Execution - CVE:CVE-2024-38474&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;7dcc01e1dd074e42a26c8ca002eaac5b &lt;/td&gt;&lt;td&gt;100846&lt;/td&gt;&lt;td&gt;Laravel - Remote Code Execution - CVE:CVE-2024-55661&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Content type returned in Workers Assets for Javascript files is now `text/javascript`</title><link>https://developers.cloudflare.com/changelog/post/2025-08-25-workers-assets-javascript-content-type/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-25-workers-assets-javascript-content-type/</guid><description>&lt;p&gt;JavaScript asset responses have been updated to use the &lt;code&gt;text/javascript&lt;/code&gt; Content-Type header instead of &lt;code&gt;application/javascript&lt;/code&gt;. While both MIME types are widely supported by browsers, the HTML Living Standard explicitly recommends &lt;code&gt;text/javascript&lt;/code&gt; as the preferred type going forward.&lt;/p&gt;
&lt;p&gt;This change improves:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Standards alignment: Ensures consistency with the HTML spec and modern web platform guidance.&lt;/li&gt;
&lt;li&gt;Interoperability: Some developer tools, validators, and proxies expect text/javascript and may warn or behave inconsistently with application/javascript.&lt;/li&gt;
&lt;li&gt;Future-proofing: By following the spec-preferred MIME type, we reduce the risk of deprecation warnings or unexpected behavior in evolving browser environments.&lt;/li&gt;
&lt;li&gt;Consistency: Most frameworks, CDNs, and hosting providers now default to text/javascript, so this change matches common ecosystem practice.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because all major browsers accept both MIME types, this update is backwards compatible and should not cause breakage.&lt;/p&gt;
&lt;p&gt;Users will see this change on the next deployment of their assets.&lt;/p&gt;</description><pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>KV - Workers KV completes hybrid storage provider rollout for improved performance, fault-tolerance</title><link>https://developers.cloudflare.com/changelog/post/2025-08-22-kv-performance-improvements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-22-kv-performance-improvements/</guid><description>&lt;p&gt;Workers KV has completed rolling out performance improvements across all KV namespaces, providing a significant latency reduction on read operations for all KV users. This is due to architectural changes to KV&apos;s underlying storage infrastructure, which introduces a new metadata later and substantially improves redundancy.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/kv-hybrid-providers-performance-improvements.D6MBO22S_2ok8qE.webp&quot; alt=&quot;Workers KV latency improvements showing P95 and P99 performance gains in Europe, Asia, Africa and Middle East regions as measured within KV&amp;#x27;s internal storage gateway worker.&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;Performance improvements&lt;/h4&gt;
&lt;p&gt;The new hybrid architecture delivers substantial latency reductions throughout Europe, Asia, Middle East, Africa regions. Over the past 2 weeks, we have observed the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;p95 latency&lt;/strong&gt;: Reduced from ~150ms to ~50ms (67% decrease)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;p99 latency&lt;/strong&gt;: Reduced from ~350ms to ~250ms (29% decrease)&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 22 Aug 2025 12:00:00 GMT</pubDate><product>KV</product><category>KV</category></item><item><title>Audit Logs - Audit logs (version 2) - Logpush Beta Release</title><link>https://developers.cloudflare.com/changelog/post/2025-08-22-audit-logs-v2-logpush/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-22-audit-logs-v2-logpush/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/datasets/account/audit_logs_v2/&quot;&gt;Audit Logs v2 dataset&lt;/a&gt; is now available via Logpush.&lt;/p&gt;
&lt;p&gt;This expands on earlier releases of Audit Logs v2 in the &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-03-27-automatic-audit-logs-beta-release/&quot;&gt;API&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-07-29-audit-logs-v2-ui-beta/&quot;&gt;Dashboard UI&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We recommend creating a new Logpush job for the Audit Logs v2 dataset.&lt;/p&gt;
&lt;p&gt;Timelines for General Availability (GA) of Audit Logs v2 and the retirement of Audit Logs v1 will be shared in upcoming updates.&lt;/p&gt;
&lt;p&gt;For more details on Audit Logs v2, refer to the &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/account/account-security/audit-logs/&quot; target=&quot;_blank&quot;&gt;Audit Logs documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 22 Aug 2025 00:00:00 GMT</pubDate><product>Audit Logs</product><category>Audit Logs</category></item><item><title>Logs - Dedicated Egress IP for Logpush</title><link>https://developers.cloudflare.com/changelog/post/2025-08-22-dedicated-egress-ip-logpush/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-22-dedicated-egress-ip-logpush/</guid><description>&lt;p&gt;Cloudflare Logpush can now deliver logs from using fixed, dedicated egress IPs. By routing Logpush traffic through a Cloudflare zone enabled with &lt;a href=&quot;https://developers.cloudflare.com/smart-shield/configuration/dedicated-egress-ips/&quot;&gt;Aegis IP&lt;/a&gt;, your log destination only needs to allow Aegis IPs making setup more secure.&lt;/p&gt;
&lt;p&gt;Highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed egress IPs ensure your destination only accepts traffic from known addresses.&lt;/li&gt;
&lt;li&gt;Works with any supported Logpush destination.&lt;/li&gt;
&lt;li&gt;Recommended to use a dedicated zone as a proxy for easier management.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get started, work with your Cloudflare account team to provision Aegis IPs, then configure your Logpush job to deliver logs through the proxy zone. For full setup instructions, refer to the &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/enable-destinations/egress-ip/&quot;&gt;Logpush documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 22 Aug 2025 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>WAF - WAF Release - 2025-08-22</title><link>https://developers.cloudflare.com/changelog/post/2025-08-22-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-22-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;0f3b6b9377334707b604be925fcca5c8 &lt;/td&gt;&lt;td&gt;100850&lt;/td&gt;&lt;td&gt;Command Injection - Generic 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;36b0532eb3c941449afed2d3744305c4 &lt;/td&gt;&lt;td&gt;100851&lt;/td&gt;&lt;td&gt;Remote Code Execution - Java Deserialization&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5d3c0d0958d14512bd2a7d902b083459 &lt;/td&gt;&lt;td&gt;100852&lt;/td&gt;&lt;td&gt;Command Injection - Generic 3&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;6e2f7a696ea74c979e7d069cefb7e5b9 &lt;/td&gt;&lt;td&gt;100853&lt;/td&gt;&lt;td&gt;Remote Code Execution - Common Bash Bypass Beta&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;735666d7268545a5ae6cfd0b78513ad7 &lt;/td&gt;&lt;td&gt;100854&lt;/td&gt;&lt;td&gt;XSS - Generic JavaScript&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;82780ba6f5df49dcb8d09af0e9a5daac &lt;/td&gt;&lt;td&gt;100855&lt;/td&gt;&lt;td&gt;Command Injection - Generic 4&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;8e305924a7dc4f91a2de931a480f6093 &lt;/td&gt;&lt;td&gt;100856&lt;/td&gt;&lt;td&gt;PHP Object Injection&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;1d34e0d05c10473ca824e66fd4ae0a33 &lt;/td&gt;&lt;td&gt;100857&lt;/td&gt;&lt;td&gt;Generic - Parameter Fuzzing&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;b517e4b79d7a47fbb61f447b1121ee45 &lt;/td&gt;&lt;td&gt;100858&lt;/td&gt;&lt;td&gt;Code Injection - Generic 4&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;1f9accf629dc42cb84a7a14420de01e3 &lt;/td&gt;&lt;td&gt;100859&lt;/td&gt;&lt;td&gt;SQLi - UNION - 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;e95939eacf7c4484b47101d5c0177e21 &lt;/td&gt;&lt;td&gt;100860&lt;/td&gt;&lt;td&gt;Command Injection - Generic 5&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;7b426e6f456043f4a21c162085f4d7b3 &lt;/td&gt;&lt;td&gt;100861&lt;/td&gt;&lt;td&gt;Command Execution - Generic&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5fac82bd1c03463fb600cfa83fa8ee7f &lt;/td&gt;&lt;td&gt;100862&lt;/td&gt;&lt;td&gt;GraphQL Injection - 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ab2cb1f2e2ad4da6a2685b1dc7a41d4b &lt;/td&gt;&lt;td&gt;100863&lt;/td&gt;&lt;td&gt;Command Injection - Generic 6&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;549b4fe1564a448d848365d565e3c165 &lt;/td&gt;&lt;td&gt;100864&lt;/td&gt;&lt;td&gt;Code Injection - Generic 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;8ef3c3f91eef46919cc9cb6d161aafdc &lt;/td&gt;&lt;td&gt;100865&lt;/td&gt;&lt;td&gt;PHP Object Injection - 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;57e8ba867e6240d2af8ea0611cc3c3f8 &lt;/td&gt;&lt;td&gt;100866&lt;/td&gt;&lt;td&gt;SQLi - LIKE 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;a967a167874b42b6898be46e48ac2221 &lt;/td&gt;&lt;td&gt;100867&lt;/td&gt;&lt;td&gt;SQLi - DROP - 2&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;cf79a868cc934bcc92b86ff01f4eec13 &lt;/td&gt;&lt;td&gt;100868&lt;/td&gt;&lt;td&gt;Code Injection - Generic 3&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;97a52405eaae47ae9627dbb22755f99e &lt;/td&gt;&lt;td&gt;100869&lt;/td&gt;&lt;td&gt;Command Injection - Generic 7&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5b3ce84c099040c6a25cee2d413592e2 &lt;/td&gt;&lt;td&gt;100870&lt;/td&gt;&lt;td&gt;Command Injection - Generic 8&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5940a9ace2f04d078e35d435d2dd41b5 &lt;/td&gt;&lt;td&gt;100871&lt;/td&gt;&lt;td&gt;SQLi - LIKE 3&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Fri, 22 Aug 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workflows, Workers - Build durable multi-step applications in Python with Workflows (now in beta)</title><link>https://developers.cloudflare.com/changelog/post/2025-08-22-workflows-python-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-22-workflows-python-beta/</guid><description>&lt;p&gt;You can now build &lt;a href=&quot;https://developers.cloudflare.com/workflows/&quot;&gt;Workflows&lt;/a&gt; using Python. With Python Workflows, you get automatic retries, state persistence, and the ability to run multi-step operations that can span minutes, hours, or weeks using Python’s familiar syntax and the &lt;a href=&quot;https://developers.cloudflare.com/workers/languages/python/&quot;&gt;Python Workers&lt;/a&gt; runtime.&lt;/p&gt;
&lt;p&gt;Python Workflows use the same step-based execution model as JavaScript Workflows, but with Python syntax and access to Python’s ecosystem. Python Workflows also enable &lt;a href=&quot;https://developers.cloudflare.com/workflows/python/dag/&quot;&gt;DAG (Directed Acyclic Graph) workflows&lt;/a&gt;, where you can define complex dependencies between steps using the depends parameter.&lt;/p&gt;
&lt;p&gt;Here’s a simple example:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; workers &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Response&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; WorkflowEntrypoint&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;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PythonWorkflowStarter&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;WorkflowEntrypoint&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&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;step&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;step&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;my first step&quot;&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my_first_step&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;# do some work&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Hello Python!&quot;&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my_first_step&lt;/span&gt;&lt;span&gt;()&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;await&lt;/span&gt;&lt;span&gt; step&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sleep&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;my-sleep-step&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;10 seconds&quot;&lt;/span&gt;&lt;span&gt;)&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;step&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;do&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;my second step&quot;&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my_second_step&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;# do some more work&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Hello again!&quot;&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my_second_step&lt;/span&gt;&lt;span&gt;()&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;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Default&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;WorkerEntrypoint&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&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;MY_WORKFLOW&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;create&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Hello Workflow creation!&quot;&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;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;Python Workflows requires a &lt;code&gt;compatibility_date = &quot;2025-08-01&quot;&lt;/code&gt;, or lower, in your wrangler toml file.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;Python Workflows support the same core capabilities as JavaScript Workflows, including sleep scheduling, event-driven workflows, and built-in error handling with configurable retry policies.&lt;/p&gt;
&lt;p&gt;To learn more and get started, refer to &lt;a href=&quot;https://developers.cloudflare.com/workflows/python/&quot;&gt;Python Workflows documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 22 Aug 2025 00:00:00 GMT</pubDate><product>Workflows</product><category>Workflows</category><category>Workers</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.6.1400.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-08-21-warp-windows-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-21-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains a hotfix for pre-login for multi-user for the 2025.6.1135.0 release.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixes an issue where new pre-login registrations were not being properly created.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For Windows 11 24H2 users, Microsoft has confirmed a regression that may lead to performance issues like mouse lag, audio cracking, or other slowdowns. Cloudflare recommends users experiencing these issues upgrade to a minimum &lt;a href=&quot;https://support.microsoft.com/topic/july-8-2025-kb5062553-os-build-26100-4652-523e69cb-051b-43c6-8376-6a76d6caeefd&quot;&gt;Windows 11 24H2 KB5062553&lt;/a&gt; or higher for resolution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with KB5055523 installed may receive a warning about Win32/ClickFix.ABA being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, please reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 21 Aug 2025 22:36:07 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Durable Objects, Workers - New getByName() API to access Durable Objects</title><link>https://developers.cloudflare.com/changelog/post/2025-08-21-durable-objects-get-by-name/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-21-durable-objects-get-by-name/</guid><description>&lt;p&gt;You can now create a client (a &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/api/stub/&quot;&gt;Durable Object stub&lt;/a&gt;) to a Durable Object with the new &lt;code&gt;getByName&lt;/code&gt; method, removing the need to convert Durable Object names to IDs and then create a stub.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Before: (1) translate name to ID then (2) get a client&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;objectId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;MY_DURABLE_OBJECT&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;idFromName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;foo&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// or .newUniqueId()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;MY_DURABLE_OBJECT&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;objectId&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Now: retrieve client to Durable Object directly via its name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;MY_DURABLE_OBJECT&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getByName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;foo&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Use client to send request to the remote Durable Object&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rpcResponse&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sayHello&lt;/span&gt;&lt;span&gt;()&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;Each Durable Object has a globally-unique name, which allows you to send requests to a specific object from anywhere in the world. Thus, a Durable Object can be used to coordinate between multiple clients who need to work together. You can have billions of Durable Objects, providing isolation between application tenants.&lt;/p&gt;
&lt;p&gt;To learn more, visit the Durable Objects &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/api/namespace/#getbyname&quot;&gt;API Documentation&lt;/a&gt; or the &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/get-started/&quot;&gt;getting started guide&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate><product>Durable Objects</product><category>Durable Objects</category><category>Workers</category></item><item><title>Gateway - Gateway BYOIP Dedicated Egress IPs now available.</title><link>https://developers.cloudflare.com/changelog/post/2025-08-21-byoip-dedicated-egress-ip/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-21-byoip-dedicated-egress-ip/</guid><description>&lt;p&gt;Enterprise Gateway users can now use Bring Your Own IP (BYOIP) for dedicated egress IPs.&lt;/p&gt;
&lt;p&gt;Admins can now onboard and use their own IPv4 or IPv6 prefixes to egress traffic from Cloudflare, delivering greater control, flexibility, and compliance for network traffic.&lt;/p&gt;
&lt;p&gt;Get started by following the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/egress-policies/dedicated-egress-ips/#bring-your-own-ip-address-byoip&quot;&gt;BYOIP onboarding process&lt;/a&gt;. Once your IPs are onboarded, go to &lt;strong&gt;Gateway&lt;/strong&gt; &gt; &lt;strong&gt;Egress policies&lt;/strong&gt; and select or create an egress policy. In &lt;strong&gt;Select an egress IP&lt;/strong&gt;, choose &lt;em&gt;Use dedicated egress IPs (Cloudflare or BYOIP)&lt;/em&gt;, then select your BYOIP address from the dropdown menu.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/Gateway-byoip-dedicated-egress-ips.D0pzLAbV_8yK6N.webp&quot; alt=&quot;Screenshot of a dropdown menu adding a BYOIP IPv4 address as a dedicated egress IP in a Gateway egress policy&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/egress-policies/dedicated-egress-ips/#bring-your-own-ip-address-byoip&quot;&gt;BYOIP for dedicated egress IPs&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.6.1335.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-08-19-warp-windows-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-19-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improvements to better manage multi-user pre-login registrations.&lt;/li&gt;
&lt;li&gt;Fixed an issue preventing devices from reaching split-tunneled traffic even when WARP was disconnected.&lt;/li&gt;
&lt;li&gt;Fix to prevent WARP from re-enabling its firewall rules after a user-initiated disconnect.&lt;/li&gt;
&lt;li&gt;Improvement for faster client connectivity on high-latency captive portal networks.&lt;/li&gt;
&lt;li&gt;Fixed an issue where recursive CNAME records could cause intermittent WARP connectivity issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For Windows 11 24H2 users, Microsoft has confirmed a regression that may lead to performance issues like mouse lag, audio cracking, or other slowdowns. Cloudflare recommends users experiencing these issues upgrade to a minimum &lt;a href=&quot;https://support.microsoft.com/en-us/topic/july-8-2025-kb5062553-os-build-26100-4652-523e69cb-051b-43c6-8376-6a76d6caeefd&quot;&gt;Windows 11 24H2 version KB5062553&lt;/a&gt; or higher for resolution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with KB5055523 installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 19 Aug 2025 22:10:43 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.6.1335.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-08-19-warp-macos-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-19-warp-macos-ga/</guid><description>&lt;p&gt;A new GA release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue preventing devices from reaching split-tunneled traffic even when WARP was disconnected.&lt;/li&gt;
&lt;li&gt;Fix to prevent WARP from re-enabling its firewall rules after a user-initiated disconnect.&lt;/li&gt;
&lt;li&gt;Improvement for faster client connectivity on high-latency captive portal networks.&lt;/li&gt;
&lt;li&gt;Fixed an issue where recursive CNAME records could cause intermittent WARP connectivity issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS Sequoia: Due to changes Apple introduced in macOS 15.0.x, the WARP client may not behave as expected. Cloudflare recommends the use of macOS 15.4 or later.&lt;/li&gt;
&lt;li&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 19 Aug 2025 22:10:43 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for Linux (version 2025.6.1335.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-08-19-warp-linux-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-19-warp-linux-ga/</guid><description>&lt;p&gt;A new GA release for the Linux WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue preventing devices from reaching split-tunneled traffic even when WARP was disconnected.&lt;/li&gt;
&lt;li&gt;Fix to prevent WARP from re-enabling its firewall rules after a user-initiated disconnect.&lt;/li&gt;
&lt;li&gt;Improvement for faster client connectivity on high-latency captive portal networks.&lt;/li&gt;
&lt;li&gt;Fixed an issue where recursive CNAME records could cause intermittent WARP connectivity issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 19 Aug 2025 19:45:33 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Queues - Subscribe to events from Cloudflare services with Queues</title><link>https://developers.cloudflare.com/changelog/post/2025-08-19-event-subscriptions/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-19-event-subscriptions/</guid><description>&lt;p&gt;You can now subscribe to events from other Cloudflare services (for example, &lt;a href=&quot;https://developers.cloudflare.com/kv/&quot;&gt;Workers KV&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers-ai&quot;&gt;Workers AI&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers&quot;&gt;Workers&lt;/a&gt;) and consume those events via &lt;a href=&quot;https://developers.cloudflare.com/queues/&quot;&gt;Queues&lt;/a&gt;, allowing you to build custom workflows, integrations, and logic in response to account activity.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/queues-event-subscriptions.3aVidnXJ_Z2p3fRA.webp&quot; alt=&quot;Event subscriptions architecture&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Event subscriptions allow you to receive messages when events occur across your Cloudflare account. Cloudflare products can publish structured events to a queue, which you can then consume with &lt;a href=&quot;https://developers.cloudflare.com/workers/&quot;&gt;Workers&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/queues/configuration/pull-consumers/&quot;&gt;pull via HTTP from anywhere&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To create a subscription, use the dashboard or &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/queues/#queues-subscription-create&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;queues&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;subscription&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-queue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--source&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;--events&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bucket.created&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;An event is a structured record of something happening in your Cloudflare account – like a Workers AI batch request being queued, a Worker build completing, or an R2 bucket being created. Events follow a consistent structure:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cf.r2.bucket.created&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;source&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;r2&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-bucket&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;WNAM&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;metadata&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;accountId&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;f9f79265f388666de8122cfb508d7776&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;eventTimestamp&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2025-07-28T10:30:00Z&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;/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;Current &lt;a href=&quot;https://developers.cloudflare.com/queues/event-subscriptions/events-schemas/&quot;&gt;event sources&lt;/a&gt; include &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;R2&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/kv/&quot;&gt;Workers KV&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/&quot;&gt;Workers AI&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/&quot;&gt;Workers Builds&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/vectorize/&quot;&gt;Vectorize&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/r2/data-migration/super-slurper/&quot;&gt;Super Slurper&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/workflows/&quot;&gt;Workflows&lt;/a&gt;. More sources and events are on the way.&lt;/p&gt;
&lt;p&gt;For more information on event subscriptions, available events, and how to get started, refer to our &lt;a href=&quot;https://developers.cloudflare.com/queues/event-subscriptions/&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 19 Aug 2025 12:00:00 GMT</pubDate><product>Queues</product><category>Queues</category></item><item><title>Workers - Easier debugging in Workers with improved Wrangler error screen</title><link>https://developers.cloudflare.com/changelog/post/2025-08-19-improved-wrangler-error-screen/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-19-improved-wrangler-error-screen/</guid><description>&lt;p&gt;Wrangler&apos;s error screen has received several improvements to enhance your debugging experience!&lt;/p&gt;
&lt;p&gt;The error screen now features a refreshed design thanks to &lt;a href=&quot;https://www.npmjs.com/package/youch&quot; target=&quot;_blank&quot;&gt;youch&lt;/a&gt;, with support for both light and dark themes, improved source map resolution logic that handles missing source files more reliably, and better error cause display.&lt;/p&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Before&lt;/th&gt;&lt;th&gt;After (Light)&lt;/th&gt;&lt;th&gt;After (Dark)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/old-error-screen.yurLWiKb_Z1vn3jq.webp&quot; alt=&quot;Old error screen&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;&lt;/td&gt;&lt;td&gt;&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/new-error-screen-light.CcroERTP_2f4pOC.webp&quot; alt=&quot;New light theme error screen&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;&lt;/td&gt;&lt;td&gt;&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/new-error-screen-dark.BIDA2RGg_Q0JqP.webp&quot; alt=&quot;New dark theme error screen&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Try it out now with &lt;code&gt;npx wrangler@latest dev&lt;/code&gt; in your Workers project.&lt;/p&gt;</description><pubDate>Tue, 19 Aug 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>WAF - WAF Release - 2025-08-18</title><link>https://developers.cloudflare.com/changelog/post/2025-08-18-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-18-waf-release/</guid><description>&lt;p&gt;&lt;strong&gt;This week&apos;s update&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This week, a series of critical vulnerabilities were discovered impacting core enterprise and open-source infrastructure. These flaws present a range of risks, providing attackers with distinct pathways for remote code execution, methods to breach internal network boundaries, and opportunities for critical data exposure and operational disruption.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;SonicWall SMA (CVE-2025-32819, CVE-2025-32820, CVE-2025-32821): A remote authenticated attacker with SSLVPN user privileges can bypass path traversal protections. These vulnerabilities enable a attacker to bypass security checks to read, modify, or delete arbitrary files. An attacker with administrative privileges can escalate this further, using a command injection flaw to upload malicious files, which could ultimately force the appliance to reboot to its factory default settings.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ms-Swift Project (CVE-2025-50460): An unsafe deserialization vulnerability exists in the Ms-Swift project&apos;s handling of YAML configuration files. If an attacker can control the content of a configuration file passed to the application, they can embed a malicious payload that will execute arbitrary code and it can be executed during deserialization.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apache Druid (CVE-2023-25194): This vulnerability in Apache Druid allows an attacker to cause the server to connect to a malicious LDAP server. By sending a specially crafted LDAP response, the attacker can trigger an unrestricted deserialization of untrusted data. If specific &quot;gadgets&quot; (classes that can be abused) are present in the server&apos;s classpath, this can be escalated to achieve Remote Code Execution (RCE).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tenda AC8v4 (CVE-2025-51087, CVE-2025-51088): Vulnerabilities allow an authenticated attacker to trigger a stack-based buffer overflow. By sending malformed arguments in a request to specific endpoints, an attacker can crash the device or potentially achieve arbitrary code execution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open WebUI (CVE-2024-7959): This vulnerability allows a user to change the OpenAI URL endpoint to an arbitrary internal network address without proper validation. This flaw can be exploited to access internal services or cloud metadata endpoints, potentially leading to remote command execution if the attacker can retrieve instance secrets or access sensitive internal APIs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;BentoML (CVE-2025-54381): The vulnerability exists in the serialization/deserialization handlers for multipart form data and JSON requests, which automatically download files from user-provided URLs without proper validation of internal network addresses. This allows attackers to fetch from unintended internal services, including cloud metadata and localhost.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Adobe Experience Manager Forms (CVE-2025-54254): An Improper Restriction of XML External Entity Reference (&apos;XXE&apos;) vulnerability that could lead to arbitrary file system read in Adobe AEM (≤6.5.23).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These vulnerabilities affect core infrastructure, from network security appliances like SonicWall to data platforms such as Apache Druid and ML frameworks like BentoML. The code execution and deserialization flaws are particularly severe, offering deep system access that allows attackers to steal data, disrupt services, and establish a foothold for broader intrusions. Simultaneously, SSRF and XXE vulnerabilities undermine network boundaries, exposing sensitive internal data and creating pathways for lateral movement. Beyond data-centric threats, flaws in edge devices like the Tenda router introduce the tangible risk of operational disruption, highlighting a multi-faceted threat to the security and stability of key enterprise systems.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;326ebb56d46a4c269bb699d3418d9a3b &lt;/td&gt;&lt;td&gt;100574&lt;/td&gt;&lt;td&gt;SonicWall SMA - Remote Code Execution - CVE:CVE-2025-32819, CVE:CVE-2025-32820, CVE:CVE-2025-32821&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;69f4f161dec04aca8a73a3231e6fefdb &lt;/td&gt;&lt;td&gt;100576&lt;/td&gt;&lt;td&gt;Ms-Swift Project - Remote Code Execution - CVE:CVE-2025-50460&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;d62935357ff846d9adefb58108ac45b3 &lt;/td&gt;&lt;td&gt;100585&lt;/td&gt;&lt;td&gt;Apache Druid - Remote Code Execution - CVE:CVE-2023-25194&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;4f6148a760804bf8ad8ebccfe4855472 &lt;/td&gt;&lt;td&gt;100834&lt;/td&gt;&lt;td&gt;Tenda AC8v4 - Auth Bypass - CVE:CVE-2025-51087, CVE:CVE-2025-51088&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;1474121b01ba40629f8246f8022ab542 &lt;/td&gt;&lt;td&gt;100835&lt;/td&gt;&lt;td&gt;Open WebUI - SSRF - CVE:CVE-2024-7959&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;96abffdb7e224ce69ddf89eb6339f132 &lt;/td&gt;&lt;td&gt;100837&lt;/td&gt;&lt;td&gt;SQLi - OOB&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;a0b20ec638d14800a1d6827cb83d2625 &lt;/td&gt;&lt;td&gt;100841&lt;/td&gt;&lt;td&gt;BentoML - SSRF - CVE:CVE-2025-54381&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;40fd793035c947c5ac75add1739180d2 &lt;/td&gt;&lt;td&gt;100841A&lt;/td&gt;&lt;td&gt;BentoML - SSRF - CVE:CVE-2025-54381 - 2&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;08dcb20b9acf47e3880a0b886ab910c2 &lt;/td&gt;&lt;td&gt;100841B&lt;/td&gt;&lt;td&gt;BentoML - SSRF - CVE:CVE-2025-54381 - 3&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;309cfb7eeb42482e9ad896f12197ec51 &lt;/td&gt;&lt;td&gt;100845&lt;/td&gt;&lt;td&gt;Adobe Experience Manager Forms - XSS - CVE:CVE-2025-54254&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;6e039776c2d6418ab6e8f05196f34ce3 &lt;/td&gt;&lt;td&gt;100845A&lt;/td&gt;&lt;td&gt;Adobe Experience Manager Forms - XSS - CVE:CVE-2025-54254 - 2&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 18 Aug 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Access - SFTP support for SSH with Cloudflare Access for Infrastructure</title><link>https://developers.cloudflare.com/changelog/post/2025-08-15-sftp/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-15-sftp/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/ssh/ssh-infrastructure-access/&quot;&gt;SSH with Cloudflare Access for Infrastructure&lt;/a&gt; now supports SFTP. It is compatible with SFTP clients, such as Cyberduck.&lt;/p&gt;</description><pubDate>Fri, 15 Aug 2025 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Load Balancing - Steer Traffic by AS Number in Load Balancing Custom Rules</title><link>https://developers.cloudflare.com/changelog/post/2025-08-15-asnum-support-in-custom-rules/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-15-asnum-support-in-custom-rules/</guid><description>&lt;p&gt;You can now create more granular, network-aware Custom Rules in Cloudflare Load Balancing using the Autonomous System Number (ASN) of an incoming request.&lt;/p&gt;
&lt;p&gt;This allows you to steer traffic with greater precision based on the network source of a request. For example, you can route traffic from specific Internet Service Providers (ISPs) or enterprise customers to dedicated infrastructure, optimize performance, or enforce compliance by directing certain networks to preferred data centers.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/asnum-custom-rule.CtcHu_zj_Z24vRO0.webp&quot; alt=&quot;Create a Load Balancing Custom Rule using AS Num&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To get started, create a &lt;a href=&quot;https://developers.cloudflare.com/load-balancing/additional-options/load-balancing-rules/&quot; target=&quot;_blank&quot;&gt;Custom Rule&lt;/a&gt; in your Load Balancer and select &lt;strong&gt;AS Num&lt;/strong&gt; from the &lt;strong&gt;Field&lt;/strong&gt; dropdown.&lt;/p&gt;</description><pubDate>Fri, 15 Aug 2025 00:00:00 GMT</pubDate><product>Load Balancing</product><category>Load Balancing</category></item><item><title>Log Explorer - Extended retention</title><link>https://developers.cloudflare.com/changelog/post/2025-08-15-extended-retention/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-15-extended-retention/</guid><description>&lt;p&gt;Customers can now rely on Log Explorer to meet their log retention compliance requirements.&lt;/p&gt;
&lt;p&gt;Contract customers can choose to store their logs in Log Explorer for up to two years, at an additional cost of $0.10 per GB per month. Customers interested in this feature can contact their account team to have it added to their contract.&lt;/p&gt;</description><pubDate>Fri, 15 Aug 2025 00:00:00 GMT</pubDate><product>Log Explorer</product><category>Log Explorer</category></item><item><title>Security Center - Save time with bulk query creation in Brand Protection</title><link>https://developers.cloudflare.com/changelog/post/2025-08-15-brand-protection-bulk-endpoint/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-15-brand-protection-bulk-endpoint/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/security-center/brand-protection/&quot;&gt;Brand Protection&lt;/a&gt; detects domains that may be impersonating your brand — from common misspellings (&lt;code&gt;cloudfalre.com&lt;/code&gt;) to malicious concatenations (&lt;code&gt;cloudflare-okta.com&lt;/code&gt;). Saved search queries run continuously and alert you when suspicious domains appear.&lt;/p&gt;
&lt;p&gt;You can now create and save multiple queries in a single step, streamlining setup and management. Available now via the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/brand_protection/subresources/queries/methods/bulk/&quot;&gt;Brand Protection bulk query creation API&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 15 Aug 2025 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>Cloudflare Fundamentals, Terraform - Terraform v5.8.4 now available</title><link>https://developers.cloudflare.com/changelog/post/2025-08-15-terraform-v584-provider/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-15-terraform-v584-provider/</guid><description>&lt;p&gt;Earlier this year, we announced the launch of the new &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-02-03-terraform-v5-provider/&quot;&gt;Terraform v5 Provider&lt;/a&gt;. We are aware of the high number of &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;issues&lt;/a&gt; reported by the Cloudflare Community related to the v5 release. We have committed to releasing improvements on a two week cadence to ensure stability and reliability.&lt;/p&gt;
&lt;p&gt;One key change we adopted in recent weeks is a pivot to more comprehensive, test-driven development. We are still evaluating individual issues, but are also investing in much deeper testing to drive our stabilization efforts. We will subsequently be investing in comprehensive migration scripts. As a result, you will see several of the highest traffic APIs have been stabilized in the most recent release, and are supported by comprehensive acceptance tests.&lt;/p&gt;
&lt;p&gt;Thank you for continuing to raise issues. We triage them weekly and they help make our products stronger.&lt;/p&gt;
&lt;h4&gt;Changes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Resources stabilized:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cloudflare_argo_smart_routing&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_bot_management&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_list&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_list_item&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_load_balancer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_load_balancer_monitor&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_load_balancer_pool&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_spectrum_application&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_managed_transforms&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_url_normalization_settings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_snippet&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_snippet_rules&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zero_trust_access_application&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zero_trust_access_group&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zero_trust_access_identity_provider&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zero_trust_access_mtls_certificate&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zero_trust_access_mtls_hostname_settings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zero_trust_access_policy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zone&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Multipart handling restored for &lt;code&gt;cloudflare_snippet&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_bot_management&lt;/code&gt; diff issues resolves when running &lt;code&gt;terraform plan&lt;/code&gt; and &lt;code&gt;terraform apply&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Other bug fixes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a more detailed look at all of the changes, refer to the &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/releases/tag/v5.8.4&quot; target=&quot;_blank&quot;&gt;changelog&lt;/a&gt; in GitHub.&lt;/p&gt;
&lt;h4&gt;Issues Closed&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5017&quot; target=&quot;_blank&quot;&gt;#5017: &apos;Uncaught Error: No such module&apos; using cloudflare_snippets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5701&quot; target=&quot;_blank&quot;&gt;#5701: cloudflare_workers_script migrations for Durable Objects not recorded in tfstate; cannot be upgraded between versions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5640&quot; target=&quot;_blank&quot;&gt;#5640: cloudflare_argo_smart_routing importing doesn&apos;t read the actual value&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you have an unaddressed issue with the provider, we encourage you to check the &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues&quot; target=&quot;_blank&quot;&gt;open issues&lt;/a&gt; and open a new one if one does not already exist for what you are experiencing.&lt;/p&gt;
&lt;h4&gt;Upgrading&lt;/h4&gt;
&lt;p&gt;We suggest holding off on migration to v5 while we work on stablization. This help will you avoid any blocking issues while the Terraform resources are actively being stablized.&lt;/p&gt;
&lt;p&gt;If you&apos;d like more information on migrating to v5, please make use of the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/guides/version-5-upgrade&quot; target=&quot;_blank&quot;&gt;migration guide&lt;/a&gt;. We have provided automated migration scripts using Grit which simplify the transition. These migration scripts do not support implementations which use Terraform modules, so customers making use of modules need to migrate manually. Please make use of &lt;code&gt;terraform plan&lt;/code&gt; to test your changes before applying, and let us know if you encounter any additional issues by reporting to our &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;For more info&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;Terraform provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/terraform/&quot;&gt;Documentation on using Terraform with Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 15 Aug 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Terraform</category></item><item><title>Workers - The Node.js and Web File System APIs in Workers</title><link>https://developers.cloudflare.com/changelog/post/2025-08-15-nodejs-fs/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-15-nodejs-fs/</guid><description>&lt;p&gt;Implementations of the &lt;a href=&quot;https://nodejs.org/docs/latest/api/fs.html&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;node:fs&lt;/code&gt; module&lt;/a&gt; and the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API&quot; target=&quot;_blank&quot;&gt;Web File System API&lt;/a&gt; are now available in Workers.&lt;/p&gt;
&lt;h4&gt;Using the &lt;code&gt;node:fs&lt;/code&gt; module&lt;/h4&gt;
&lt;p&gt;The &lt;code&gt;node:fs&lt;/code&gt; module provides access to a virtual file system in Workers. You can use it to read and write files, create directories, and perform other file system operations.&lt;/p&gt;
&lt;p&gt;The virtual file system is ephemeral with each individual request havig its own isolated temporary file space. Files written to the file system will not persist across requests and will not be shared across requests or across different Workers.&lt;/p&gt;
&lt;p&gt;Workers running with the &lt;code&gt;nodejs_compat&lt;/code&gt; compatibility flag will have access to the &lt;code&gt;node:fs&lt;/code&gt; module by default when the compatibility date is set to &lt;code&gt;2025-09-01&lt;/code&gt; or later. Support for the API can also be enabled using the &lt;code&gt;enable_nodejs_fs_module&lt;/code&gt; compatibility flag together with the &lt;code&gt;nodejs_compat&lt;/code&gt; flag. The &lt;code&gt;node:fs&lt;/code&gt; module can be disabled using the &lt;code&gt;disable_nodejs_fs_module&lt;/code&gt; compatibility flag.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;fs&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;node:fs&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;fs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;readFileSync&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/bundle/config.json&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;utf-8&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Config value: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;value&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;/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;There are a number of initial limitations to the &lt;code&gt;node:fs&lt;/code&gt; implementation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The glob APIs (e.g. &lt;code&gt;fs.globSync(...)&lt;/code&gt;) are not implemented.&lt;/li&gt;
&lt;li&gt;The file watching APIs (e.g. &lt;code&gt;fs.watch(...)&lt;/code&gt;) are not implemented.&lt;/li&gt;
&lt;li&gt;The file timestamps (modified time, access time, etc) are only partially supported. For now, these will always return the Unix epoch.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Refer to the &lt;a href=&quot;https://nodejs.org/docs/latest/api/fs.html&quot; target=&quot;_blank&quot;&gt;Node.js documentation&lt;/a&gt; for more information on the &lt;code&gt;node:fs&lt;/code&gt; module and its APIs.&lt;/p&gt;
&lt;h4&gt;The Web File System API&lt;/h4&gt;
&lt;p&gt;The Web File System API provides access to the same virtual file system as the &lt;code&gt;node:fs&lt;/code&gt; module, but with a different API surface. The Web File System API is only available in Workers running with the &lt;code&gt;enable_web_file_system&lt;/code&gt; compatibility flag. The &lt;code&gt;nodejs_compat&lt;/code&gt; compatibility flag is not required to use the Web File System API.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;root&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;navigator&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getDirectory&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tmp&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;root&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getDirectoryHandle&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/tmp&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tmp&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getFileHandle&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;data.txt&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &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; true &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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;createWritable&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writable&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getWriter&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writer&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Hello, World!&quot;&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writer&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;close&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;File written successfully!&quot;&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;/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;As there are still some parts of the Web File System API tht are not fully standardized, there may be some differences between the Workers implementation and the implementations in browsers.&lt;/p&gt;</description><pubDate>Fri, 15 Aug 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Workers Static Assets: Corrected handling of double slashes in redirect rule paths</title><link>https://developers.cloudflare.com/changelog/post/2025-08-15-static-assets-redirect-url/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-15-static-assets-redirect-url/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/static-assets/&quot;&gt;Static Assets&lt;/a&gt;: Fixed a bug in how &lt;a href=&quot;https://developers.cloudflare.com/workers/static-assets/redirects/&quot; target=&quot;_blank&quot;&gt;redirect rules&lt;/a&gt; defined in your Worker&apos;s &lt;code&gt;_redirects&lt;/code&gt; file are processed.&lt;/p&gt;
&lt;p&gt;If you&apos;re serving Static Assets with a &lt;code&gt;_redirects&lt;/code&gt; file containing a rule like &lt;code&gt;/ja/* /:splat&lt;/code&gt;, paths with double slashes were previously misinterpreted as external URLs. For example, visiting &lt;code&gt;/ja//example.com&lt;/code&gt; would incorrectly redirect to &lt;code&gt;https://example.com&lt;/code&gt; instead of &lt;code&gt;/example.com&lt;/code&gt; on your domain. This has been fixed and double slashes now correctly resolve as local paths. Note: &lt;a href=&quot;https://developers.cloudflare.com/pages/&quot;&gt;Cloudflare Pages&lt;/a&gt; was not affected by this issue.&lt;/p&gt;</description><pubDate>Fri, 15 Aug 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Workers per-branch preview URLs now support long branch names</title><link>https://developers.cloudflare.com/changelog/post/2025-08-08-support-long-branch-names-preview-aliases/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-08-support-long-branch-names-preview-aliases/</guid><description>&lt;p&gt;We&apos;ve updated &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/previews/&quot;&gt;preview URLs&lt;/a&gt; for Cloudflare Workers to support long branch names.&lt;/p&gt;
&lt;p&gt;Previously, branch and Worker names exceeding the 63-character DNS limit would cause alias generation to fail, leaving pull requests without aliased preview URLs. This particularly impacted teams relying on descriptive branch naming.&lt;/p&gt;
&lt;p&gt;Now, Cloudflare automatically truncates long branch names and appends a unique hash, ensuring every pull request gets a working preview link.&lt;/p&gt;
&lt;h4&gt;How it works&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;63 characters or less&lt;/strong&gt;: &lt;code&gt;&amp;#x3C;branch-name&gt;-&amp;#x3C;worker-name&gt;&lt;/code&gt; → Uses actual branch name as is&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;64 characters or more&lt;/strong&gt;: &lt;code&gt;&amp;#x3C;truncated-branch-name&gt;--&amp;#x3C;hash&gt;-&amp;#x3C;worker-name&gt;&lt;/code&gt; → Uses truncated name with 4-character hash&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hash generation&lt;/strong&gt;: The hash is derived from the full branch name to ensure uniqueness&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stable URLs&lt;/strong&gt;: The same branch always generates the same hash across all commits&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Requirements and compatibility&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Wrangler 4.30.0 or later&lt;/strong&gt;: This feature requires updating to wrangler@4.30.0+&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No configuration needed&lt;/strong&gt;: Works automatically with existing preview URL setups&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 14 Aug 2025 01:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Access - Cloudflare Access Logging supports the Customer Metadata Boundary (CMB)</title><link>https://developers.cloudflare.com/changelog/post/2025-07-01-access-supports-customer-metadata-boundary/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-01-access-supports-customer-metadata-boundary/</guid><description>&lt;p&gt;Cloudflare Access logs now support the &lt;a href=&quot;https://developers.cloudflare.com/data-localization/metadata-boundary/&quot;&gt;Customer Metadata Boundary (CMB)&lt;/a&gt;. If you have configured the CMB for your account, all Access logging will respect that configuration.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;For EU CMB customers, the logs will not be stored by Access and will appear as empty in the dashboard. EU CMB customers should utilize &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/&quot;&gt;Logpush&lt;/a&gt; to retain their Access logging, if desired.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;</description><pubDate>Thu, 14 Aug 2025 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Workers - Python Workers handlers now live in an entrypoint class</title><link>https://developers.cloudflare.com/changelog/post/2025-08-14-new-python-handlers/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-14-new-python-handlers/</guid><description>&lt;p&gt;We are changing how Python Workers are structured by default. Previously, handlers were defined at the top-level of a module as &lt;code&gt;on_fetch&lt;/code&gt;, &lt;code&gt;on_scheduled&lt;/code&gt;, etc. methods, but now they live in an entrypoint class.&lt;/p&gt;
&lt;p&gt;Here&apos;s an example of how to now define a Worker with a fetch handler:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; workers &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; Response&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; WorkerEntrypoint&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;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Default&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;WorkerEntrypoint&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Hello World!&quot;&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;To keep using the old-style handlers, you can specify the &lt;code&gt;disable_python_no_global_handlers&lt;/code&gt; compatibility flag in your wrangler file:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;compatibility_flags&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;disable_python_no_global_handlers&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;compatibility_flags&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;span&gt; &lt;/span&gt;&lt;span&gt;&quot;disable_python_no_global_handlers&quot;&lt;/span&gt;&lt;span&gt; &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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Consult the &lt;a href=&quot;https://developers.cloudflare.com/workers/languages/python/&quot;&gt;Python Workers documentation&lt;/a&gt; for more details.&lt;/p&gt;</description><pubDate>Thu, 14 Aug 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Terraform provider improvements — Python Workers support, smaller plan diffs, and API SDK fixes</title><link>https://developers.cloudflare.com/changelog/post/2025-08-14-workers-terraform-and-sdk-improvements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-14-workers-terraform-and-sdk-improvements/</guid><description>&lt;p&gt;The recent &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workers_script&quot; target=&quot;_blank&quot;&gt;Cloudflare Terraform Provider&lt;/a&gt; and SDK releases (such as &lt;a href=&quot;https://github.com/cloudflare/cloudflare-typescript&quot; target=&quot;_blank&quot;&gt;cloudflare-typescript&lt;/a&gt;) bring significant improvements to the Workers developer experience. These updates focus on reliability, performance, and adding &lt;a href=&quot;https://developers.cloudflare.com/workers/languages/python/&quot;&gt;Python Workers&lt;/a&gt; support.&lt;/p&gt;
&lt;h4&gt;Terraform Improvements&lt;/h4&gt;
&lt;h4&gt;Fixed Unwarranted Plan Diffs&lt;/h4&gt;
&lt;p&gt;Resolved several issues with the &lt;code&gt;cloudflare_workers_script&lt;/code&gt; resource that resulted in unwarranted plan diffs, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Using Durable Objects migrations&lt;/li&gt;
&lt;li&gt;Using some bindings such as &lt;code&gt;secret_text&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Using smart placement&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A resource should never show a plan diff if there isn&apos;t an actual change. This fix reduces unnecessary noise in your Terraform plan and is available in Cloudflare Terraform Provider 5.8.0.&lt;/p&gt;
&lt;h4&gt;Improved File Management&lt;/h4&gt;
&lt;p&gt;You can now specify &lt;code&gt;content_file&lt;/code&gt; and &lt;code&gt;content_sha256&lt;/code&gt; instead of &lt;code&gt;content&lt;/code&gt;. This prevents the Workers script content from being stored in the state file which greatly reduces plan diff size and noise. If your workflow synced plans remotely, this should now happen much faster since there is less data to sync. This is available in Cloudflare Terraform Provider 5.7.0.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;tf&quot;&gt;&lt;code class=&quot;language-tf&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_workers_script&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_worker&quot;&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;account_id&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;123456789&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;script_name&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_worker&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;main_module&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;worker.mjs&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;content_file&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;worker.mjs&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;content_sha256&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filesha256&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;worker.mjs&quot;&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;h4&gt;Assets Headers and Redirects Support&lt;/h4&gt;
&lt;p&gt;Fixed the &lt;code&gt;cloudflare_workers_script&lt;/code&gt; resource to properly support headers and redirects for Assets:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;tf&quot;&gt;&lt;code class=&quot;language-tf&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_workers_script&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_worker&quot;&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;account_id&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;123456789&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;script_name&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_worker&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;main_module&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;worker.mjs&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;content_file&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;worker.mjs&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;content_sha256&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filesha256&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;worker.mjs&quot;&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;assets&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;config&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;headers&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;_headers&quot;&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;redirects&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;_redirects&quot;&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;# Completion jwt from:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# https://developers.cloudflare.com/api/resources/workers/subresources/assets/subresources/upload/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;jwt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;jwt&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;/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;Available in Cloudflare Terraform Provider 5.8.0.&lt;/p&gt;
&lt;h4&gt;Python Workers Support&lt;/h4&gt;
&lt;p&gt;Added support for uploading &lt;a href=&quot;https://developers.cloudflare.com/workers/languages/python/&quot;&gt;Python Workers&lt;/a&gt; (beta) in Terraform. You can now deploy Python Workers with:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;tf&quot;&gt;&lt;code class=&quot;language-tf&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_workers_script&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_worker&quot;&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;account_id&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;123456789&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;script_name&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_worker&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;content_file&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;worker.py&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;content_sha256&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filesha256&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;worker.py&quot;&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;content_type&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;text/x-python&quot;&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;Available in Cloudflare Terraform Provider 5.8.0.&lt;/p&gt;
&lt;h4&gt;SDK Enhancements&lt;/h4&gt;
&lt;h4&gt;Improved File Upload API&lt;/h4&gt;
&lt;p&gt;Fixed an issue where Workers script versions in the SDK did not allow uploading files. This now works, and also has an improved files upload interface:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scriptContent&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;export default {&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;async fetch(request, env, ctx) {&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;return new Response(&apos;Hello World!&apos;, { status: 200 });&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;span&gt;;&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;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;workers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;scripts&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;versions&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;&apos;my-worker&apos;&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;account_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;123456789&apos;&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;metadata&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;main_module&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;my-worker.mjs&apos;&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;files&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;toFile&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;Buffer&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;scriptContent&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;&apos;my-worker.mjs&apos;&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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/javascript+module&quot;&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;)&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;/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;Will be available in cloudflare-typescript 4.6.0. A similar change will be available in cloudflare-python 4.4.0.&lt;/p&gt;
&lt;h4&gt;Fixed updating KV values&lt;/h4&gt;
&lt;p&gt;Previously when creating a KV value like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cf&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;kv&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;namespaces&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;my-kv-namespace&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;key1&quot;&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;account_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;123456789&quot;&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;metadata&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my metadata&quot;&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;value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&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;hello&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;world&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;/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;...and recalling it in your Worker like this:&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;c&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;KV&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;&amp;#x3C;{&lt;/span&gt;&lt;span&gt;hello&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;}&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;key1&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;json&quot;&lt;/span&gt;&lt;span&gt;)&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;You&apos;d get back this: &lt;code&gt;{metadata:&apos;my metadata&apos;, value:&quot;{&apos;hello&apos;:&apos;world&apos;}&quot;}&lt;/code&gt; instead of the correct value of &lt;code&gt;{hello: &apos;world&apos;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This is fixed in cloudflare-typescript 4.5.0 and will be fixed in cloudflare-python 4.4.0.&lt;/p&gt;</description><pubDate>Thu, 14 Aug 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Logs - IBM Cloud Logs as Logpush destination</title><link>https://developers.cloudflare.com/changelog/post/2025-08-13-ibm-cloud-logs-destination/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-13-ibm-cloud-logs-destination/</guid><description>&lt;p&gt;Cloudflare Logpush now supports IBM Cloud Logs as a native destination.&lt;/p&gt;
&lt;p&gt;Logs from Cloudflare can be sent to &lt;a href=&quot;https://www.ibm.com/products/cloud-logs&quot; target=&quot;_blank&quot;&gt;IBM Cloud Logs&lt;/a&gt; via &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/&quot;&gt;Logpush&lt;/a&gt;. The setup can be done through the Logpush UI in the Cloudflare Dashboard or by using the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/logpush/subresources/jobs/&quot;&gt;Logpush API&lt;/a&gt;. The integration requires IBM Cloud Logs HTTP Source Address and an IBM API Key. The feature also allows for filtering events and selecting specific log fields.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/enable-destinations/ibm-cloud-logs/&quot;&gt;Destination Configuration&lt;/a&gt; documentation.&lt;/p&gt;</description><pubDate>Wed, 13 Aug 2025 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>Workers - MessageChannel and MessagePort</title><link>https://developers.cloudflare.com/changelog/post/2025-08-11-messagechannel/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-11-messagechannel/</guid><description>&lt;p&gt;A minimal implementation of the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel&quot; target=&quot;_blank&quot;&gt;MessageChannel API&lt;/a&gt; is now available in Workers. This means that you can use &lt;code&gt;MessageChannel&lt;/code&gt; to send messages between different parts of your Worker, but not across different Workers.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;MessageChannel&lt;/code&gt; and &lt;code&gt;MessagePort&lt;/code&gt; APIs will be available by default at the global scope
with any worker using a compatibility date of &lt;code&gt;2025-08-15&lt;/code&gt; or later. It is also available
using the &lt;code&gt;expose_global_message_channel&lt;/code&gt; compatibility flag, or can be explicitly disabled
using the &lt;code&gt;no_expose_global_message_channel&lt;/code&gt; compatibility flag.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;port1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;port2&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;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MessageChannel&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;port2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;onmessage&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;span&gt;event&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Received message:&apos;&lt;/span&gt;&lt;span&gt;,&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;data&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;port2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;postMessage&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Hello from port2!&apos;&lt;/span&gt;&lt;span&gt;)&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;Any value that can be used with the &lt;code&gt;structuredClone(...)&lt;/code&gt; API can be sent over the port.&lt;/p&gt;
&lt;h4&gt;Differences&lt;/h4&gt;
&lt;p&gt;There are a number of key limitations to the &lt;code&gt;MessageChannel&lt;/code&gt; API in Workers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Transfer lists are currently not supported. This means that you will not be able to transfer
ownership of objects like &lt;code&gt;ArrayBuffer&lt;/code&gt; or &lt;code&gt;MessagePort&lt;/code&gt; between ports.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;MessagePort&lt;/code&gt; is not yet serializable. This means that you cannot send a &lt;code&gt;MessagePort&lt;/code&gt; object
through the &lt;code&gt;postMessage&lt;/code&gt; method or via JSRPC calls.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;&apos;messageerror&apos;&lt;/code&gt; event is only partially supported. If the &lt;code&gt;&apos;onmessage&apos;&lt;/code&gt; handler throws an
error, the &lt;code&gt;&apos;messageerror&apos;&lt;/code&gt; event will be triggered, however, it will not be triggered when there
are errors serializing or deserializing the message data. Instead, the error will be thrown when
the &lt;code&gt;postMessage&lt;/code&gt; method is called on the sending port.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;&apos;close&apos;&lt;/code&gt; event will be emitted on both ports when one of the ports is closed, however it
will not be emitted when the Worker is terminated or when one of the ports is garbage collected.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 11 Aug 2025 01:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>WAF - WAF Release - 2025-08-11</title><link>https://developers.cloudflare.com/changelog/post/2025-08-11-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-11-waf-release/</guid><description>&lt;p&gt;This week&apos;s update focuses on a wide range of enterprise software, from network infrastructure and security platforms to content management systems and development frameworks. Flaws include unsafe deserialization, OS command injection, SSRF, authentication bypass, and arbitrary file upload — many of which allow unauthenticated remote code execution. Notable risks include Cisco Identity Services Engine and Ivanti EPMM, where successful exploitation could grant attackers full administrative control of core network infrastructure and popular web services such as WordPress, SharePoint, and Ingress-Nginx, where security bypasses and arbitrary file uploads could lead to complete site or server compromise.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Cisco Identity Services Engine (CVE-2025-20281): Insufficient input validation in a specific API of Cisco Identity Services Engine (ISE) and ISE-PIC allows an unauthenticated, remote attacker to execute arbitrary code with root privileges on an affected device.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Wazuh Server (CVE-2025-24016): An unsafe deserialization vulnerability in Wazuh Server (versions 4.4.0 to 4.9.0) allows for remote code execution and privilege escalation. By injecting unsanitized data, an attacker can trigger an exception to execute arbitrary code on the server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CrushFTP (CVE-2025-54309): A flaw in AS2 validation within CrushFTP allows remote attackers to gain administrative access via HTTPS on systems not using the DMZ proxy feature. This flaw can lead to unauthorized file access and potential system compromise.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Kentico Xperience CMS (CVE-2025-2747, CVE-2025-2748): Vulnerabilities in Kentico Xperience CMS could enable cross-site scripting (XSS), allowing attackers to inject malicious scripts into web pages. Additionally, a flaw could allow unauthenticated attackers to bypass the Staging Sync Server&apos;s authentication, potentially leading to administrative control over the CMS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Node.js (CVE-2025-27210): An incomplete fix for a previous vulnerability (CVE-2025-23084) in Node.js affects the &lt;code&gt;path.join()&lt;/code&gt; API method on Windows systems. The vulnerability can be triggered using reserved Windows device names such as &lt;code&gt;CON&lt;/code&gt;, &lt;code&gt;PRN&lt;/code&gt;, or &lt;code&gt;AUX&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WordPress:Plugin:Simple File List (CVE-2025-34085, CVE-2020-36847):
This vulnerability in the Simple File List plugin for WordPress allows an unauthenticated remote attacker to upload arbitrary files to a vulnerable site. This can be exploited to achieve remote code execution on the server.&lt;br&gt;
(Note: CVE-2025-34085 has been rejected as a duplicate.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;GeoServer (CVE-2024-29198): A Server-Side Request Forgery (SSRF) vulnerability exists in GeoServer&apos;s Demo request endpoint, which can be exploited where the Proxy Base URL has not been configured.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ivanti EPMM (CVE-2025-6771): An OS command injection vulnerability in Ivanti Endpoint Manager Mobile (EPMM) before versions 12.5.0.2, 12.4.0.3, and 12.3.0.3 allows a remote, authenticated attacker with high privileges to execute arbitrary code.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Microsoft SharePoint (CVE-2024-38018): This is a remote code execution vulnerability affecting Microsoft SharePoint Server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Manager-IO (CVE-2025-54122): A critical unauthenticated full read Server-Side Request Forgery (SSRF) vulnerability is present in the proxy handler of both Manager Desktop and Server editions up to version 25.7.18.2519. This allows an unauthenticated attacker to bypass network isolation and access internal services.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ingress-Nginx (CVE-2025-1974): A vulnerability in the Ingress-Nginx controller for Kubernetes allows an attacker to bypass access control rules. An unauthenticated attacker with access to the pod network can achieve arbitrary code execution in the context of the ingress-nginx controller.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PaperCut NG/MF (CVE-2023-2533): A Cross-Site Request Forgery (CSRF) vulnerability has been identified in PaperCut NG/MF. Under specific conditions, an attacker could exploit this to alter security settings or execute arbitrary code if they can deceive an administrator with an active login session into clicking a malicious link.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;SonicWall SMA (CVE-2025-40598): This vulnerability could allow an unauthenticated attacker to bypass security controls. This allows a remote, unauthenticated attacker to potentially execute arbitrary JavaScript code.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WordPress (CVE-2025-5394): The &quot;Alone – Charity Multipurpose Non-profit WordPress Theme&quot; for WordPress  is vulnerable to arbitrary file uploads. A missing capability check allows unauthenticated attackers to upload ZIP files containing webshells disguised as plugins, leading to remote code execution.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These vulnerabilities span a broad range of enterprise technologies, including network access control systems, monitoring platforms, web servers, CMS platforms, cloud services, and collaboration tools. Exploitation techniques range from remote code execution and command injection to authentication bypass, SQL injection, path traversal, and configuration weaknesses.&lt;/p&gt;
&lt;p&gt;A critical flaw in perimeter devices like Ivanti EPMM or SonicWall SMA could allow an unauthenticated attacker to gain remote code execution, completely breaching the primary network defense. A separate vulnerability within Cisco&apos;s Identity Services Engine could then be exploited to bypass network segmentation, granting an attacker widespread internal access. Insecure deserialization issues in platforms like Wazuh Server and CrushFTP could then be used to run malicious payloads or steal sensitive files from administrative consoles. Weaknesses in web delivery controllers like Ingress-Nginx or popular content management systems such as WordPress, SharePoint, and Kentico Xperience create vectors to bypass security controls, exfiltrate confidential data, or fully compromise servers.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ec6480c81253494b947d891e51bc8df1 &lt;/td&gt;&lt;td&gt;100538&lt;/td&gt;&lt;td&gt;GeoServer - SSRF - CVE:CVE-2024-29198&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;b8cb07170b5e4c2b989119cac9e0b290 &lt;/td&gt;&lt;td&gt;100548&lt;/td&gt;&lt;td&gt;Ivanti EPMM - Remote Code Execution - CVE:CVE-2025-6771&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;b3524bf5f5174b65bc892122ad93cda8 &lt;/td&gt;&lt;td&gt;100550&lt;/td&gt;&lt;td&gt;Microsoft SharePoint - Remote Code Execution - CVE:CVE-2024-38018&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;e1369c5d629f4f10a14141381dca5738 &lt;/td&gt;&lt;td&gt;100562&lt;/td&gt;&lt;td&gt;Manager-IO - SSRF - CVE:CVE-2025-54122&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;136f67e2b6a84f15ab9a82a52e9137e1 &lt;/td&gt;&lt;td&gt;100565&lt;/td&gt;&lt;td&gt;&lt;p&gt;Cisco Identity Services Engine - Remote Code Execution -
CVE:CVE-2025-20281&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ed759f7e44184fa398ef71785d8102e1 &lt;/td&gt;&lt;td&gt;100567&lt;/td&gt;&lt;td&gt;Ingress-Nginx - Remote Code Execution - CVE:CVE-2025-1974&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;71b8e7b646f94d79873213cd99105c43 &lt;/td&gt;&lt;td&gt;100569&lt;/td&gt;&lt;td&gt;PaperCut NG/MF - Remote Code Execution - CVE:CVE-2023-2533&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;2450bfbb0cfb4804b109d1c42c81dc88 &lt;/td&gt;&lt;td&gt;100571&lt;/td&gt;&lt;td&gt;SonicWall SMA - XSS - CVE:CVE-2025-40598&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;8ce1903b67e24205a93f5fe6926c96d4 &lt;/td&gt;&lt;td&gt;100573&lt;/td&gt;&lt;td&gt;WordPress - Dangerous File Upload - CVE:CVE-2025-5394&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;7fdb3c7bc7b74703aeef4ab240ec2fda &lt;/td&gt;&lt;td&gt;100806&lt;/td&gt;
&lt;td&gt;Wazuh Server - Remote Code Execution - CVE:CVE-2025-24016&lt;/td&gt;
&lt;td&gt;Log&lt;/td&gt;
&lt;td&gt;Block&lt;/td&gt;
&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;fe088163f51f4928a3c8d91e2401fa3b &lt;/td&gt;&lt;td&gt;100824&lt;/td&gt;
&lt;td&gt;CrushFTP - Remote Code Execution - CVE:CVE-2025-54309&lt;/td&gt;
&lt;td&gt;Log&lt;/td&gt;
&lt;td&gt;Block&lt;/td&gt;
&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;3638baed75924604987b86d874920ace &lt;/td&gt;&lt;td&gt;100824A&lt;/td&gt;
&lt;td&gt;CrushFTP - Remote Code Execution - CVE:CVE-2025-54309 - 2&lt;/td&gt;
&lt;td&gt;Log&lt;/td&gt;
&lt;td&gt;Block&lt;/td&gt;
&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;dda4f95b3a3e4ebb9e194aa5c7e63549 &lt;/td&gt;&lt;td&gt;100825&lt;/td&gt;&lt;td&gt;AMI MegaRAC - Auth Bypass - CVE:CVE-2024-54085&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;7dc07014cefa4ce9adf21da7b79037e6 &lt;/td&gt;&lt;td&gt;100826&lt;/td&gt;&lt;td&gt;Kentico Xperience CMS - Auth Bypass - CVE:CVE-2025-2747&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;7c7a0a37e79a4949ba840c9acaf261aa &lt;/td&gt;&lt;td&gt;100827&lt;/td&gt;&lt;td&gt;Kentico Xperience CMS - XSS - CVE:CVE-2025-2748&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;54dd826f578c483196ce852b6f1c2d12 &lt;/td&gt;&lt;td&gt;100828&lt;/td&gt;&lt;td&gt;Node.js - Directory Traversal - CVE:CVE-2025-27210&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;a2867f7456c14213a94509a40341fccc &lt;/td&gt;&lt;td&gt;100829&lt;/td&gt;&lt;td&gt;&lt;p&gt;WordPress:Plugin:Simple File List - Remote Code Execution -
CVE:CVE-2025-34085&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;4cdb0e792d1a428a897526624cefeeda &lt;/td&gt;&lt;td&gt;100829A&lt;/td&gt;&lt;td&gt;&lt;p&gt;WordPress:Plugin:Simple File List - Remote Code Execution -
CVE:CVE-2025-34085 - 2&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 11 Aug 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Wrangler and the Cloudflare Vite plugin support `.env` files in local development</title><link>https://developers.cloudflare.com/changelog/post/2025-08-08-dot-env-in-local-dev/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-08-dot-env-in-local-dev/</guid><description>&lt;p&gt;Now, you can use &lt;code&gt;.env&lt;/code&gt; files to provide secrets and override environment variables on the &lt;code&gt;env&lt;/code&gt; object during local development with Wrangler and the Cloudflare Vite plugin.&lt;/p&gt;
&lt;p&gt;Previously in local development, if you wanted to provide secrets or environment variables during local development, you had to use &lt;code&gt;.dev.vars&lt;/code&gt; files.
This is still supported, but you can now also use &lt;code&gt;.env&lt;/code&gt; files, which are more familiar to many developers.&lt;/p&gt;
&lt;h4&gt;Using &lt;code&gt;.env&lt;/code&gt; files in local development&lt;/h4&gt;
&lt;p&gt;You can create a &lt;code&gt;.env&lt;/code&gt; file in your project root to define environment variables that will be used when running &lt;code&gt;wrangler dev&lt;/code&gt; or &lt;code&gt;vite dev&lt;/code&gt;. The &lt;code&gt;.env&lt;/code&gt; file should be formatted like a &lt;code&gt;dotenv&lt;/code&gt; file, such as &lt;code&gt;KEY=&quot;VALUE&quot;&lt;/code&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;TITLE&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;My Worker&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;API_TOKEN&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;dev-token&quot;&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;When you run &lt;code&gt;wrangler dev&lt;/code&gt; or &lt;code&gt;vite dev&lt;/code&gt;, the environment variables defined in the &lt;code&gt;.env&lt;/code&gt; file will be available in your Worker code via the &lt;code&gt;env&lt;/code&gt; object:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;TITLE&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// &quot;My Worker&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;API_TOKEN&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// &quot;dev-token&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&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;`https://api.example.com/data?token=&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;apiToken&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;)&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Title: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;title&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;span&gt; (&lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;text&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;/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;h4&gt;Multiple environments with &lt;code&gt;.env&lt;/code&gt; files&lt;/h4&gt;
&lt;p&gt;If your Worker defines multiple &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/environments/&quot;&gt;environments&lt;/a&gt;, you can set different variables for each environment (ex: production or staging) by creating files named &lt;code&gt;.env.&amp;#x3C;environment-name&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;When you use &lt;code&gt;wrangler &amp;#x3C;command&gt; --env &amp;#x3C;environment-name&gt;&lt;/code&gt; or &lt;code&gt;CLOUDFLARE_ENV=&amp;#x3C;environment-name&gt; vite dev&lt;/code&gt;, the corresponding environment-specific file will also be loaded and merged with the &lt;code&gt;.env&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;For example, if you want to set different environment variables for the &lt;code&gt;staging&lt;/code&gt; environment, you can create a file named &lt;code&gt;.env.staging&lt;/code&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;API_TOKEN&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;staging-token&quot;&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;When you run &lt;code&gt;wrangler dev --env staging&lt;/code&gt; or &lt;code&gt;CLOUDFLARE_ENV=staging vite dev&lt;/code&gt;, the environment variables from &lt;code&gt;.env.staging&lt;/code&gt; will be merged onto those from &lt;code&gt;.env&lt;/code&gt;.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;TITLE&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// &quot;My Worker&quot; (from `.env`)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiToken&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;API_TOKEN&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// &quot;staging-token&quot; (from `.env.staging`, overriding the value from `.env`)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&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;`https://api.example.com/data?token=&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;apiToken&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;)&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Title: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;title&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;span&gt; (&lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;text&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;/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;h4&gt;Find out more&lt;/h4&gt;
&lt;p&gt;For more information on how to use &lt;code&gt;.env&lt;/code&gt; files with Wrangler and the Cloudflare Vite plugin, see the following documentation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/development-testing/environment-variables&quot;&gt;Environment variables and secrets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler&quot; target=&quot;_blank&quot;&gt;Wrangler Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/vite&quot; target=&quot;_blank&quot;&gt;Cloudflare Vite Plugin Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 08 Aug 2025 01:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Stream - Introducing observability and metrics for Stream Live Inputs</title><link>https://developers.cloudflare.com/changelog/post/2025-08-08-stream-live-observability/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-08-stream-live-observability/</guid><description>&lt;p&gt;New information about broadcast metrics and events is now available in
&lt;a href=&quot;https://developers.cloudflare.com/stream/&quot;&gt;Cloudflare Stream&lt;/a&gt; in the Live Input details of the Dashboard.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-08-05-live-input-metrics.B31Z3RGB_Z3m1Fc.webp&quot; alt=&quot;Live Input details showing metrics&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;You can now easily understand broadcast-side health and performance with new
observability, which can help when troubleshooting common issues, particularly
for new customers who are just getting started, and platform customers who may
have limited visibility into how their end-users configure their encoders.&lt;/p&gt;
&lt;p&gt;To get started, start a live stream (&lt;a href=&quot;https://developers.cloudflare.com/stream/examples/obs-from-scratch/&quot;&gt;just getting started?&lt;/a&gt;), then visit the Live Input details page in Dash.&lt;/p&gt;
&lt;p&gt;See our new live &lt;a href=&quot;https://developers.cloudflare.com/stream/stream-live/troubleshooting/&quot;&gt;Troubleshooting&lt;/a&gt; guide
to learn what these metrics mean and how to use them to address common broadcast
issues.&lt;/p&gt;</description><pubDate>Fri, 08 Aug 2025 00:00:00 GMT</pubDate><product>Stream</product><category>Stream</category></item><item><title>Workers - Directly import `waitUntil` in Workers for easily spawning background tasks</title><link>https://developers.cloudflare.com/changelog/post/2025-08-08-add-waituntil-cloudflare-workers/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-08-add-waituntil-cloudflare-workers/</guid><description>&lt;p&gt;You can now import &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/context/#waituntil&quot;&gt;&lt;code&gt;waitUntil&lt;/code&gt;&lt;/a&gt; from &lt;code&gt;cloudflare:workers&lt;/code&gt; to extend your Worker&apos;s execution beyond the request lifecycle from anywhere in your code.&lt;/p&gt;
&lt;p&gt;Previously, &lt;code&gt;waitUntil&lt;/code&gt; could only be accessed through the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/context/&quot;&gt;execution context&lt;/a&gt; (&lt;code&gt;ctx&lt;/code&gt;) parameter passed to your Worker&apos;s handler functions. This meant that if you needed to schedule background tasks from deeply nested functions or utility modules, you had to pass the &lt;code&gt;ctx&lt;/code&gt; object through multiple function calls to access &lt;code&gt;waitUntil&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now, you can import &lt;code&gt;waitUntil&lt;/code&gt; directly and use it anywhere in your Worker without needing to pass &lt;code&gt;ctx&lt;/code&gt; as a parameter:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;waitUntil&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;cloudflare:workers&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;trackAnalytics&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;eventData&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;analyticsPromise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://analytics.example.com/track&quot;&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;method&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;POST&quot;&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;body&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;eventData&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;span&gt;;&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;// Extend execution to ensure analytics tracking completes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;waitUntil&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;analyticsPromise&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;This is particularly useful when you want to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Schedule background tasks from utility functions or modules&lt;/li&gt;
&lt;li&gt;Extend execution for analytics, logging, or cleanup operations&lt;/li&gt;
&lt;li&gt;Avoid passing the execution context through multiple layers of function calls&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;waitUntil&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;cloudflare:workers&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&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;// Background task that should complete even after response is sent&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;cleanupTempData&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;KV_NAMESPACE&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Hello, World!&quot;&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;/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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cleanupTempData&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;kvNamespace&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;// This function can now use waitUntil without needing ctx&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;deletePromise&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;kvNamespace&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;temp-key&quot;&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;waitUntil&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;deletePromise&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;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;The imported &lt;code&gt;waitUntil&lt;/code&gt; function works the same way as &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/context/#waituntil&quot;&gt;&lt;code&gt;ctx.waitUntil()&lt;/code&gt;&lt;/a&gt;. It extends your Worker&apos;s execution to wait for the provided promise to settle, but does not block the response from being sent to the client.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;For more information, see the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/context/#waituntil&quot;&gt;&lt;code&gt;waitUntil&lt;/code&gt; documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 08 Aug 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Email security - Expanded Email Link Isolation</title><link>https://developers.cloudflare.com/changelog/post/2025-08-07-expanded-link-isolation/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-07-expanded-link-isolation/</guid><description>&lt;p&gt;When you deploy MX or Inline, not only can you apply email link isolation to suspicious links in all emails (including benign), you can now also apply email link isolation to all links of a specified disposition. This provides more flexibility in controlling user actions within emails.&lt;/p&gt;
&lt;p&gt;For example, you may want to deliver suspicious messages but isolate the links found within them so that users who choose to interact with the links will not accidentally expose your organization to threats. This means your end users are more secure than ever before.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/expanded-link-actions.DziIg6E8_1Sx0Ar.webp&quot; alt=&quot;Expanded Email Link Isolation Configuration&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To isolate all links within a message based on the disposition, select &lt;strong&gt;Settings&lt;/strong&gt; &gt; &lt;strong&gt;Link Actions&lt;/strong&gt; &gt; &lt;strong&gt;View&lt;/strong&gt; and select &lt;strong&gt;Configure&lt;/strong&gt;. As with other other links you isolate, an interstitial will be provided to warn users that this site has been isolated and the link will be recrawled live to evaluate if there are any changes in our threat intel. Learn more about this feature on &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/email-security/settings/detection-settings/configure-link-actions/&quot; target=&quot;_blank&quot;&gt;Configure link actions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This feature is available across these Email security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 07 Aug 2025 23:22:49 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>WAF - WAF Release - 2025-08-07 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-08-07-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-07-emergency-waf-release/</guid><description>&lt;p&gt;This week’s highlight focuses on two critical vulnerabilities affecting key infrastructure and enterprise content management platforms. Both flaws present significant remote code execution risks that can be exploited with minimal or no user interaction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Squid (≤6.3) — CVE-2025-54574: A heap buffer overflow occurs when processing Uniform Resource Names (URNs). This vulnerability may allow remote attackers to execute arbitrary code on the server. The issue has been resolved in version 6.4.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Adobe AEM (≤6.5.23) — CVE-2025-54253: Due to a misconfiguration, attackers can achieve remote code execution without requiring any user interaction, posing a severe threat to affected deployments.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Both vulnerabilities expose critical attack vectors that can lead to full server compromise. The Squid heap buffer overflow allows remote code execution by crafting malicious URNs, which can lead to server takeover or denial of service. Given Squid’s widespread use as a caching proxy, this flaw could be exploited to disrupt network traffic or gain footholds inside secure environments.&lt;/p&gt;
&lt;p&gt;Adobe AEM’s remote code execution vulnerability enables attackers to run arbitrary code on the content management server without any user involvement. This puts sensitive content, application integrity, and the underlying infrastructure at extreme risk. Exploitation could lead to data theft, defacement, or persistent backdoor installation.&lt;/p&gt;
&lt;p&gt;These findings reinforce the urgency of updating to the patched versions — Squid 6.4 and Adobe AEM 6.5.24 or later — and reviewing configurations to prevent exploitation.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;f61ed7c1e7e24c3380289e41ef7e015b &lt;/td&gt;&lt;td&gt;100844&lt;/td&gt;&lt;td&gt;Adobe Experience Manager Forms - Remote Code Execution - CVE:CVE-2025-54253&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;e76e65f5a3aa43f49e0684a6baec057a &lt;/td&gt;&lt;td&gt;100840&lt;/td&gt;&lt;td&gt;Squid - Buffer Overflow - CVE:CVE-2025-54574&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Thu, 07 Aug 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Requests made from Cloudflare Workers can now force a revalidation of their cache with the origin</title><link>https://developers.cloudflare.com/changelog/post/2025-08-07-cache-no-cache/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-07-cache-no-cache/</guid><description>&lt;p&gt;By setting the value of the &lt;code&gt;cache&lt;/code&gt; property to &lt;code&gt;no-cache&lt;/code&gt;, you can force &lt;a href=&quot;https://developers.cloudflare.com/workers/reference/how-the-cache-works/&quot;&gt;Cloudflare&apos;s
cache&lt;/a&gt; to revalidate its contents with the origin when
making subrequests from &lt;a href=&quot;https://developers.cloudflare.com/workers&quot;&gt;Cloudflare Workers&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://cloudflare.com&quot;&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;cache&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;no-cache&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://cloudflare.com&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; cache&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;no-cache&apos;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&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;satisfies&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ExportedHandler&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Environment&lt;/span&gt;&lt;span&gt;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;When &lt;code&gt;no-cache&lt;/code&gt; is set, the Worker request will first look for a match in Cloudflare&apos;s cache, then:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If there is a match, a conditional request is sent to the origin, regardless of whether or not the match is fresh or stale. If the resource has not changed, the
cached version is returned. If the resource has changed, it will be downloaded from the origin, updated in the cache, and returned.&lt;/li&gt;
&lt;li&gt;If there is no match, Workers will make a standard request to the origin and cache the response.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This increases compatibility with NPM packages and JavaScript frameworks that rely on setting the
&lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/request/#options&quot;&gt;&lt;code&gt;cache&lt;/code&gt;&lt;/a&gt; property, which is a cross-platform standard part
of the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/request/&quot;&gt;&lt;code&gt;Request&lt;/code&gt;&lt;/a&gt; interface. Previously, if you set the &lt;code&gt;cache&lt;/code&gt;
property on &lt;code&gt;Request&lt;/code&gt; to &lt;code&gt;&apos;no-cache&apos;&lt;/code&gt;, the Workers runtime threw an exception.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn &lt;a href=&quot;https://developers.cloudflare.com/workers/reference/how-the-cache-works/&quot;&gt;how the Cache works with Cloudflare Workers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Enable &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/nodejs/&quot;&gt;Node.js compatibility&lt;/a&gt; for your Cloudflare Worker&lt;/li&gt;
&lt;li&gt;Explore &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/&quot;&gt;Runtime APIs&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/&quot;&gt;Bindings&lt;/a&gt; available in Cloudflare Workers&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 07 Aug 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Load Balancing - Improvements to Monitoring Using Zone Settings</title><link>https://developers.cloudflare.com/changelog/post/2025-08-06-zone-monitoring-improvements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-06-zone-monitoring-improvements/</guid><description>&lt;p&gt;Cloudflare Load Balancing Monitors support loading and applying settings for a specific zone to monitoring requests to origin endpoints. This feature has been migrated to new infrastructure to improve reliability, performance, and accuracy.&lt;/p&gt;
&lt;p&gt;All zone monitors have been tested against the new infrastructure. There should be no change to health monitoring results of currently healthy and active pools. Newly created or re-enabled pools may need validation of their monitor zone settings before being introduced to service, especially regarding correct application of mTLS.&lt;/p&gt;
&lt;h4&gt;What you can expect:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;More reliable application of zone settings to monitoring requests, including
&lt;ul&gt;
&lt;li&gt;Authenticated Origin Pulls&lt;/li&gt;
&lt;li&gt;Aegis Egress IP Pools&lt;/li&gt;
&lt;li&gt;Argo Smart Routing&lt;/li&gt;
&lt;li&gt;HTTP/2 to Origin&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Improved support and bug fixes for retries, redirects, and proxied origin resolution&lt;/li&gt;
&lt;li&gt;Improved performance and reliability of monitoring requests withing the Cloudflare network&lt;/li&gt;
&lt;li&gt;Unrelated CDN or WAF configuration changes should have no risk of impact to pool health&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 06 Aug 2025 00:00:00 GMT</pubDate><product>Load Balancing</product><category>Load Balancing</category></item><item><title>Radar - Certificate Transparency Insights in Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2025-08-04-radar-ct-insights/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-04-radar-ct-insights/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; now introduces Certificate Transparency (CT) insights, providing visibility into certificate issuance trends based on Certificate Transparency logs currently monitored by Cloudflare.&lt;/p&gt;
&lt;p&gt;The following API endpoints are now available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/ct/methods/timeseries/&quot;&gt;&lt;code&gt;/ct/timeseries&lt;/code&gt;&lt;/a&gt;: Retrieves certificate issuance time series.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/ct/methods/summary/&quot;&gt;&lt;code&gt;/ct/summary/{dimension}&lt;/code&gt;&lt;/a&gt;: Retrieves certificate distribution by dimension.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/ct/methods/timeseries_groups/&quot;&gt;&lt;code&gt;/ct/timeseries_groups/{dimension}&lt;/code&gt;&lt;/a&gt;: Retrieves time series of certificate distribution by dimension.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/ct/subresources/authorities/methods/list/&quot;&gt;&lt;code&gt;/ct/authorities&lt;/code&gt;&lt;/a&gt;: Lists certification authorities.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/ct/subresources/authorities/methods/get/&quot;&gt;&lt;code&gt;/ct/authorities/{ca_slug}&lt;/code&gt;&lt;/a&gt;: Retrieves details about a Certification Authority (CA). CA information is derived from the &lt;a href=&quot;https://www.ccadb.org/&quot; target=&quot;_blank&quot;&gt;Common CA Database (CCADB)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/ct/subresources/logs/methods/list/&quot;&gt;&lt;code&gt;/ct/logs&lt;/code&gt;&lt;/a&gt;: Lists CT logs.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/ct/subresources/logs/methods/get/&quot;&gt;&lt;code&gt;/ct/logs/{log_slug}&lt;/code&gt;&lt;/a&gt;: Retrieves details about a CT log. CT log information is derived from the &lt;a href=&quot;https://googlechrome.github.io/CertificateTransparency/log_lists.html&quot; target=&quot;_blank&quot;&gt;Google Chrome log list&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the &lt;code&gt;summary&lt;/code&gt; and &lt;code&gt;timeseries_groups&lt;/code&gt; endpoints, the following dimensions are available (and also usable as filters):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ca&lt;/code&gt;: Certification Authority (certificate issuer)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ca_owner&lt;/code&gt;: Certification Authority Owner&lt;/li&gt;
&lt;li&gt;&lt;code&gt;duration&lt;/code&gt;: Certificate validity duration (between NotBefore and NotAfter dates)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;entry_type&lt;/code&gt;: Entry type (certificate vs. pre-certificate)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expiration_status&lt;/code&gt;: Expiration status (valid vs. expired)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;has_ips&lt;/code&gt;: Presence of IP addresses in certificate &lt;a href=&quot;https://developers.cloudflare.com/ssl/origin-configuration/origin-ca/#hostname-and-wildcard-coverage&quot; target=&quot;_blank&quot;&gt;Subject Alternative Names (SANs)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;has_wildcards&lt;/code&gt;: Presence of wildcard DNS names in certificate SANs&lt;/li&gt;
&lt;li&gt;&lt;code&gt;log&lt;/code&gt;: CT log name&lt;/li&gt;
&lt;li&gt;&lt;code&gt;log_api&lt;/code&gt;: CT log API (&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc6962&quot; target=&quot;_blank&quot;&gt;RFC6962&lt;/a&gt; vs. &lt;a href=&quot;https://c2sp.org/static-ct-api&quot; target=&quot;_blank&quot;&gt;Static&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;log_operator&lt;/code&gt;: CT log operator&lt;/li&gt;
&lt;li&gt;&lt;code&gt;public_key_algorithm&lt;/code&gt;: Public key algorithm of certificate&apos;s key&lt;/li&gt;
&lt;li&gt;&lt;code&gt;signature_algorithm&lt;/code&gt;: Signature algorithm used by CA to sign certificate&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tld&lt;/code&gt;: Top-level domain for DNS names found in certificates SANs&lt;/li&gt;
&lt;li&gt;&lt;code&gt;validation_level&lt;/code&gt;: &lt;a href=&quot;https://www.cloudflare.com/learning/ssl/types-of-ssl-certificates/&quot; target=&quot;_blank&quot;&gt;Validation level&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check out the new Certificate Transparency insights in the &lt;a href=&quot;https://radar.cloudflare.com/certificate-transparency&quot; target=&quot;_blank&quot;&gt;new Radar page&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 06 Aug 2025 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>Agents, Workers - Agents SDK adds MCP Elicitation support, http-streamable suppport, task queues, email integration and more</title><link>https://developers.cloudflare.com/changelog/post/2025-08-05-agents-mcp-update/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-05-agents-mcp-update/</guid><description>&lt;p&gt;The latest releases of &lt;a href=&quot;https://github.com/cloudflare/agents&quot; target=&quot;_blank&quot;&gt;@cloudflare/agents&lt;/a&gt; brings major improvements to MCP transport protocols support and agents connectivity. Key updates include:&lt;/p&gt;
&lt;h4&gt;MCP elicitation support&lt;/h4&gt;
&lt;p&gt;MCP servers can now request user input during tool execution, enabling interactive workflows like confirmations, forms, and multi-step processes. This feature uses durable storage to preserve elicitation state even during agent hibernation, ensuring seamless user interactions across agent lifecycle events.&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;// Request user confirmation via elicitation&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;confirmation&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;elicitInput&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;message&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`Are you sure you want to increment the counter by &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;,&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;requestedSchema&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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;object&quot;&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;properties&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;confirmed&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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;boolean&quot;&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;title&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Confirm increment&quot;&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;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Check to confirm the increment&quot;&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;span&gt;required&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;confirmed&quot;&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;/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;/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://github.com/whoiskatrin/agents/tree/main/examples/mcp-elicitation-demo&quot; target=&quot;_blank&quot;&gt;demo&lt;/a&gt; to see elicitation in action.&lt;/p&gt;
&lt;h4&gt;HTTP streamable transport for MCP&lt;/h4&gt;
&lt;p&gt;MCP now supports HTTP streamable transport which is recommended over SSE. This transport type offers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Better performance&lt;/strong&gt;: More efficient data streaming and reduced overhead&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved reliability&lt;/strong&gt;: Enhanced connection stability and error recover- &lt;strong&gt;Automatic fallback&lt;/strong&gt;: If streamable transport is not available, it gracefully falls back to SSE&lt;/li&gt;
&lt;/ul&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyMCP&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;serve&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/mcp&quot;&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;binding&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MyMCP&quot;&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;/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;The SDK automatically selects the best available transport method, gracefully falling back from streamable-http to SSE when needed.&lt;/p&gt;
&lt;h4&gt;Enhanced MCP connectivity&lt;/h4&gt;
&lt;p&gt;Significant improvements to MCP server connections and transport reliability:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Auto transport selection&lt;/strong&gt;: Automatically determines the best transport method, falling back from streamable-http to SSE as needed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved error handling&lt;/strong&gt;: Better connection state management and error reporting for MCP servers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reliable prop updates&lt;/strong&gt;: Centralized agent property updates ensure consistency across different contexts&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Lightweight .queue for fast task deferral&lt;/h4&gt;
&lt;p&gt;You can use &lt;code&gt;.queue()&lt;/code&gt; to enqueue background work — ideal for tasks like processing user messages, sending notifications etc.&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;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;doSomethingExpensive&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;payload&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;// a long running process that you want to run in the background&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;queueSomething&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;queue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;doSomethingExpensive&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;somePayload&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// this will NOT block further execution, and runs in the background&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;queue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;doSomethingExpensive&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;someOtherPayload&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// the callback will NOT run until the previous callback is complete&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// ... call as many times as you want&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;Want to try it yourself? Just define a method like processMessage in your agent, and you’re ready to scale.&lt;/p&gt;
&lt;h4&gt;New email adapter&lt;/h4&gt;
&lt;p&gt;Want to build an AI agent that can receive and respond to emails automatically? With the new email adapter and onEmail lifecycle method, now you can.&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;EmailAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;onEmail&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;email&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AgentEmail&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;raw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;email&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getRaw&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;parsed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PostalMime&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;raw&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// create a response based on the email contents&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 then send a reply&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replyToEmail&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;email&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;fromName&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Email Agent&quot;&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;body&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`Thanks for your email! You&apos;ve sent us &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;parsed&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;subject&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;. We&apos;ll process it shortly.`&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;/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;You route incoming mail like this:&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;email&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;email&lt;/span&gt;&lt;span&gt;,&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;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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;routeAgentEmail&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;email&lt;/span&gt;&lt;span&gt;,&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;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;resolver&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createAddressBasedEmailResolver&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;EmailAgent&quot;&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;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;You can find a full example &lt;a href=&quot;https://github.com/cloudflare/agents/tree/main/examples/email-agent&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Automatic context wrapping for custom methods&lt;/h4&gt;
&lt;p&gt;Custom methods are now automatically wrapped with the agent&apos;s context, so calling &lt;code&gt;getCurrentAgent()&lt;/code&gt; should work regardless of where in an agent&apos;s lifecycle it&apos;s called. Previously this would not work on RPC calls, but now just works out of the box.&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;suggestReply&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&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;// getCurrentAgent() now correctly works, even when called inside an RPC method&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&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;span&gt; &lt;/span&gt;&lt;span&gt;getCurrentAgent&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;generateText&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;prompt&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`Suggest a reply to: &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot; from &quot;&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;`&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;tools&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;replyWithEmoji&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;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;Try it out and tell us what you build!&lt;/p&gt;</description><pubDate>Tue, 05 Aug 2025 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>Agents, Workers - Cloudflare Sandbox SDK adds streaming, code interpreter, Git support, process control and more</title><link>https://developers.cloudflare.com/changelog/post/2025-08-05-sandbox-sdk-major-update/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-05-sandbox-sdk-major-update/</guid><description>&lt;p&gt;We’ve shipped a major release for the &lt;a href=&quot;https://github.com/cloudflare/sandbox-sdk&quot; target=&quot;_blank&quot;&gt;@cloudflare/sandbox&lt;/a&gt; SDK, turning it into a full-featured, container-based execution platform that runs securely on Cloudflare Workers.&lt;/p&gt;
&lt;p&gt;This update adds live streaming of output, persistent Python and JavaScript code interpreters with rich output support (charts, tables, HTML, JSON), file system access, Git operations, full background process control, and the ability to expose running services via public URLs.&lt;/p&gt;
&lt;p&gt;This makes it ideal for building AI agents, CI runners, cloud REPLs, data analysis pipelines, or full developer tools — all without managing infrastructure.&lt;/p&gt;
&lt;h4&gt;Code interpreter (Python, JS, TS)&lt;/h4&gt;
&lt;p&gt;Create persistent code contexts with support for rich visual + structured outputs.&lt;/p&gt;
&lt;h4&gt;createCodeContext(options)&lt;/h4&gt;
&lt;p&gt;Creates a new code execution context with persistent state.&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;// Create a Python context&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pythonCtx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;createCodeContext&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; language&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;python&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Create a JavaScript context&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;jsCtx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;createCodeContext&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; language&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;javascript&quot;&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;/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;Options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;language: Programming language (&apos;python&apos; | &apos;javascript&apos; | &apos;typescript&apos;)&lt;/li&gt;
&lt;li&gt;cwd: Working directory (default: /workspace)&lt;/li&gt;
&lt;li&gt;envVars: Environment variables for the context&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;runCode(code, options)&lt;/h4&gt;
&lt;p&gt;Executes code with optional streaming callbacks.&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;// Simple execution&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;execution&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;runCode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;print(&quot;Hello World&quot;)&apos;&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;context&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pythonCtx&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// With streaming callbacks&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;runCode&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;for i in range(5):&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;print(f&quot;Step {i}&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;time.sleep(1)&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;span&gt;context&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pythonCtx&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;onStdout&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;output&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Real-time:&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;output&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;text&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;onResult&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Result:&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&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;/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;/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;Options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;language: Programming language (&apos;python&apos; | &apos;javascript&apos; | &apos;typescript&apos;)&lt;/li&gt;
&lt;li&gt;cwd: Working directory (default: /workspace)&lt;/li&gt;
&lt;li&gt;envVars: Environment variables for the context&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Real-time streaming output&lt;/h4&gt;
&lt;p&gt;Returns a streaming response for real-time processing.&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;const&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; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;runCodeStream&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;&quot;import time; [print(i) for i in range(10)]&quot;&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;// Process the stream as needed&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;h4&gt;Rich output handling&lt;/h4&gt;
&lt;p&gt;Interpreter outputs are auto-formatted and returned in multiple formats:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;text&lt;/li&gt;
&lt;li&gt;html (e.g., Pandas tables)&lt;/li&gt;
&lt;li&gt;png, svg (e.g., Matplotlib charts)&lt;/li&gt;
&lt;li&gt;json (structured data)&lt;/li&gt;
&lt;li&gt;chart (parsed visualizations)&lt;/li&gt;
&lt;/ul&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;runCode&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;import seaborn as sns&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import matplotlib.pyplot as plt&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;data = sns.load_dataset(&quot;flights&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pivot = data.pivot(&quot;month&quot;, &quot;year&quot;, &quot;passengers&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;sns.heatmap(pivot, annot=True, fmt=&quot;d&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;plt.title(&quot;Flight Passengers&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;plt.show()&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;pivot.to_dict()&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; context&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pythonCtx&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;/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;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;png&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Chart output:&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;png&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;h4&gt;Preview URLs from Exposed Ports&lt;/h4&gt;
&lt;p&gt;Start background processes and expose them with live URLs.&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;startProcess&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;python -m http.server 8000&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;preview&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;exposePort&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;8000&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Live preview at:&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;preview&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;)&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;h4&gt;Full process lifecycle control&lt;/h4&gt;
&lt;p&gt;Start, inspect, and terminate long-running background processes.&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;process&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;startProcess&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;node server.js&quot;&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Started process &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;process&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; with PID &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;process&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;pid&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Monitor the process&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;logStream&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;streamProcessLogs&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;process&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;id&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;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;parseSSEStream&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;LogEvent&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;logStream&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Server: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;log&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;`&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;ul&gt;
&lt;li&gt;listProcesses() - List all running processes&lt;/li&gt;
&lt;li&gt;getProcess(id) - Get detailed process status&lt;/li&gt;
&lt;li&gt;killProcess(id, signal) - Terminate specific processes&lt;/li&gt;
&lt;li&gt;killAllProcesses() - Kill all processes&lt;/li&gt;
&lt;li&gt;streamProcessLogs(id, options) - Stream logs from running processes&lt;/li&gt;
&lt;li&gt;getProcessLogs(id) - Get accumulated process output&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Git integration&lt;/h4&gt;
&lt;p&gt;Clone Git repositories directly into the sandbox.&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;gitCheckout&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://github.com/user/repo&quot;&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;branch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;main&quot;&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;targetDir&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-project&quot;&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;/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;Sandboxes are still experimental. We&apos;re using them to explore how isolated, container-like workloads might scale on Cloudflare — and to help define the developer experience around them.&lt;/p&gt;</description><pubDate>Tue, 05 Aug 2025 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>Agents, Workers AI - OpenAI open models now available on Workers AI</title><link>https://developers.cloudflare.com/changelog/post/2025-08-05-openai-open-models/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-05-openai-open-models/</guid><description>&lt;p&gt;We&apos;re thrilled to be a Day 0 partner with &lt;a href=&quot;http://openai.com/index/introducing-gpt-oss&quot; target=&quot;_blank&quot;&gt;OpenAI&lt;/a&gt; to bring their &lt;a href=&quot;https://openai.com/index/gpt-oss-model-card/&quot; target=&quot;_blank&quot;&gt;latest open models&lt;/a&gt; to Workers AI, including support for Responses API, Code Interpreter, and Web Search (coming soon).&lt;/p&gt;
&lt;p&gt;Get started with the new models at &lt;code&gt;@cf/openai/gpt-oss-120b&lt;/code&gt; and &lt;code&gt;@cf/openai/gpt-oss-20b&lt;/code&gt;.
Check out the &lt;a href=&quot;https://blog.cloudflare.com/openai-gpt-oss-on-workers-ai&quot; target=&quot;_blank&quot;&gt;blog&lt;/a&gt; for more details about the new models, and the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/gpt-oss-120b&quot;&gt;&lt;code&gt;gpt-oss-120b&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/gpt-oss-20b&quot;&gt;&lt;code&gt;gpt-oss-20b&lt;/code&gt;&lt;/a&gt; model pages for more information about pricing and context windows.&lt;/p&gt;
&lt;h4&gt;Responses API&lt;/h4&gt;
&lt;p&gt;If you call the model through:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Workers Binding, it will accept/return Responses API – &lt;code&gt;env.AI.run(“@cf/openai/gpt-oss-120b”)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;REST API on &lt;code&gt;/run&lt;/code&gt; endpoint, it will accept/return Responses API – &lt;code&gt;https://api.cloudflare.com/client/v4/accounts/&amp;#x3C;account_id&gt;/ai/run/@cf/openai/gpt-oss-120b&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;REST API on new &lt;code&gt;/responses&lt;/code&gt; endpoint, it will accept/return Responses API – &lt;code&gt;https://api.cloudflare.com/client/v4/accounts/&amp;#x3C;account_id&gt;/ai/v1/responses&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;REST API for OpenAI Compatible endpoint, it will return Chat Completions (coming soon) – &lt;code&gt;https://api.cloudflare.com/client/v4/accounts/&amp;#x3C;account_id&gt;/ai/v1/chat/completions&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl https://api.cloudflare.com/client/v4/accounts/&amp;#x3C;account_id&gt;/ai/v1/responses \&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;-H &quot;Content-Type: application/json&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;-H &quot;Authorization: Bearer $CLOUDFLARE_API_KEY&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;-d &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;&lt;/span&gt;&lt;span&gt;&quot;model&quot;: &quot;@cf/openai/gpt-oss-120b&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;reasoning&quot;: {&quot;effort&quot;: &quot;medium&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;input&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;role&quot;: &quot;user&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;content&quot;: &quot;What are the benefits of open-source models?&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;/span&gt;&lt;/span&gt;&lt;span&gt;}&apos;&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;h4&gt;Code Interpreter&lt;/h4&gt;
&lt;p&gt;The model is natively trained to support stateful code execution, and we&apos;ve implemented support for this feature using our &lt;a href=&quot;https://github.com/cloudflare/sandbox-sdk&quot; target=&quot;_blank&quot;&gt;Sandbox SDK&lt;/a&gt; and &lt;a href=&quot;https://blog.cloudflare.com/containers-are-available-in-public-beta-for-simple-global-and-programmable/&quot; target=&quot;_blank&quot;&gt;Containers&lt;/a&gt;. Cloudflare&apos;s Developer Platform is uniquely positioned to support this feature, so we&apos;re very excited to bring our products together to support this new use case.&lt;/p&gt;
&lt;h4&gt;Web Search (coming soon)&lt;/h4&gt;
&lt;p&gt;We are working to implement Web Search for the model, where users can bring their own Exa API Key so the model can browse the Internet.&lt;/p&gt;</description><pubDate>Tue, 05 Aug 2025 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers AI</category></item><item><title>Workers - Increased disk space for Workers Builds</title><link>https://developers.cloudflare.com/changelog/post/2025-08-04-builds-increased-disk-size/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-04-builds-increased-disk-size/</guid><description>&lt;p&gt;As part of the ongoing open beta for &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/&quot;&gt;Workers Builds&lt;/a&gt;, we’ve increased the available disk space for builds from &lt;strong&gt;8 GB&lt;/strong&gt; to &lt;strong&gt;20 GB&lt;/strong&gt; for both Free and Paid plans.&lt;/p&gt;
&lt;p&gt;This provides more space for larger projects, dependencies, and build artifacts while improving overall build reliability.&lt;/p&gt;















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Metric&lt;/th&gt;&lt;th&gt;Free Plan&lt;/th&gt;&lt;th&gt;Paid Plans&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Disk Space&lt;/td&gt;&lt;td&gt;20 GB&lt;/td&gt;&lt;td&gt;20 GB&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;All other &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/limits-and-pricing/&quot;&gt;build limits&lt;/a&gt; — including CPU, memory, build minutes, and timeout remain unchanged.&lt;/p&gt;</description><pubDate>Mon, 04 Aug 2025 01:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>WAF - WAF Release - 2025-08-04</title><link>https://developers.cloudflare.com/changelog/post/2025-08-04-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-04-waf-release/</guid><description>&lt;p&gt;This week&apos;s highlight focuses on a series of significant vulnerabilities identified across widely adopted web platforms, from enterprise-grade CMS to essential backend administration tools. The findings reveal multiple vectors for attack, including critical flaws that allow for full server compromise and others that enable targeted attacks against users.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Sitecore (CVE-2025-34509, CVE-2025-34510, CVE-2025-34511): A hardcoded credential allows remote attackers to access administrative APIs. Once authenticated, they can exploit an additional vulnerability to upload arbitrary files, leading to remote code execution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Grafana (CVE-2025-4123): A cross-site scripting (XSS) vulnerability allows an attacker to redirect users to a malicious website, which can then execute arbitrary JavaScript in the victim&apos;s browser.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;LaRecipe (CVE-2025-53833): Through Server-Side Template Injection, attackers can execute arbitrary commands on the server, potentially access sensitive environment variables, and escalate access depending on server configuration.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CentOS WebPanel (CVE-2025-48703): A command injection vulnerability could allow a remote attacker to execute arbitrary commands on the server.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WordPress (CVE-2023-5561): This vulnerability allows unauthenticated attackers to determine the email addresses of users who have published public posts on an affected website.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WordPress Plugin - WPBookit (CVE-2025-6058): A missing file type validation allows unauthenticated attackers to upload arbitrary files to the server, creating the potential for remote code execution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WordPress Theme - Motors (CVE-2025-4322): Due to improper identity validation, an unauthenticated attacker can change the passwords of arbitrary users, including administrators, to gain access to their accounts.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These vulnerabilities pose a multi-layered threat to widely adopted web technologies, ranging from enterprise-grade platforms like Sitecore to everyday solutions such as WordPress, and backend tools like CentOS WebPanel. The most severe risks originate in remote code execution (RCE) flaws found in Sitecore, CentOS WebPanel, LaRecipe, and the WPBookit plugin. These allow attackers to bypass security controls and gain deep access to the server, enabling them to steal sensitive data, deface websites, install persistent malware, or use the compromised server as a launchpad for further attacks.&lt;/p&gt;
&lt;p&gt;The privilege escalation vulnerability is the Motors theme, which allows for a complete administrative account takeover on WordPress sites. This effectively hands control of the application to an attacker, who can then manipulate content, exfiltrate user data, and alter site functionality without needing to breach the server itself.&lt;/p&gt;
&lt;p&gt;The Grafana cross-site scripting (XSS) flaw can be used to hijack authenticated user sessions or steal credentials, turning a trusted user&apos;s browser into an attack vector.&lt;/p&gt;
&lt;p&gt;Meanwhile, the information disclosure flaw in WordPress core provides attackers with valid user emails, fueling targeted phishing campaigns that aim to secure the same account access achievable through the other exploits.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;b8ab4644f8044f3485441ee052f30a13 &lt;/td&gt;&lt;td&gt;100535A&lt;/td&gt;&lt;td&gt;Sitecore - Dangerous File Upload - CVE:CVE-2025-34510, CVE:CVE-2025-34511&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;06d1fe0bd6e44d868e6b910b5045a97f &lt;/td&gt;&lt;td&gt;100535&lt;/td&gt;&lt;td&gt;Sitecore - Information Disclosure - CVE:CVE-2025-34509&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;f71ce87ea6e54eab999223df579cd3e0 &lt;/td&gt;&lt;td&gt;100543&lt;/td&gt;&lt;td&gt;Grafana - Directory Traversal - CVE:CVE-2025-4123&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;bba3d37891a440fb8bc95b970cbd9abc &lt;/td&gt;&lt;td&gt;100545&lt;/td&gt;&lt;td&gt;WordPress - Information Disclosure - CVE:CVE-2023-5561&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;28108d25f1cf470c8e7648938f634977 &lt;/td&gt;&lt;td&gt;100820&lt;/td&gt;&lt;td&gt;CentOS WebPanel - Remote Code Execution - CVE:CVE-2025-48703&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;9d69c796a61444a3aca33dc282ae64c1 &lt;/td&gt;&lt;td&gt;100821&lt;/td&gt;&lt;td&gt;LaRecipe - SSTI - CVE:CVE-2025-53833&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;9b5c5e13d2ca4253a89769f2194f7b2d &lt;/td&gt;&lt;td&gt;100822&lt;/td&gt;&lt;td&gt;WordPress:Plugin:WPBookit - Remote Code Execution - CVE:CVE-2025-6058&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;69d43d704b0641898141a4300bf1b661 &lt;/td&gt;&lt;td&gt;100823&lt;/td&gt;&lt;td&gt;WordPress:Theme:Motors - Privilege Escalation - CVE:CVE-2025-4322&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 04 Aug 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Cloudflare Fundamentals, Terraform - Terraform v5.8.2 now available</title><link>https://developers.cloudflare.com/changelog/post/2025-08-01-terraform-v582-provider/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-01-terraform-v582-provider/</guid><description>&lt;p&gt;Earlier this year, we announced the launch of the new &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-02-03-terraform-v5-provider/&quot;&gt;Terraform v5 Provider&lt;/a&gt;. We are aware of the high mumber of &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;issues&lt;/a&gt; reported by the Cloudflare community related to the v5 release. We have committed to releasing improvements on a 2 week cadeance to ensure it&apos;s stability and reliability. We have also pivoted from an issue-to-issue approach to a resource-per-resource approach - we will be focusing on specific resources for every release, stablizing the release and closing all associated bugs with that resource before moving onto resolving migration issues.&lt;/p&gt;
&lt;p&gt;Thank you for continuing to raise issues. We triage them weekly and they help make our products stronger.&lt;/p&gt;
&lt;h4&gt;Changes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Resources stablized:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cloudflare_custom_pages&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_page_rule&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_dns_record&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_argo_tiered_caching&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Addressed chronic drift issues in &lt;code&gt;cloudflare_logpush_job&lt;/code&gt;, &lt;code&gt;cloudflare_zero_trust_dns_location&lt;/code&gt;, &lt;code&gt;cloudflare_ruleset&lt;/code&gt; &amp;#x26; &lt;code&gt;cloudflare_api_token&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zone_subscripton&lt;/code&gt; returns expected values &lt;code&gt;rate_plan.id&lt;/code&gt; from former versions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_workers_script&lt;/code&gt; can now successfully be destroyed with bindings &amp;#x26; migration for Durable Objects now recorded in tfstate&lt;/li&gt;
&lt;li&gt;Ability to configure &lt;code&gt;add_headers&lt;/code&gt; under &lt;code&gt;cloudflare_zero_trust_gateway_policy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Other bug fixes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a more detailed look at all of the changes, see the &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/releases/tag/v5.8.2&quot; target=&quot;_blank&quot;&gt;changelog&lt;/a&gt; in GitHub.&lt;/p&gt;
&lt;h4&gt;Issues Closed&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5666&quot; target=&quot;_blank&quot;&gt;#5666: cloudflare_ruleset example lists id which is a read-only field&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5578&quot; target=&quot;_blank&quot;&gt;#5578: cloudflare_logpush_job plan always suggests changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5552&quot; target=&quot;_blank&quot;&gt;#5552: 5.4.0: Since provider update, existing cloudflare_list_item would be recreated &quot;created&quot; state&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5670&quot; target=&quot;_blank&quot;&gt;#5670: cloudflare_zone_subscription: uses wrong ID field in Read/Update&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5548&quot; target=&quot;_blank&quot;&gt;#5548: cloudflare_api_token resource always shows changes (drift)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5634&quot; target=&quot;_blank&quot;&gt;#5634: cloudflare_workers_script with bindings fails to be destroyed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5616&quot; target=&quot;_blank&quot;&gt;#5616: cloudflare_workers_script Unable to deploy worker assets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5331&quot; target=&quot;_blank&quot;&gt;#5331: cloudflare_workers_script 500 internal server error when uploading python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5701&quot; target=&quot;_blank&quot;&gt;#5701: cloudflare_workers_script migrations for Durable Objects not recorded in tfstate; cannot be upgraded between versions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5704&quot; target=&quot;_blank&quot;&gt;#5704: cloudflare_workers_script randomly fails to deploy when changing compatibility_date&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5439&quot; target=&quot;_blank&quot;&gt;#5439: cloudflare_workers_script (v5.2.0) ignoring content and bindings properties&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5522&quot; target=&quot;_blank&quot;&gt;#5522: cloudflare_workers_script always detects changes after apply&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5693&quot; target=&quot;_blank&quot;&gt;#5693: cloudflare_zero_trust_access_identity_provider gives recurring change on OTP pin login&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5567&quot; target=&quot;_blank&quot;&gt;#5567: cloudflare_r2_custom_domain doesn&apos;t roundtrip jurisdiction properly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5179&quot; target=&quot;_blank&quot;&gt;#5179: Bad request with when creating cloudflare_api_shield_schema resource&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you have an unaddressed issue with the provider, we encourage you to check the &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues&quot; target=&quot;_blank&quot;&gt;open issues&lt;/a&gt; and open a new one if one does not already exist for what you are experiencing.&lt;/p&gt;
&lt;h4&gt;Upgrading&lt;/h4&gt;
&lt;p&gt;We suggest holding off on migration to v5 while we work on stablization. This help will you avoid any blocking issues while the Terraform resources are actively being stablized.&lt;/p&gt;
&lt;p&gt;If you&apos;d like more information on migrating from v4 to v5, please make use of the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/guides/version-5-upgrade&quot; target=&quot;_blank&quot;&gt;migration guide&lt;/a&gt;. We have provided automated migration scripts using Grit which simplify the transition, although these do not support implementations which use Terraform modules, so customers making use of modules need to migrate manually. Please make use of &lt;code&gt;terraform plan&lt;/code&gt; to test your changes before applying, and let us know if you encounter any additional issues by reporting to our &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;For more info&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;Terraform provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/terraform/&quot;&gt;Documentation on using Terraform with Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 01 Aug 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Terraform</category></item><item><title>Workers - Develop locally with Containers and the Cloudflare Vite plugin</title><link>https://developers.cloudflare.com/changelog/post/2025-08-01-containers-in-vite-dev/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-01-containers-in-vite-dev/</guid><description>&lt;p&gt;You can now configure and run &lt;a href=&quot;https://developers.cloudflare.com/containers&quot;&gt;Containers&lt;/a&gt; alongside your &lt;a href=&quot;https://developers.cloudflare.com/workers&quot;&gt;Worker&lt;/a&gt; during local development when using the &lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/&quot;&gt;Cloudflare Vite plugin&lt;/a&gt;. Previously, you could only develop locally when using &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt; as your local development server.&lt;/p&gt;
&lt;h4&gt;Configuration&lt;/h4&gt;
&lt;p&gt;You can simply configure your Worker and your Container(s) in your Wrangler configuration file:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;container-starter&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;src/index.js&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;containers&lt;/span&gt;&lt;span&gt;&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;class_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MyContainer&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;image&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./Dockerfile&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;5&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;&quot;&lt;/span&gt;&lt;span&gt;durable_objects&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;bindings&lt;/span&gt;&lt;span&gt;&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;class_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MyContainer&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MY_CONTAINER&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;/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;&quot;&lt;/span&gt;&lt;span&gt;migrations&lt;/span&gt;&lt;span&gt;&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;new_sqlite_classes&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;MyContainer&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;v1&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;container-starter&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;src/index.js&quot;&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;containers&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;class_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MyContainer&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;image&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./Dockerfile&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;instances&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;5&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;durable_objects&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;bindings&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;class_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MyContainer&quot;&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;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MY_CONTAINER&quot;&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;migrations&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;new_sqlite_classes&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;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MyContainer&quot;&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;tag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;v1&quot;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;Worker Code&lt;/h4&gt;
&lt;p&gt;Once your Worker and Containers are configured, you can access the Container instances from your Worker code:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Container&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getContainer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/containers&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyContainer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Container&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;defaultPort &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4000&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// Port the container is listening on&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;sleepAfter &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;10m&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// Stop the instance if requests not sent for 10 minutes&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;session-id&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sessionId&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;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;json&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;// Get the container instance for the given session 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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;containerInstance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getContainer&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;MY_CONTAINER&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sessionId&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;// Pass the request to the container instance on its default port&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;containerInstance&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;h4&gt;Local development&lt;/h4&gt;
&lt;p&gt;To develop your Worker locally, start a local dev server by running&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;vite&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&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;in your terminal.&lt;/p&gt;
&lt;h4&gt;Resources&lt;/h4&gt;
&lt;p&gt;Learn more about &lt;a href=&quot;https://developers.cloudflare.com/containers/&quot; target=&quot;_blank&quot;&gt;Cloudflare Containers&lt;/a&gt; or the &lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/&quot; target=&quot;_blank&quot;&gt;Cloudflare Vite plugin&lt;/a&gt; in our developer docs.&lt;/p&gt;</description><pubDate>Fri, 01 Aug 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare WAN - Terraform V5 support for tunnels and routes</title><link>https://developers.cloudflare.com/changelog/post/2025-07-31-terraform-v5-tunnels-routes/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-31-terraform-v5-tunnels-routes/</guid><description>&lt;p&gt;The Cloudflare Terraform provider resources for Cloudflare WAN tunnels and routes now support Terraform provider version 5. Customers using infrastructure-as-code workflows can manage their tunnel and route configuration with the latest provider version.&lt;/p&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;Cloudflare Terraform provider documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 31 Jul 2025 00:00:00 GMT</pubDate><product>Cloudflare WAN</product><category>Cloudflare WAN</category></item><item><title>Magic Transit, Cloudflare WAN - Magic Transit and Magic WAN health check data is fully compatible with the CMB EU setting.</title><link>https://developers.cloudflare.com/changelog/post/2025-07-30-mt-mwan-health-check-cmb-eu/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-30-mt-mwan-health-check-cmb-eu/</guid><description>&lt;p&gt;Today, we are excited to announce that all Magic Transit and Magic WAN customers with CMB EU (&lt;a href=&quot;https://developers.cloudflare.com/data-localization/metadata-boundary/&quot;&gt;Customer Metadata Boundary - Europe&lt;/a&gt;) enabled in their account will be able to access GRE, IPsec, and CNI health check and traffic volume data in the Cloudflare dashboard and via API.&lt;/p&gt;
&lt;p&gt;This ensures that all Magic Transit and Magic WAN customers with CMB EU enabled will be able to access all Magic Transit and Magic WAN features.&lt;/p&gt;
&lt;p&gt;Specifically, these two GraphQL endpoints are now compatible with CMB EU:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;magicTransitTunnelHealthChecksAdaptiveGroups&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;magicTransitTunnelTrafficAdaptiveGroups&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 30 Jul 2025 00:00:00 GMT</pubDate><product>Magic Transit</product><category>Magic Transit</category><category>Cloudflare WAN</category></item><item><title>Workers, Secrets Store - Deploy to Cloudflare buttons now support Worker environment variables, secrets, and Secrets Store secrets</title><link>https://developers.cloudflare.com/changelog/post/2025-07-01-workers-deploy-button-supports-environment-variables-and-secrets/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-01-workers-deploy-button-supports-environment-variables-and-secrets/</guid><description>&lt;p&gt;Any template which uses &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/environment-variables/&quot;&gt;Worker environment variables&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/secrets/&quot;&gt;secrets&lt;/a&gt;, or &lt;a href=&quot;https://developers.cloudflare.com/secrets-store/&quot;&gt;Secrets Store secrets&lt;/a&gt; can now be deployed using a &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/deploy-buttons/&quot;&gt;Deploy to Cloudflare button&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Define environment variables and secrets store bindings in your Wrangler configuration file as normal:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-worker&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./src/index.ts&quot;&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;// Set this to today&apos;s date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;compatibility_date&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2026-04-03&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;vars&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;API_HOST&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://example.com&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;secrets_store_secrets&lt;/span&gt;&lt;span&gt;&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;API_KEY&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;store_id&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;demo&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;secret_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;api-key&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-worker&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./src/index.ts&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Set this to today&apos;s date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;compatibility_date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2026-04-03&quot;&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;vars&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;API_HOST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://example.com&quot;&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;secrets_store_secrets&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;API_KEY&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;store_id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;demo&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;secret_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;api-key&quot;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Add secrets to a &lt;code&gt;.dev.vars.example&lt;/code&gt; or &lt;code&gt;.env.example&lt;/code&gt; file:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;ini&quot;&gt;&lt;code class=&quot;language-ini&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;COOKIE_SIGNING_KEY&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;my-secret &lt;/span&gt;&lt;span&gt;# comment&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;And optionally, you can add a description for these bindings in your template&apos;s &lt;code&gt;package.json&lt;/code&gt; to help users understand how to configure each value:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-worker&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;private&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;&quot;&lt;/span&gt;&lt;span&gt;cloudflare&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;bindings&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;API_KEY&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Select your company&apos;s API key for connecting to the example service.&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;COOKIE_SIGNING_KEY&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Generate a random string using `openssl rand -hex 32`.&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;/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;These secrets and environment variables will be presented to users in the dashboard as they deploy this template, allowing them to configure each value. Additional information about creating templates and Deploy to Cloudflare buttons can be found in &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/deploy-buttons/&quot;&gt;our documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 29 Jul 2025 01:00:00 GMT</pubDate><product>Workers</product><category>Workers</category><category>Secrets Store</category></item><item><title>Audit Logs - Audit logs (version 2) - UI Beta Release</title><link>https://developers.cloudflare.com/changelog/post/2025-07-29-audit-logs-v2-ui-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-29-audit-logs-v2-ui-beta/</guid><description>&lt;p&gt;The Audit Logs v2 UI is now available to all Cloudflare customers in Beta. This release builds on the public &lt;a href=&quot;https://developers.cloudflare.com/changelog/product/audit-logs/&quot;&gt;Beta of the Audit Logs v2 API&lt;/a&gt; and introduces a redesigned user interface with powerful new capabilities to make it easier to investigate account activity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enabling the new UI&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To try the new user interface, go to &lt;strong&gt;Manage Account &gt; Audit Logs&lt;/strong&gt;. The previous version of Audit Logs remains available and can be re-enabled at any time using the &lt;strong&gt;Switch back to old Audit Logs&lt;/strong&gt; link in the banner at the top of the page.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Advanced Filtering&lt;/strong&gt;: Filter logs by actor, resource, method, and more for faster insights.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;On-hover filter controls&lt;/strong&gt;: Easily include or exclude values in queries by hovering over fields within a log entry.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Detailed Log Sidebar&lt;/strong&gt;: View rich context for each log entry without leaving the main view.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSON Log View&lt;/strong&gt;: Inspect the raw log data in a structured JSON format.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom Time Ranges&lt;/strong&gt;: Define your own time windows to view historical activity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Infinite Scroll&lt;/strong&gt;: Seamlessly browse logs without clicking through pages.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/Audit_logs_v2_filters.Bacd1IHg_f0dJz.webp&quot; alt=&quot;Audit Logs v2 new UI&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;For more details on Audit Logs v2, see the &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/account/account-security/audit-logs/&quot; target=&quot;_blank&quot;&gt;Audit Logs documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A small number of audit logs may currently be unavailable in Audit Logs v2. In some cases, certain fields such as actor information may be missing in certain audit logs. We are actively working to improve coverage and completeness for General Availability.&lt;/li&gt;
&lt;li&gt;Export to CSV is not supported in the new UI.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We are actively refining the Audit Logs v2 experience and welcome your feedback. You can share overall feedback by clicking the thumbs up or thumbs down icons at the top of the page, or provide feedback on specific audit log entries using the thumbs icons next to each audit log line or by filling out our &lt;a href=&quot;https://docs.google.com/forms/d/e/1FAIpQLSfXGkJpOG1jUPEh-flJy9B13icmcdBhveFwe-X0EzQjJQnQfQ/viewform?usp=sharing&quot; target=&quot;_blank&quot;&gt;feedback form&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 29 Jul 2025 00:00:00 GMT</pubDate><product>Audit Logs</product><category>Audit Logs</category></item><item><title>Browser Rendering - Introducing pricing for the Browser Rendering API — $0.09 per browser hour</title><link>https://developers.cloudflare.com/changelog/post/2025-07-28-br-pricing/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-28-br-pricing/</guid><description>&lt;p&gt;We’ve launched pricing for &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/&quot;&gt;Browser Rendering&lt;/a&gt;, including a free tier and a pay-as-you-go model that scales with your needs. Starting &lt;strong&gt;August 20, 2025&lt;/strong&gt;, Cloudflare will begin billing for Browser Rendering.&lt;/p&gt;
&lt;p&gt;There are two ways to use Browser Rendering. Depending on the method you use, here’s how billing will work:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/rest-api/&quot;&gt;&lt;strong&gt;REST API&lt;/strong&gt;&lt;/a&gt;: Charged for &lt;strong&gt;Duration&lt;/strong&gt; only ($/browser hour)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/workers-bindings/&quot;&gt;&lt;strong&gt;Workers Bindings&lt;/strong&gt;&lt;/a&gt;: Charged for both &lt;strong&gt;Duration&lt;/strong&gt; and &lt;strong&gt;Concurrency&lt;/strong&gt; ($/browser hour and # of concurrent browsers)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Included usage and pricing by plan&lt;/p&gt;























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Plan&lt;/th&gt;&lt;th&gt;Included duration&lt;/th&gt;&lt;th&gt;Included concurrency&lt;/th&gt;&lt;th&gt;Price (beyond included)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Workers Free&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;10 minutes per day&lt;/td&gt;&lt;td&gt;3 concurrent browsers&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Workers Paid&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;10 hours per month&lt;/td&gt;&lt;td&gt;10 concurrent browsers (averaged monthly)&lt;/td&gt;&lt;td&gt;&lt;strong&gt;1. REST API&lt;/strong&gt;: $0.09 per additional browser hour &lt;br&gt;&lt;strong&gt;2. Workers Bindings&lt;/strong&gt;: $0.09 per additional browser hour &lt;br&gt; $2.00 per additional concurrent browser&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;What you need to know:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Workers Free Plan:&lt;/strong&gt; 10 minutes of browser usage per day with 3 concurrent browsers at no charge.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Workers Paid Plan:&lt;/strong&gt; 10 hours of browser usage per month with 10 concurrent browsers (averaged monthly) at no charge. Additional usage is charged as shown above.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can monitor usage via the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers/browser-rendering&quot; target=&quot;_blank&quot;&gt;Cloudflare dashboard&lt;/a&gt;. Go to &lt;strong&gt;Compute (Workers)&lt;/strong&gt; &gt; &lt;strong&gt;Browser Rendering&lt;/strong&gt;.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/dashboard.BQnX87lT_39GAT.webp&quot; alt=&quot;Browser Rendering dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;If you&apos;ve been using Browser Rendering and do not wish to incur charges, ensure your usage stays within your plan&apos;s &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/pricing/&quot;&gt;included usage&lt;/a&gt;. To estimate costs, take a look at these &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/pricing/#examples-of-workers-paid-pricing&quot;&gt;example pricing scenarios&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 28 Jul 2025 12:00:00 GMT</pubDate><product>Browser Rendering</product><category>Browser Rendering</category></item><item><title>Gateway - Scam domain category introduced under Security Threats</title><link>https://developers.cloudflare.com/changelog/post/2025-07-28-spam-domain-category-introduced/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-28-spam-domain-category-introduced/</guid><description>&lt;p&gt;We have introduced a new Security Threat category called &lt;strong&gt;Scam&lt;/strong&gt;. Relevant domains are marked with the Scam category. Scam typically refers to fraudulent websites and schemes designed to trick victims into giving away money or personal information.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New category added&lt;/strong&gt;&lt;/p&gt;

















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Parent ID&lt;/th&gt;&lt;th&gt;Parent Name&lt;/th&gt;&lt;th&gt;Category ID&lt;/th&gt;&lt;th&gt;Category Name&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;Security Threats&lt;/td&gt;&lt;td&gt;191&lt;/td&gt;&lt;td&gt;Scam&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/domain-categories/&quot;&gt;Gateway domain categories&lt;/a&gt; to learn more.&lt;/p&gt;</description><pubDate>Mon, 28 Jul 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>WAF - WAF Release - 2025-07-28</title><link>https://developers.cloudflare.com/changelog/post/2025-07-28-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-28-waf-release/</guid><description>&lt;p&gt;This week’s update spotlights several vulnerabilities across Apache Tomcat, MongoDB, and Fortinet FortiWeb. Several flaws related with a memory leak in Apache Tomcat can lead to a denial-of-service attack. Additionally, a code injection flaw in MongoDB&apos;s Mongoose library allows attackers to bypass security controls to access restricted data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Fortinet FortiWeb (CVE-2025-25257): An improper neutralization of special elements used in a SQL command vulnerability in Fortinet FortiWeb versions allows an unauthenticated attacker to execute unauthorized SQL code or commands.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apache Tomcat (CVE-2025-31650): A improper Input Validation vulnerability in Apache Tomcat that could create memory leak when incorrect error handling for some invalid HTTP priority headers resulted in incomplete clean-up of the failed request.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;MongoDB (CVE-2024-53900, CVE:CVE-2025-23061): Improper use of &lt;code&gt;$where&lt;/code&gt; in match and a nested &lt;code&gt;$where&lt;/code&gt; filter with a &lt;code&gt;populate()&lt;/code&gt; match in Mongoose can lead to search injection.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These vulnerabilities target user-facing components, web application servers, and back-end databases. A SQL injection flaw in Fortinet FortiWeb can lead to data theft or system compromise. A separate issue in Apache Tomcat involves a memory leak from improper input validation, which could be exploited for a denial-of-service (DoS) attack. Finally, a vulnerability in MongoDB&apos;s Mongoose library allows attackers to bypass security filters and access unauthorized data through malicious search queries.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;6ab3bd3b58fb4325ac2d3cc73461ec9e &lt;/td&gt;&lt;td&gt;100804&lt;/td&gt;&lt;td&gt;BerriAI - SSRF - CVE:CVE-2024-6587&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;2e6c4d02f42a4c3ca90649d50cb13e1d &lt;/td&gt;&lt;td&gt;100812&lt;/td&gt;&lt;td&gt;Fortinet FortiWeb - Remote Code Execution - CVE:CVE-2025-25257&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;fd360d8fd9994e6bab6fb06067fae7f7 &lt;/td&gt;&lt;td&gt;100813&lt;/td&gt;&lt;td&gt;Apache Tomcat - DoS - CVE:CVE-2025-31650&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;f9e01e28c5d6499cac66364b4b6a5bb1 &lt;/td&gt;&lt;td&gt;100815&lt;/td&gt;&lt;td&gt;MongoDB - Remote Code Execution - CVE:CVE-2024-53900, CVE:CVE-2025-23061&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;700d4fcc7b1f481a80cbeee5688f8e79 &lt;/td&gt;&lt;td&gt;100816&lt;/td&gt;&lt;td&gt;MongoDB - Remote Code Execution - CVE:CVE-2024-53900, CVE:CVE-2025-23061&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 28 Jul 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.6.824.1)</title><link>https://developers.cloudflare.com/changelog/post/2025-07-24-warp-windows-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-24-warp-windows-beta/</guid><description>&lt;p&gt;A new Beta release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improvements to better manage multi-user pre-login registrations.&lt;/li&gt;
&lt;li&gt;Fixed an issue preventing devices from reaching split-tunneled traffic even when WARP was disconnected.&lt;/li&gt;
&lt;li&gt;Fix to prevent WARP from re-enabling its firewall rules after a user-initiated disconnect.&lt;/li&gt;
&lt;li&gt;Improvement to managed network detection checks for faster switching between managed networks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For Windows 11 24H2 users, Microsoft has confirmed a regression that may lead to performance issues like mouse lag, audio cracking, or other slowdowns. Cloudflare recommends users experiencing these issues upgrade to a minimum &lt;a href=&quot;https://support.microsoft.com/en-us/topic/july-8-2025-kb5062553-os-build-26100-4652-523e69cb-051b-43c6-8376-6a76d6caeefd&quot;&gt;Windows 11 24H2 version KB5062553&lt;/a&gt; or higher for resolution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with &lt;code&gt;KB5055523&lt;/code&gt; installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 24 Jul 2025 12:28:40 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.6.824.1)</title><link>https://developers.cloudflare.com/changelog/post/2025-07-24-warp-macos-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-24-warp-macos-beta/</guid><description>&lt;p&gt;A new Beta release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue preventing devices from reaching split-tunneled traffic even when WARP was disconnected.&lt;/li&gt;
&lt;li&gt;Fix to prevent WARP from re-enabling its firewall rules after a user-initiated disconnect.&lt;/li&gt;
&lt;li&gt;Improvement to managed network detection checks for faster switching between managed networks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS Sequoia: Due to changes Apple introduced in macOS 15.0.x, the WARP client may not behave as expected. Cloudflare recommends the use of macOS 15.4 or later.&lt;/li&gt;
&lt;li&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 24 Jul 2025 12:28:40 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Gateway - Gateway HTTP Filtering on all ports available in open BETA</title><link>https://developers.cloudflare.com/changelog/post/2025-07-24-http-inspection-on-all-ports/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-24-http-inspection-on-all-ports/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/&quot;&gt;Gateway&lt;/a&gt; can now apply &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/http-policies/&quot;&gt;HTTP filtering&lt;/a&gt; to all proxied HTTP requests, not just traffic on standard HTTP (&lt;code&gt;80&lt;/code&gt;) and HTTPS (&lt;code&gt;443&lt;/code&gt;) ports. This means all requests can now be filtered by &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/http-policies/antivirus-scanning/&quot;&gt;A/V scanning&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/http-policies/file-sandboxing/&quot;&gt;file sandboxing&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/#data-in-transit&quot;&gt;Data Loss Prevention (DLP)&lt;/a&gt;, and more.&lt;/p&gt;
&lt;p&gt;You can turn this &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/network-policies/protocol-detection/#inspect-on-all-ports&quot;&gt;setting&lt;/a&gt; on by going to &lt;strong&gt;Settings&lt;/strong&gt; &gt; &lt;strong&gt;Network&lt;/strong&gt; &gt; &lt;strong&gt;Firewall&lt;/strong&gt; and choosing  &lt;em&gt;Inspect on all ports&lt;/em&gt;.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/Gateway-Inspection-all-ports.CCmwX6D0_OoDoS.webp&quot; alt=&quot;HTTP Inspection on all ports setting&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To learn more, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/network-policies/protocol-detection/#inspect-on-all-ports&quot;&gt;Inspect on all ports (Beta)&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 24 Jul 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.5.943.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-07-23-warp-windows-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-23-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP proxy mode now uses the operating system&apos;s DNS settings. Changes made to system DNS settings while in proxy mode require the client to be turned off then back on to take effect.&lt;/li&gt;
&lt;li&gt;Changes to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#sccm-vpn-boundary-support&quot;&gt;SCCM VPN boundary support&lt;/a&gt; feature to no longer restart the SMS Agent Host (&lt;code&gt;ccmexec.exe&lt;/code&gt;) service.&lt;/li&gt;
&lt;li&gt;Fixed an issue affecting clients in Split Tunnel Include mode, where access to split-tunneled traffic was blocked after reconnecting the client.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For Windows 11 24H2 users, Microsoft has confirmed a regression that may lead to performance issues like mouse lag, audio cracking, or other slowdowns. Cloudflare recommends users experiencing these issues upgrade to a minimum &lt;a href=&quot;https://support.microsoft.com/en-us/topic/july-8-2025-kb5062553-os-build-26100-4652-523e69cb-051b-43c6-8376-6a76d6caeefd&quot;&gt;Windows 11 24H2 version KB5062553&lt;/a&gt; or higher for resolution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with &lt;code&gt;KB5055523&lt;/code&gt; installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 23 Jul 2025 20:41:54 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.5.943.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-07-23-warp-macos-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-23-warp-macos-ga/</guid><description>&lt;p&gt;A new GA release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP proxy mode now uses the operating system&apos;s DNS settings. Changes made to system DNS settings while in proxy mode require the client to be turned off then back on to take effect.&lt;/li&gt;
&lt;li&gt;Fixed an issue affecting clients in Split Tunnel Include mode, where access to split-tunneled traffic was blocked after reconnecting the client.&lt;/li&gt;
&lt;li&gt;For macOS deployments, the WARP client can now be managed using an &lt;code&gt;mdm.xml&lt;/code&gt; file placed in &lt;code&gt;/Library/Application Support/Cloudflare/mdm.xml&lt;/code&gt;. This new configuration option offers an alternative to the still supported method of deploying a managed plist through an MDM solution.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS Sequoia: Due to changes Apple introduced in macOS 15.0.x, the WARP client may not behave as expected. Cloudflare recommends the use of macOS 15.4 or later.&lt;/li&gt;
&lt;li&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 23 Jul 2025 20:41:33 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for Linux (version 2025.5.943.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-07-23-warp-linux-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-23-warp-linux-ga/</guid><description>&lt;p&gt;A new GA release for the Linux WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains minor fixes and improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP proxy mode now uses the operating system&apos;s DNS settings. Changes made to system DNS settings while in proxy mode require the client to be turned off then back on to take effect.&lt;/li&gt;
&lt;li&gt;Fixed an issue affecting clients in Split Tunnel Include mode, where access to split-tunneled traffic was blocked after reconnecting the client.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 23 Jul 2025 19:17:49 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Browser Rendering - Browser Rendering now supports local development</title><link>https://developers.cloudflare.com/changelog/post/2025-07-22-br-local-dev/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-22-br-local-dev/</guid><description>&lt;p&gt;You can now run your Browser Rendering locally using &lt;code&gt;npx wrangler dev&lt;/code&gt;, which spins up a browser directly on your machine before deploying to Cloudflare&apos;s global network. By running tests locally, you can quickly develop, debug, and test changes without needing to deploy or worry about usage costs.&lt;/p&gt;
&lt;p&gt;Get started with this &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/workers-bindings/screenshots/&quot;&gt;example guide&lt;/a&gt; that shows how to use Cloudflare&apos;s &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/puppeteer/&quot;&gt;fork of Puppeteer&lt;/a&gt; (you can also use &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/playwright/&quot;&gt;Playwright&lt;/a&gt;) to take screenshots of webpages and store the results in &lt;a href=&quot;https://developers.cloudflare.com/kv/&quot;&gt;Workers KV&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 22 Jul 2025 11:00:00 GMT</pubDate><product>Browser Rendering</product><category>Browser Rendering</category></item><item><title>Workers - Test out code changes before shipping with per-branch preview deployments for Cloudflare Workers</title><link>https://developers.cloudflare.com/changelog/post/2025-07-23-workers-preview-urls/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-23-workers-preview-urls/</guid><description>&lt;p&gt;Now, when you connect your Cloudflare Worker to a git repository on GitHub or GitLab, each branch of your repository has its own stable preview URL, that you can use to preview code changes before merging the pull request and deploying to production.&lt;/p&gt;
&lt;p&gt;This works the same way that Cloudflare Pages does — every time you create a pull request, you&apos;ll automatically get a shareable preview link where you can see your changes running, without affecting production. The link stays the same, even as you add commits to the same branch.
These preview URLs are named after your branch and are posted as a comment to each pull request. The URL stays the same with every commit and always points to the latest version of that branch.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/preview-urls-comment.0wQffFIq_2uQPCz.webp&quot; alt=&quot;PR comment preview&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;Preview URL types&lt;/h4&gt;
&lt;p&gt;Each comment includes &lt;strong&gt;two preview URLs&lt;/strong&gt; as shown above:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Commit Preview URL&lt;/strong&gt;: Unique to the specific version/commit (e.g., &lt;code&gt;&amp;#x3C;version-prefix&gt;-&amp;#x3C;worker-name&gt;.&amp;#x3C;subdomain&gt;.workers.dev&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Branch Preview URL&lt;/strong&gt;: A stable alias based on the branch name (e.g., &lt;code&gt;&amp;#x3C;branch-name&gt;-&amp;#x3C;worker-name&gt;.&amp;#x3C;subdomain&gt;.workers.dev&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;How it works&lt;/h4&gt;
&lt;p&gt;When you create a pull request:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A preview alias is automatically created&lt;/strong&gt; based on the Git branch name (e.g., &lt;code&gt;&amp;#x3C;branch-name&gt;&lt;/code&gt; becomes &lt;code&gt;&amp;#x3C;branch-name&gt;-&amp;#x3C;worker-name&gt;.&amp;#x3C;subdomain&gt;.workers.dev&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No configuration is needed&lt;/strong&gt;, the alias is generated for you&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The link stays the same&lt;/strong&gt; even as you add commits to the same branch&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preview URLs are posted directly to your pull request as comments&lt;/strong&gt; (just like they are in Cloudflare Pages)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Custom alias name&lt;/h4&gt;
&lt;p&gt;You can also assign a custom preview alias using the &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/&quot;&gt;Wrangler CLI&lt;/a&gt;, by passing the &lt;code&gt;--preview-alias&lt;/code&gt; flag when &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/general/#versions-upload&quot;&gt;uploading a version&lt;/a&gt; of your Worker:&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;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;versions&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;upload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--preview-alias&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;staging&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;h4&gt;Limitations while in beta&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Only available on the &lt;strong&gt;workers.dev&lt;/strong&gt; subdomain (custom domains not yet supported)&lt;/li&gt;
&lt;li&gt;Requires &lt;strong&gt;Wrangler v4.21.0+&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Preview URLs are not generated for Workers that use &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/&quot;&gt;Durable Objects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Not yet supported for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/&quot;&gt;Workers for Platforms&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 22 Jul 2025 01:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Gateway - Google Bard Application replaced by Gemini</title><link>https://developers.cloudflare.com/changelog/post/2025-08-15-gemini-application-replaces-bard/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-08-15-gemini-application-replaces-bard/</guid><description>&lt;p&gt;The &lt;strong&gt;Google Bard&lt;/strong&gt; application (ID: 1198) has been deprecated and fully removed from the system. It has been replaced by the &lt;strong&gt;Gemini&lt;/strong&gt; application (ID: 1340).
Any existing Gateway policies that reference the old Google Bard application will no longer function.
To ensure your policies continue to work as intended, you should update them to use the new Gemini application.
We recommend replacing all instances of the deprecated Bard application with the new Gemini application in your Gateway policies.
For more information about application policies, please see the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/application-app-types/&quot;&gt;Cloudflare Gateway documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 22 Jul 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>Stream - Audio mode for Media Transformations</title><link>https://developers.cloudflare.com/changelog/post/2025-07-22-media-transformations-audio-mode/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-22-media-transformations-audio-mode/</guid><description>&lt;p&gt;We now support &lt;code&gt;audio&lt;/code&gt; mode! Use this feature to extract audio from a source video, outputting
an M4A file to use in downstream workflows like &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/&quot;&gt;AI inference&lt;/a&gt;, content moderation, or transcription.&lt;/p&gt;
&lt;p&gt;For example,&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;https://example.com/cdn-cgi/media/&amp;#x3C;OPTIONS&gt;/&amp;#x3C;SOURCE-VIDEO&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;https://example.com/cdn-cgi/media/mode=audio,time=3s,duration=60s/&amp;#x3C;input video with diction&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, learn about &lt;a href=&quot;https://developers.cloudflare.com/stream/transform-videos/&quot;&gt;Transforming Videos&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 22 Jul 2025 00:00:00 GMT</pubDate><product>Stream</product><category>Stream</category></item><item><title>Cloudflare One, Cloudflare WAN - Virtual Cloudflare One Appliance with KVM support (open beta)</title><link>https://developers.cloudflare.com/changelog/post/2025-07-21-virtual-appliance-kvm-proxmox/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-21-virtual-appliance-kvm-proxmox/</guid><description>&lt;p&gt;The KVM-based virtual Cloudflare One Appliance is now in open beta with official support for Proxmox VE.&lt;/p&gt;
&lt;p&gt;Customers can deploy the virtual appliance on KVM hypervisors to connect branch or data center networks to Cloudflare WAN without dedicated hardware.&lt;/p&gt;
&lt;p&gt;For setup instructions, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/configuration/appliance/configure-virtual-appliance/&quot;&gt;Configure a virtual Cloudflare One Appliance&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 21 Jul 2025 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category><category>Cloudflare WAN</category></item><item><title>Email Routing - Subaddressing support in Email Routing</title><link>https://developers.cloudflare.com/changelog/post/2025-07-21-subaddressing/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-21-subaddressing/</guid><description>&lt;p&gt;Subaddressing, as defined in &lt;a href=&quot;https://www.rfc-editor.org/rfc/rfc5233&quot; target=&quot;_blank&quot;&gt;RFC 5233&lt;/a&gt;, also known as plus addressing, is now supported in Email Routing. This enables using the &quot;+&quot; separator to augment your custom addresses with arbitrary detail information.&lt;/p&gt;
&lt;p&gt;Now you can send an email to &lt;code&gt;user+detail@example.com&lt;/code&gt; and it will be captured by the &lt;code&gt;user@example.com&lt;/code&gt; custom address. The &lt;code&gt;+detail&lt;/code&gt; part is ignored by Email Routing, but it can be captured next in the processing chain in the logs, an &lt;a href=&quot;https://developers.cloudflare.com/email-routing/email-workers/&quot;&gt;Email Worker&lt;/a&gt; or an &lt;a href=&quot;https://github.com/cloudflare/agents/tree/main/examples/email-agent&quot; target=&quot;_blank&quot;&gt;Agent application&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Customers can use this feature to dynamically add context to their emails, such as tracking the source of an email or categorizing emails without needing to create multiple custom addresses.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/subaddressing.x65bljxx_Z2W6LN.webp&quot; alt=&quot;Subaddressing&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Check our &lt;a href=&quot;https://developers.cloudflare.com/email-routing/setup/email-routing-addresses/#subaddressing&quot;&gt;Developer Docs&lt;/a&gt; to learn on to enable subaddressing in Email Routing.&lt;/p&gt;</description><pubDate>Mon, 21 Jul 2025 00:00:00 GMT</pubDate><product>Email Routing</product><category>Email Routing</category></item><item><title>WAF - WAF Release - 2025-07-21 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-07-21-emergency/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-21-emergency/</guid><description>&lt;p&gt;This week&apos;s update highlights several high-impact vulnerabilities affecting Microsoft SharePoint Server. These flaws, involving unsafe deserialization, allow unauthenticated remote code execution over the network, posing a critical threat to enterprise environments relying on SharePoint for collaboration and document management.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft SharePoint Server (CVE-2025-53770): A critical vulnerability involving unsafe deserialization of untrusted data, enabling unauthenticated remote code execution over the network. This flaw allows attackers to execute arbitrary code on vulnerable SharePoint servers without user interaction.&lt;/li&gt;
&lt;li&gt;Microsoft SharePoint Server (CVE-2025-53771): A closely related deserialization issue that can be exploited by unauthenticated attackers, potentially leading to full system compromise. The vulnerability highlights continued risks around insecure serialization logic in enterprise collaboration platforms.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Together, these vulnerabilities significantly weaken the security posture of on-premise Microsoft SharePoint Server deployments. By enabling remote code execution without authentication, they open the door for attackers to gain persistent access, deploy malware, and move laterally across enterprise environments.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;34dac2b38b904163bc587cc32168f6f0 &lt;/td&gt;&lt;td&gt;100817&lt;/td&gt;&lt;td&gt;Microsoft SharePoint - Deserialization - CVE:CVE-2025-53770&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;d21f327516a145bc9d1b05678de656c4 &lt;/td&gt;&lt;td&gt;100818&lt;/td&gt;&lt;td&gt;Microsoft SharePoint - Deserialization - CVE:CVE-2025-53771&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;For more details, also refer to &lt;a href=&quot;https://blog.cloudflare.com/cloudflare-protects-against-critical-sharepoint-vulnerability-cve-2025-53770/&quot; target=&quot;_blank&quot;&gt;our blog&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 21 Jul 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>WAF - WAF Release - 2025-07-21</title><link>https://developers.cloudflare.com/changelog/post/2025-07-21-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-21-waf-release/</guid><description>&lt;p&gt;This week&apos;s update spotlights several critical vulnerabilities across Citrix NetScaler Memory Disclosure, FTP servers and network application. Several flaws enable unauthenticated remote code execution or sensitive data exposure, posing a significant risk to enterprise security.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Wing FTP Server (CVE-2025-47812): A critical Remote Code Execution (RCE) vulnerability that enables unauthenticated attackers to execute arbitrary code with root/SYSTEM-level privileges by exploiting a Lua injection flaw.&lt;/li&gt;
&lt;li&gt;Infoblox NetMRI (CVE-2025-32813): A remote unauthenticated command injection flaw that allows an attacker to execute arbitrary commands, potentially leading to unauthorized access.&lt;/li&gt;
&lt;li&gt;Citrix Netscaler ADC (CVE-2025-5777, CVE-2023-4966): A sensitive information disclosure vulnerability, also known as &quot;Citrix Bleed2&quot;, that allows the disclosure of memory and subsequent remote access session hijacking.&lt;/li&gt;
&lt;li&gt;Akamai CloudTest (CVE-2025-49493): An XML External Entity (XXE) injection that could lead to read local files on the system by manipulating XML input.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These vulnerabilities affect critical enterprise infrastructure, from file transfer services and network management appliances to application delivery controllers. The Wing FTP RCE and Infoblox command injection flaws offer direct paths to deep system compromise, while the Citrix &quot;Bleed2&quot; and Akamai XXE vulnerabilities undermine system integrity by enabling session hijacking and sensitive data theft.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;6ab3bd3b58fb4325ac2d3cc73461ec9e &lt;/td&gt;&lt;td&gt;100804&lt;/td&gt;&lt;td&gt;BerriAI - SSRF - CVE:CVE-2024-6587&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;0e17d8761f1a47d5a744a75b5199b58a &lt;/td&gt;&lt;td&gt;100805&lt;/td&gt;&lt;td&gt;Wing FTP Server - Remote Code Execution - CVE:CVE-2025-47812&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;81ace5a851214a2f9c58a1e7919a91a4 &lt;/td&gt;&lt;td&gt;100807&lt;/td&gt;&lt;td&gt;Infoblox NetMRI - Command Injection - CVE:CVE-2025-32813&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;cd8fa74e8f6f476c9380ae217899130f &lt;/td&gt;&lt;td&gt;100808&lt;/td&gt;&lt;td&gt;Citrix Netscaler ADC - Buffer Error - CVE:CVE-2025-5777&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;e012c7bece304a1daf80935ed1cf8e08 &lt;/td&gt;&lt;td&gt;100809&lt;/td&gt;&lt;td&gt;Citrix Netscaler ADC - Information Disclosure - CVE:CVE-2023-4966&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5d348a573a834ffd968faffc6e70469f &lt;/td&gt;&lt;td&gt;100810&lt;/td&gt;&lt;td&gt;Akamai CloudTest - XXE - CVE:CVE-2025-49493&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 21 Jul 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Security Center - New APIs for Brand Protection setup</title><link>https://developers.cloudflare.com/changelog/post/2025-07-18-brand-protection-api/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-18-brand-protection-api/</guid><description>&lt;p&gt;The Brand Protection API is now available, allowing users to create new queries and delete existing ones, fetch matches and more!&lt;/p&gt;
&lt;p&gt;What you can do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;create new string or logo query&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;delete string or logo queries&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;download matches for both logo and string queries&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;read matches for both logo and string queries&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ready to start? Check out the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/brand_protection/&quot;&gt;Brand Protection API&lt;/a&gt; in our documentation.&lt;/p&gt;</description><pubDate>Fri, 18 Jul 2025 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>Workers - The Cloudflare Vite plugin now supports Vite 7</title><link>https://developers.cloudflare.com/changelog/post/2025-07-17-vite-plugin-vite-7-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-17-vite-plugin-vite-7-support/</guid><description>&lt;p&gt;&lt;a href=&quot;https://vite.dev/blog/announcing-vite7&quot; target=&quot;_blank&quot;&gt;Vite 7&lt;/a&gt; is now supported in the Cloudflare Vite plugin.
See the &lt;a href=&quot;https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md#700-2025-06-24&quot; target=&quot;_blank&quot;&gt;Vite changelog&lt;/a&gt; for a list of changes.&lt;/p&gt;
&lt;p&gt;Note that the minimum Node.js versions supported by Vite 7 are 20.19 and 22.12.
We continue to support Vite 6 so you do not need to immediately upgrade.&lt;/p&gt;</description><pubDate>Thu, 17 Jul 2025 01:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Data Loss Prevention - New detection entry type: Document Matching for DLP</title><link>https://developers.cloudflare.com/changelog/post/2025-07-17-document-matching/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-17-document-matching/</guid><description>&lt;p&gt;You can now create &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/detection-entries/#documents&quot;&gt;document-based&lt;/a&gt; detection entries in DLP by uploading example documents. Cloudflare will encrypt your documents and create a unique fingerprint of the file. This fingerprint is then used to identify similar documents or snippets within your organization&apos;s traffic and stored files.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/document-match.CcN8pGgR_Z1e3PDm.webp&quot; alt=&quot;DLP&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;strong&gt;Key features and benefits:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Upload documents, forms, or templates:&lt;/strong&gt; Easily upload .docx and .txt files (up to 10 MB) that contain sensitive information you want to protect.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Granular control with similarity percentage:&lt;/strong&gt; Define a minimum similarity percentage (0-100%) that a document must meet to trigger a detection, reducing false positives.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Comprehensive coverage:&lt;/strong&gt; Apply these document-based detection entries in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Gateway policies:&lt;/strong&gt; To inspect network traffic for sensitive documents as they are uploaded or shared.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;CASB (Cloud Access Security Broker):&lt;/strong&gt; To scan files stored in cloud applications for sensitive documents at rest.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Identify sensitive data:&lt;/strong&gt; This new detection entry type is ideal for identifying sensitive data within completed forms, templates, or even small snippets of a larger document, helping you prevent data exfiltration and ensure compliance.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once uploaded and processed, you can add this new document entry into a DLP profile and policies to enhance your data protection strategy.&lt;/p&gt;</description><pubDate>Thu, 17 Jul 2025 00:00:00 GMT</pubDate><product>Data Loss Prevention</product><category>Data Loss Prevention</category></item><item><title>Cloudflare Tunnel, Cloudflare Tunnel for SASE - Faster, more reliable UDP traffic for Cloudflare Tunnel</title><link>https://developers.cloudflare.com/changelog/post/2025-07-15-udp-improvements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-15-udp-improvements/</guid><description>&lt;p&gt;Your real-time applications running over &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/&quot;&gt;Cloudflare Tunnel&lt;/a&gt; are now faster and more reliable. We&apos;ve completely re-architected the way &lt;code&gt;cloudflared&lt;/code&gt; proxies UDP traffic in order to isolate it from other traffic, ensuring latency-sensitive applications like private DNS are no longer slowed down by heavy TCP traffic (like file transfers) on the same Tunnel.&lt;/p&gt;
&lt;p&gt;This is a foundational improvement to Cloudflare Tunnel, delivered automatically to all customers. There are no settings to configure — your UDP traffic is already flowing faster and more reliably.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What’s new:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Faster UDP performance&lt;/strong&gt;: We&apos;ve significantly reduced the latency for establishing new UDP sessions, making applications like private DNS much more responsive.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Greater reliability for mixed traffic&lt;/strong&gt;: UDP packets are no longer affected by heavy TCP traffic, preventing timeouts and connection drops for your real-time services.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learn more about running &lt;a href=&quot;https://developers.cloudflare.com/reference-architecture/architectures/sase/#connecting-applications&quot;&gt;TCP or UDP applications&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/&quot;&gt;private networks&lt;/a&gt; through &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/&quot;&gt;Cloudflare Tunnel&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 15 Jul 2025 00:00:00 GMT</pubDate><product>Cloudflare Tunnel</product><category>Cloudflare Tunnel</category><category>Cloudflare Tunnel for SASE</category></item><item><title>Cloudflare Fundamentals, Terraform - Terraform v5.7.0 now available</title><link>https://developers.cloudflare.com/changelog/post/2025-07-11-terraform-v570-provider/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-11-terraform-v570-provider/</guid><description>&lt;p&gt;Earlier this year, we announced the launch of the new &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-02-03-terraform-v5-provider/&quot;&gt;Terraform v5 Provider&lt;/a&gt;. We are aware of the high mumber of &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;issues&lt;/a&gt; reported by the Cloudflare community related to the v5 release, with 13.5% of resources impacted. We have committed to releasing improvements on a 2 week cadeance to ensure it&apos;s stability and relability, including the v5.7 release.&lt;/p&gt;
&lt;p&gt;Thank you for continuing to raise issues and please keep an eye on this changelog for more information about upcoming releases.&lt;/p&gt;
&lt;h4&gt;Changes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Addressed permanent diff bug on Cloudflare Tunnel config&lt;/li&gt;
&lt;li&gt;State is now saved correctly for Zero Trust Access applications&lt;/li&gt;
&lt;li&gt;Exact match is now working as expected within &lt;code&gt;data.cloudflare_zero_trust_access_applications&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zero_trust_access_policy&lt;/code&gt; now supports OIDC claims &amp;#x26; diff issues resolved&lt;/li&gt;
&lt;li&gt;Self hosted applications with private IPs no longer require a public domain for &lt;code&gt;cloudflare_zero_trust_access_application&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;New resource:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zero_trust_tunnel_warp_connector&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Other bug fixes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a more detailed look at all of the changes, see the
&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/releases/tag/v5.7.0&quot; target=&quot;_blank&quot;&gt;changelog&lt;/a&gt; in GitHub.&lt;/p&gt;
&lt;h4&gt;Issues Closed&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5563&quot; target=&quot;_blank&quot;&gt;#5563: cloudflare_logpull_retention is missing import&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5608&quot; target=&quot;_blank&quot;&gt;#5608: cloudflare_zero_trust_access_policy in 5.5.0 provider gives error upon apply unexpected new value: .app_count: was cty.NumberIntVal(0), but now cty.NumberIntVal(1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5612&quot; target=&quot;_blank&quot;&gt;#5612: data.cloudflare_zero_trust_access_applications does not exact match&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5532&quot; target=&quot;_blank&quot;&gt;#5532: cloudflare_zero_trust_access_identity_provider detects changes on every plan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5662&quot; target=&quot;_blank&quot;&gt;#5662: cloudflare_zero_trust_access_policy does not support OIDC claims&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5565&quot; target=&quot;_blank&quot;&gt;#5565: Running Terraform with the cloudflare_zero_trust_access_policy resource results in updates on every apply, even when no changes are made - breaks idempotency&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5529&quot; target=&quot;_blank&quot;&gt;#5529: cloudflare_zero_trust_access_application: self hosted applications with private ips require public domain &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you have an unaddressed issue with the provider, we encourage you to check the &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues&quot; target=&quot;_blank&quot;&gt;open issues&lt;/a&gt; and open a new one if one does not already exist for what you are experiencing.&lt;/p&gt;
&lt;h4&gt;Upgrading&lt;/h4&gt;
&lt;p&gt;We suggest holding on migration to v5 while we work on stablization of the v5 provider. This will ensure Cloudflare can work ahead and avoid any blocking issues.&lt;/p&gt;
&lt;p&gt;If you&apos;d like more information on migrating from v4 to v5, please make use of the
&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/guides/version-5-upgrade&quot; target=&quot;_blank&quot;&gt;migration guide&lt;/a&gt;. We have
provided automated migration scripts using Grit which simplify the transition, although these do not support implementations which
use Terraform modules, so customers making use of modules need to migrate manually. Please make use of &lt;code&gt;terraform plan&lt;/code&gt; to test
your changes before applying, and let us know if you encounter any additional issues by reporting to our
&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;For more info&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;Terraform provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/terraform/&quot;&gt;Documentation on using Terraform with Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 14 Jul 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Terraform</category></item><item><title>WAF - WAF Release - 2025-07-14</title><link>https://developers.cloudflare.com/changelog/post/2025-07-14-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-14-waf-release/</guid><description>&lt;p&gt;This week’s vulnerability analysis highlights emerging web application threats that exploit modern JavaScript behavior and SQL parsing ambiguities. Attackers continue to refine techniques such as attribute overloading and obfuscated logic manipulation to evade detection and compromise front-end and back-end systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;XSS – Attribute Overloading: A novel cross-site scripting technique where attackers abuse custom or non-standard HTML attributes to smuggle payloads into the DOM. These payloads evade traditional sanitization logic, especially in frameworks that loosely validate attributes or trust unknown tokens.&lt;/li&gt;
&lt;li&gt;XSS – onToggle Event Abuse: Exploits the lesser-used onToggle event (triggered by elements like &lt;code&gt;&amp;#x3C;details&gt;&lt;/code&gt;) to execute arbitrary JavaScript when users interact with UI elements. This vector is often overlooked by static analyzers and can be embedded in seemingly benign components.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These vulnerabilities target both user-facing components and back-end databases, introducing potential vectors for credential theft, session hijacking, or full data exfiltration. The XSS variants bypass conventional filters through overlooked HTML behaviors, while the obfuscated SQLi enables attackers to stealthily probe back-end logic, making them especially difficult to detect and block.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;a8918353372b4191b10684eb2aa3d845 &lt;/td&gt;&lt;td&gt;100798&lt;/td&gt;&lt;td&gt;XSS - Attribute Overloading&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;31dd299ba375414dac9260c037548d06 &lt;/td&gt;&lt;td&gt;100799&lt;/td&gt;&lt;td&gt;XSS - OnToggle&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 14 Jul 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Cloudflare One - New onboarding guides for Zero Trust</title><link>https://developers.cloudflare.com/changelog/post/2025-07-09-onboarding-resources/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-09-onboarding-resources/</guid><description>&lt;p&gt;Use our brand new onboarding experience for Cloudflare Zero Trust. New and returning users can now engage with a &lt;strong&gt;Get Started&lt;/strong&gt; tab with walkthroughs for setting up common use cases end-to-end.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/zt-onboarding-guides._18EfPbe_NEBk9.webp&quot; alt=&quot;Zero Trust onboarding guides&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;There are eight brand new onboarding guides in total:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Securely access a private network (sets up device client and Tunnel)&lt;/li&gt;
&lt;li&gt;Device-to-device / mesh networking (sets up and connects multiple device clients)&lt;/li&gt;
&lt;li&gt;Network to network connectivity (sets up and connects multiple WARP Connectors, makes reference to Magic WAN availability for Enterprise)&lt;/li&gt;
&lt;li&gt;Secure web traffic (sets up device client, Gateway, pre-reqs, and initial policies)&lt;/li&gt;
&lt;li&gt;Secure DNS for networks (sets up a new DNS location and Gateway policies)&lt;/li&gt;
&lt;li&gt;Clientless web access (sets up Access to a web app, Tunnel, and public hostname)&lt;/li&gt;
&lt;li&gt;Clientless SSH access (all the same + the web SSH experience)&lt;/li&gt;
&lt;li&gt;Clientless RDP access (all the same + RDP-in-browser)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each flow walks the user through the steps to configure the essential elements, and provides a “more details” panel with additional contextual information about what the user will accomplish at the end, along with why the steps they take are important.&lt;/p&gt;
&lt;p&gt;Try them out now in the &lt;a href=&quot;https://one.dash.cloudflare.com/?to=/:account/home&quot; target=&quot;_blank&quot;&gt;Zero Trust dashboard&lt;/a&gt;!&lt;/p&gt;</description><pubDate>Thu, 10 Jul 2025 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category></item><item><title>Log Explorer - Usage tracking</title><link>https://developers.cloudflare.com/changelog/post/2025-07-09-usage-tracking/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-09-usage-tracking/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/log-explorer/&quot;&gt;Log Explorer&lt;/a&gt; customers can now monitor their data ingestion volume to keep track of their billing. Monthly usage is displayed at the top of the &lt;a href=&quot;https://developers.cloudflare.com/log-explorer/log-search/&quot;&gt;Log Search&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/log-explorer/manage-datasets/&quot;&gt;Manage Datasets&lt;/a&gt; screens in Log Explorer.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ingested-data.D2flqRIu_Z2v4FHF.webp&quot; alt=&quot;Ingested data&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Wed, 09 Jul 2025 00:00:00 GMT</pubDate><product>Log Explorer</product><category>Log Explorer</category></item><item><title>AI Search - Faster indexing and new Jobs view in AutoRAG</title><link>https://developers.cloudflare.com/changelog/post/2025-07-08-autorag-jobs-view/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-08-autorag-jobs-view/</guid><description>&lt;p&gt;You can now expect &lt;strong&gt;3-5× faster indexing&lt;/strong&gt; in AutoRAG, and with it, a brand new &lt;strong&gt;Jobs view&lt;/strong&gt; to help you monitor indexing progress.&lt;/p&gt;
&lt;p&gt;With each AutoRAG, indexing jobs are automatically triggered to sync your data source (i.e. R2 bucket) with your Vectorize index, ensuring new or updated files are reflected in your query results. You can also trigger jobs manually via the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/ai-search/subresources/rags/&quot;&gt;Sync API&lt;/a&gt; or by clicking “Sync index” in the dashboard.&lt;/p&gt;
&lt;p&gt;With the new jobs observability, you can now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;View the status, job ID, source, start time, duration and last sync time for each indexing job&lt;/li&gt;
&lt;li&gt;Inspect real-time logs of job events (e.g. &lt;code&gt;Starting indexing data source...&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;See a history of past indexing jobs under the Jobs tab of your AutoRAG&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This makes it easier to understand what’s happening behind the scenes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Coming soon:&lt;/strong&gt; We’re adding APIs to programmatically check indexing status, making it even easier to integrate AutoRAG into your workflows.&lt;/p&gt;
&lt;p&gt;Try it out today on the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/ai/autorag&quot; target=&quot;_blank&quot;&gt;Cloudflare dashboard&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 08 Jul 2025 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>Cloudflare Images - HEIC support in Cloudflare Images</title><link>https://developers.cloudflare.com/changelog/post/heic-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/heic-support/</guid><description>&lt;p&gt;You can use Images to ingest HEIC images and serve them in supported output formats like AVIF, WebP, JPEG, and PNG.&lt;/p&gt;
&lt;p&gt;When inputting a HEIC image, dimension and sizing limits may still apply. Refer to our documentation to see limits for &lt;a href=&quot;https://developers.cloudflare.com/images/upload-images/&quot;&gt;uploading to Images&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/images/transform-images/&quot;&gt;transforming a remote image&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 08 Jul 2025 00:00:00 GMT</pubDate><product>Cloudflare Images</product><category>Cloudflare Images</category></item><item><title>Cloudflare One - Cloudy summaries for Access and Gateway Logs</title><link>https://developers.cloudflare.com/changelog/post/2025-07-07-cloudy-summaries-access-gateway/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-07-cloudy-summaries-access-gateway/</guid><description>&lt;p&gt;Cloudy, Cloudflare&apos;s AI Agent, will now automatically summarize your &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/logs/dashboard-logs/access-authentication-logs/&quot;&gt;Access&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/logs/dashboard-logs/gateway-logs/&quot;&gt;Gateway&lt;/a&gt; block logs.&lt;/p&gt;
&lt;p&gt;In the log itself, Cloudy will summarize what occurred and why. This will be helpful for quick troubleshooting and issue correlation.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/cloudy-explanation.oFZR6cXa_Z2e1RtR.webp&quot; alt=&quot;Cloudy AI summarizes a log&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;If you have feedback about the Cloudy summary - good or bad - you can provide that right from the summary itself.&lt;/p&gt;</description><pubDate>Mon, 07 Jul 2025 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category></item><item><title>Cloudflare One - New App Library for Zero Trust Dashboard</title><link>https://developers.cloudflare.com/changelog/post/2025-07-07-dashboard-app-library/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-07-dashboard-app-library/</guid><description>&lt;p&gt;Cloudflare Zero Trust customers can use the App Library to get full visibility over the SaaS applications that they use in their Gateway policies, CASB integrations, and Access for SaaS applications.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;App Library&lt;/strong&gt;, found under &lt;strong&gt;My Team&lt;/strong&gt;, makes information available about all Applications that can be used across the Zero Trust product suite.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/app-library.D403GJ9j_1SfMgP.webp&quot; alt=&quot;Zero Trust App Library&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;You can use the App Library to see:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How Applications are defined&lt;/li&gt;
&lt;li&gt;Where they are referenced in policies&lt;/li&gt;
&lt;li&gt;Whether they have Access for SaaS configured&lt;/li&gt;
&lt;li&gt;Review their CASB findings and integration status.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Within individual Applications, you can also track their usage across your organization, and better understand user behavior.&lt;/p&gt;</description><pubDate>Mon, 07 Jul 2025 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category></item><item><title>WAF - Increased IP List Limits for Enterprise Accounts</title><link>https://developers.cloudflare.com/changelog/post/2025-07-07-increased-ip-list-limits/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-07-increased-ip-list-limits/</guid><description>&lt;p&gt;We have significantly increased the limits for &lt;a href=&quot;https://developers.cloudflare.com/waf/tools/lists/&quot;&gt;IP Lists&lt;/a&gt; on Enterprise plans to provide greater flexibility and control:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Total number of lists&lt;/strong&gt;: Increased from 10 to 1,000.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Total number of list items&lt;/strong&gt;: Increased from 10,000 to 500,000.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Limits for other list types and plans remain unchanged. For more details, refer to the &lt;a href=&quot;https://developers.cloudflare.com/waf/tools/lists/#availability&quot;&gt;lists availability&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 07 Jul 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>WAF - WAF Release - 2025-07-07</title><link>https://developers.cloudflare.com/changelog/post/2025-07-07-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-07-waf-release/</guid><description>&lt;p&gt;This week’s roundup uncovers critical vulnerabilities affecting enterprise VoIP systems, webmail platforms, and a popular JavaScript framework. The risks range from authentication bypass to remote code execution (RCE) and buffer handling flaws, each offering attackers a path to elevate access or fully compromise systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Next.js - Auth Bypass: A newly detected authentication bypass flaw in the Next.js framework allows attackers to access protected routes or APIs without proper authorization, undermining application access controls.&lt;/li&gt;
&lt;li&gt;Fortinet FortiVoice (CVE-2025-32756): A buffer error vulnerability in FortiVoice systems that could lead to memory corruption and potential code execution or service disruption in enterprise telephony environments.&lt;/li&gt;
&lt;li&gt;Roundcube (CVE-2025-49113): A critical RCE flaw allowing unauthenticated attackers to execute arbitrary PHP code via crafted requests, leading to full compromise of mail servers and user inboxes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These vulnerabilities affect core business infrastructure, from web interfaces to voice communications and email platforms. The Roundcube RCE and FortiVoice buffer flaw offer potential for deep system access, while the Next.js auth bypass undermines trust boundaries in modern web apps.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;b6558cac8c874bd6878734057eb35ee6 &lt;/td&gt;&lt;td&gt;100795&lt;/td&gt;&lt;td&gt;Next.js - Auth Bypass&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;58fcf6d9c05d4b7a8f41e0a3c329aeb0 &lt;/td&gt;&lt;td&gt;100796&lt;/td&gt;&lt;td&gt;Fortinet FortiVoice - Buffer Error - CVE:CVE-2025-32756&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;34ed0624bc864ea88bbea55bab314023 &lt;/td&gt;&lt;td&gt;100797&lt;/td&gt;&lt;td&gt;Roundcube - Remote Code Execution - CVE:CVE-2025-49113&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 07 Jul 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Workers now supports JavaScript debug terminals in VSCode, Cursor and Windsurf IDEs</title><link>https://developers.cloudflare.com/changelog/post/2025-07-04-javascript-debug-terminals/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-04-javascript-debug-terminals/</guid><description>&lt;p&gt;Workers now support breakpoint debugging using VSCode&apos;s built-in &lt;a href=&quot;https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_javascript-debug-terminal&quot; target=&quot;_blank&quot;&gt;JavaScript Debug Terminals&lt;/a&gt;. All you have to do is open a JS debug terminal (&lt;code&gt;Cmd + Shift + P&lt;/code&gt; and then type &lt;code&gt;javascript debug&lt;/code&gt;) and run &lt;code&gt;wrangler dev&lt;/code&gt; (or &lt;code&gt;vite dev&lt;/code&gt;) from within the debug terminal. VSCode will automatically connect to your running Worker (even if you&apos;re running multiple Workers at once!) and start a debugging session.&lt;/p&gt;
&lt;p&gt;In 2023 we announced &lt;a href=&quot;https://blog.cloudflare.com/debugging-cloudflare-workers/&quot; target=&quot;_blank&quot;&gt;breakpoint debugging support&lt;/a&gt; for Workers, which meant that you could easily debug your Worker code in Wrangler&apos;s built-in devtools (accessible via the &lt;code&gt;[d]&lt;/code&gt; hotkey) as well as multiple other devtools clients, &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/dev-tools/breakpoints/&quot; target=&quot;_blank&quot;&gt;including VSCode&lt;/a&gt;. For most developers, breakpoint debugging via VSCode is the most natural flow, but until now it&apos;s required &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/dev-tools/breakpoints/#setup-vs-code-to-use-breakpoints&quot; target=&quot;_blank&quot;&gt;manually configuring a &lt;code&gt;launch.json&lt;/code&gt; file&lt;/a&gt;, running &lt;code&gt;wrangler dev&lt;/code&gt;, and connecting via VSCode&apos;s built-in debugger. Now it&apos;s much more seamless!&lt;/p&gt;</description><pubDate>Fri, 04 Jul 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Hyperdrive - Hyperdrive now supports configuring the amount of database connections</title><link>https://developers.cloudflare.com/changelog/post/2025-07-02-hyperdrive-configurable-connection-count/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-02-hyperdrive-configurable-connection-count/</guid><description>&lt;p&gt;You can now specify the number of connections your Hyperdrive configuration uses to connect to your origin database.&lt;/p&gt;
&lt;p&gt;All configurations have a minimum of 5 connections. The maximum connection count for a Hyperdrive configuration depends on the &lt;a href=&quot;https://developers.cloudflare.com/hyperdrive/platform/limits/&quot;&gt;Hyperdrive limits of your Workers plan&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This feature allows you to right-size your connection pool based on your database capacity and application requirements. You can configure connection counts through the Cloudflare dashboard or API.&lt;/p&gt;
&lt;p&gt;Refer to the &lt;a href=&quot;https://developers.cloudflare.com/hyperdrive/concepts/connection-pooling/&quot;&gt;Hyperdrive configuration documentation&lt;/a&gt; for more information.&lt;/p&gt;</description><pubDate>Thu, 03 Jul 2025 00:00:00 GMT</pubDate><product>Hyperdrive</product><category>Hyperdrive</category></item><item><title>Access - Access RDP securely from your browser — now in open beta</title><link>https://developers.cloudflare.com/changelog/post/2025-07-01-browser-based-rdp-open-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-01-browser-based-rdp-open-beta/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/rdp-browser/&quot;&gt;Browser-based RDP&lt;/a&gt; with &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/policies/&quot;&gt;Cloudflare Access&lt;/a&gt; is now available in open beta for all Cloudflare customers. It enables secure, remote Windows server access without VPNs or RDP clients.&lt;/p&gt;
&lt;p&gt;With browser-based RDP, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Control how users authenticate to internal RDP resources&lt;/strong&gt; with single sign-on (SSO), multi-factor authentication (MFA), and granular access policies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Record who is accessing which servers and when&lt;/strong&gt; to support regulatory compliance requirements and to gain greater visibility in the event of a security event.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Eliminate the need to install and manage software on user devices&lt;/strong&gt;. You will only need a web browser.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduce your attack surface&lt;/strong&gt; by keeping your RDP servers off the public Internet and protecting them from common threats like credential stuffing or brute-force attacks.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/browser-based-rdp-access-app.BNXce1JL_1TDoUX.webp&quot; alt=&quot;Example of a browsed-based RDP Access application&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To get started, see &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/rdp-browser/&quot;&gt;Connect to RDP in a browser&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 01 Jul 2025 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>AI Crawl Control - Introducing Pay Per Crawl (private beta)</title><link>https://developers.cloudflare.com/changelog/post/2025-07-01-pay-per-crawl/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-01-pay-per-crawl/</guid><description>&lt;p&gt;We are introducing a new feature of &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/&quot;&gt;AI Crawl Control&lt;/a&gt; — Pay Per Crawl. &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/&quot;&gt;Pay Per Crawl&lt;/a&gt; enables site owners to require payment from AI crawlers every time the crawlers access their content, thereby fostering a fairer Internet by enabling site owners to control and monetize how their content gets used by AI.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/pay-per-crawl.B5bv2nwT_1TH6vv.webp&quot; alt=&quot;Pay per crawl&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;strong&gt;For Site Owners:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set pricing and select which crawlers to charge for content access&lt;/li&gt;
&lt;li&gt;Manage payments via Stripe&lt;/li&gt;
&lt;li&gt;Monitor analytics on successful content deliveries&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;For AI Crawler Owners:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use HTTP headers to request and accept pricing&lt;/li&gt;
&lt;li&gt;Receive clear confirmations on charges for accessed content&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learn more in the &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/&quot;&gt;Pay Per Crawl documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 01 Jul 2025 00:00:00 GMT</pubDate><product>AI Crawl Control</product><category>AI Crawl Control</category></item><item><title>AI Crawl Control - AI Crawl Control refresh</title><link>https://developers.cloudflare.com/changelog/post/2025-07-01-refresh/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-01-refresh/</guid><description>&lt;p&gt;We redesigned the AI Crawl Control dashboard to provide more intuitive and granular control over AI crawlers.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;From the new &lt;strong&gt;AI Crawlers&lt;/strong&gt; tab: block specific AI crawlers.&lt;/li&gt;
&lt;li&gt;From the new &lt;strong&gt;Metrics&lt;/strong&gt; tab: view AI Crawl Control metrics.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/manage-ai-crawlers.6UgS8dSG_Z1HRWpI.webp&quot; alt=&quot;Block AI crawlers&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/analyze-metrics.C52pJZVg_1C7hti.webp&quot; alt=&quot;Analyze AI crawler activity&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To get started, explore:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/manage-ai-crawlers/&quot;&gt;Manage AI crawlers&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/features/analyze-ai-traffic/&quot;&gt;Analyze AI traffic&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 01 Jul 2025 00:00:00 GMT</pubDate><product>AI Crawl Control</product><category>AI Crawl Control</category></item><item><title>Radar - Bot &amp; Crawler Insights in Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2025-07-01-radar-bots-insights/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-01-radar-bots-insights/</guid><description>&lt;h4&gt;Web crawlers insights&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; now offers expanded insights into web crawlers, giving you greater visibility into aggregated trends in crawl and refer activity.&lt;/p&gt;
&lt;p&gt;We have introduced the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/bots/subresources/web_crawlers/methods/summary/&quot;&gt;&lt;code&gt;/bots/crawlers/summary/{dimension}&lt;/code&gt;&lt;/a&gt;: Returns an overview of crawler HTTP request distributions across key dimensions.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/bots/subresources/web_crawlers/methods/timeseries_groups/&quot;&gt;&lt;code&gt;/bots/crawlers/timeseries_groups/{dimension}&lt;/code&gt;&lt;/a&gt;: Provides time-series data on crawler request distributions across the same dimensions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These endpoints allow analysis across the following dimensions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;user_agent&lt;/code&gt;: Parsed data from the &lt;code&gt;User-Agent&lt;/code&gt; header.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;referer&lt;/code&gt;: Parsed data from the &lt;code&gt;Referer&lt;/code&gt; header.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;crawl_refer_ratio&lt;/code&gt;: Ratio of HTML page crawl requests to HTML page referrals by platform.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Broader bot insights&lt;/h4&gt;
&lt;p&gt;In addition to crawler-specific insights, Radar now provides a broader set of bot endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/bots/&quot;&gt;&lt;code&gt;/bots/&lt;/code&gt;&lt;/a&gt;: Lists all bots.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/bots/methods/get/&quot;&gt;&lt;code&gt;/bots/{bot_slug}&lt;/code&gt;&lt;/a&gt;: Returns detailed metadata for a specific bot.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/bots/methods/timeseries/&quot;&gt;&lt;code&gt;/bots/timeseries&lt;/code&gt;&lt;/a&gt;: Time-series data for bot activity.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/bots/methods/summary/&quot;&gt;&lt;code&gt;/bots/summary/{dimension}&lt;/code&gt;&lt;/a&gt;: Returns an overview of bot HTTP request distributions across key dimensions.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/bots/methods/timeseries_groups/&quot;&gt;&lt;code&gt;/bots/timeseries_groups/{dimension}&lt;/code&gt;&lt;/a&gt;: Provides time-series data on bot request distributions across the same dimensions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These endpoints support filtering and breakdowns by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bot&lt;/code&gt;: Bot name.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bot_operator&lt;/code&gt;: The organization or entity operating the bot.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bot_category&lt;/code&gt;: Classification of bot type.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The previously available &lt;code&gt;verified_bots&lt;/code&gt; endpoints have now been deprecated in favor of this set of bot insights APIs.
While current data still focuses on verified bots, we plan to expand support for unverified bot traffic in the future.&lt;/p&gt;
&lt;p&gt;Learn more about the new Radar bot and crawler insights in our &lt;a href=&quot;https://blog.cloudflare.com/ai-search-crawl-refer-ratio-on-radar&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 01 Jul 2025 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>Workers - Enhanced support for static assets with the Cloudflare Vite plugin</title><link>https://developers.cloudflare.com/changelog/post/2025-07-01-vite-plugin-enhanced-assets-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-07-01-vite-plugin-enhanced-assets-support/</guid><description>&lt;p&gt;You can now use any of Vite&apos;s &lt;a href=&quot;https://vite.dev/guide/assets&quot; target=&quot;_blank&quot;&gt;static asset handling&lt;/a&gt; features in your Worker as well as in your frontend.
These include importing assets as URLs, importing as strings and importing from the &lt;code&gt;public&lt;/code&gt; directory as well as inlining assets.&lt;/p&gt;
&lt;p&gt;Additionally, assets imported as URLs in your Worker are now automatically moved to the client build output.&lt;/p&gt;
&lt;p&gt;Here is an example that fetches an imported asset using the &lt;a href=&quot;https://developers.cloudflare.com/workers/static-assets/binding/#binding&quot;&gt;assets binding&lt;/a&gt; and modifies the response.&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;// Import the asset URL&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// This returns the resolved path in development and production&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;myImage&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;./my-image.png&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;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;// Fetch the asset using the binding&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;ASSETS&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;URL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;myImage&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&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;// Create a new `Response` object that can be modified&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;modifiedResponse&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;body&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&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;// Add an additional header&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;modifiedResponse&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;append&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;my-header&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;imported-asset&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Return the modfied response&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;modifiedResponse&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;Refer to &lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/reference/static-assets/&quot;&gt;Static Assets&lt;/a&gt; in the Cloudflare Vite plugin docs for more info.&lt;/p&gt;</description><pubDate>Tue, 01 Jul 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.5.893.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-06-30-warp-windows-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-30-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains improvements and new exciting features, including &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#sccm-vpn-boundary-support&quot;&gt;SCCM VPN boundary support&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#enable_post_quantum&quot;&gt;post-quantum cryptography&lt;/a&gt;. By tunneling your corporate network traffic over Cloudflare, you can now gain the immediate protection of post-quantum cryptography without needing to upgrade any of your individual corporate applications or systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed a device registration issue that caused WARP connection failures when changing networks.&lt;/li&gt;
&lt;li&gt;Captive portal improvements and fixes:&lt;ul&gt;
&lt;li&gt;Captive portal sign in notifications will now be sent through operating system notification services.&lt;/li&gt;
&lt;li&gt;Fix for firewall configuration issue affecting clients in DoH only mode.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Improved the connectivity status message in the client GUI.&lt;/li&gt;
&lt;li&gt;Fixed a bug affecting clients in Gateway with DoH mode where the original DNS servers were not restored after disabling WARP.&lt;/li&gt;
&lt;li&gt;The WARP client now applies post-quantum cryptography end-to-end on enabled devices accessing resources behind a Cloudflare Tunnel. This feature can be &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#enable_post_quantum&quot;&gt;enabled by MDM&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Improvement to handle client configuration changes made by an MDM while WARP is not running.&lt;/li&gt;
&lt;li&gt;Improvements for multi-user experience to better handle fast user switching and transitions from a pre-login to a logged-in state.&lt;/li&gt;
&lt;li&gt;Added a WARP client device posture check for SAN attributes to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/reusable-components/posture-checks/warp-client-checks/client-certificate/&quot;&gt;client certificate check&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Fixed an issue affecting Split Tunnel Include mode, where traffic outside the tunnel was blocked when switching between Wi-Fi and Ethernet networks.&lt;/li&gt;
&lt;li&gt;Added &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#sccm-vpn-boundary-support&quot;&gt;SCCM VPN boundary support&lt;/a&gt; to device profile settings. With SCCM VPN boundary support enabled, operating systems will register WARP&apos;s local interface IP with the on-premise DNS server when reachable.&lt;/li&gt;
&lt;li&gt;Fix for an issue causing WARP connectivity to fail without full system reboot.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For Windows 11 24H2 users, Microsoft has confirmed a regression that may lead to performance issues like mouse lag, audio cracking, or other slowdowns. Cloudflare recommends users experiencing these issues upgrade to a minimum &lt;a href=&quot;https://support.microsoft.com/en-us/topic/july-8-2025-kb5062553-os-build-26100-4652-523e69cb-051b-43c6-8376-6a76d6caeefd&quot;&gt;Windows 11 24H2 version KB5060829&lt;/a&gt; or higher for resolution.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with &lt;code&gt;KB5055523&lt;/code&gt; installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 30 Jun 2025 21:10:37 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.5.893.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-06-30-warp-macos-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-30-warp-macos-ga/</guid><description>&lt;p&gt;A new GA release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains improvements and new exciting features, including &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#enable_post_quantum&quot;&gt;post-quantum cryptography&lt;/a&gt;. By tunneling your corporate network traffic over Cloudflare, you can now gain the immediate protection of post-quantum cryptography without needing to upgrade any of your individual corporate applications or systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue where WARP sometimes failed to automatically relaunch after updating.&lt;/li&gt;
&lt;li&gt;Fixed a device registration issue causing WARP connection failures when changing networks.&lt;/li&gt;
&lt;li&gt;Captive portal improvements and fixes:&lt;ul&gt;
&lt;li&gt;Captive portal sign in notifications will now be sent through operating system notification services.&lt;/li&gt;
&lt;li&gt;Fix for firewall configuration issue affecting clients in DoH only mode.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Improved the connectivity status message in the client GUI.&lt;/li&gt;
&lt;li&gt;The WARP client now applies post-quantum cryptography end-to-end on enabled devices accessing resources behind a Cloudflare Tunnel. This feature can be &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#enable_post_quantum&quot;&gt;enabled by MDM&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Improvement to handle client configuration changes made by an MDM while WARP is not running.&lt;/li&gt;
&lt;li&gt;Fixed an issue affecting Split Tunnel Include mode, where traffic outside the tunnel was blocked when switching between Wi-Fi and Ethernet networks.&lt;/li&gt;
&lt;li&gt;Improvement for WARP connectivity issues on macOS due to the operating system not accepting DNS server configurations.&lt;/li&gt;
&lt;li&gt;Added a WARP client device posture check for SAN attributes to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/reusable-components/posture-checks/warp-client-checks/client-certificate/&quot;&gt;client certificate check&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS Sequoia: Due to changes Apple introduced in macOS 15.0.x, the WARP client may not behave as expected. Cloudflare recommends the use of macOS 15.4 or later.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 30 Jun 2025 21:10:36 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for Linux (version 2025.5.893.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-06-30-warp-linux-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-30-warp-linux-ga/</guid><description>&lt;p&gt;A new GA release for the Linux WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains improvements and new exciting features, including &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#enable_post_quantum&quot;&gt;post-quantum cryptography&lt;/a&gt;. By tunneling your corporate network traffic over Cloudflare, you can now gain the immediate protection of post-quantum cryptography without needing to upgrade any of your individual corporate applications or systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed a device registration issue causing WARP connection failures when changing networks.&lt;/li&gt;
&lt;li&gt;Captive portal improvements and fixes:&lt;ul&gt;
&lt;li&gt;Captive portal sign in notifications will now be sent through operating system notification services.&lt;/li&gt;
&lt;li&gt;Fix for firewall configuration issue affecting clients in DoH only mode.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Improved the connectivity status message in the client GUI.&lt;/li&gt;
&lt;li&gt;The WARP client now applies post-quantum cryptography end-to-end on enabled devices accessing resources behind a Cloudflare Tunnel. This feature can be &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#enable_post_quantum&quot;&gt;enabled by MDM&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Improvement to handle client configuration changes made by MDM while WARP is not running.&lt;/li&gt;
&lt;li&gt;Fixed an issue affecting Split Tunnel Include mode, where traffic outside the tunnel was blocked when switching between Wi-Fi and Ethernet networks.&lt;/li&gt;
&lt;li&gt;Added a WARP client device posture check for SAN attributes to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/reusable-components/posture-checks/warp-client-checks/client-certificate/&quot;&gt;client certificate check&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 30 Jun 2025 19:44:34 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - Cloudflare One Agent for Android (version 2.4.2)</title><link>https://developers.cloudflare.com/changelog/post/2025-06-30-warp-ga-android/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-30-warp-ga-android/</guid><description>&lt;p&gt;A new GA release for the Android Cloudflare One Agent is now available in the &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.cloudflare.cloudflareoneagent&quot; target=&quot;_blank&quot;&gt;Google Play Store&lt;/a&gt;. This release
contains improvements and new exciting features, including &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#enable_post_quantum&quot;&gt;post-quantum cryptography&lt;/a&gt;.
By tunneling your corporate network traffic over Cloudflare, you can now gain the immediate &lt;a href=&quot;https://blog.cloudflare.com/pq-2024/&quot; target=&quot;_blank&quot;&gt;protection of post-quantum cryptography&lt;/a&gt; without needing to upgrade any of your individual corporate applications or systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;QLogs are now disabled by default and can be enabled in the app by turning on &lt;strong&gt;Enable qlogs&lt;/strong&gt; under &lt;strong&gt;Settings&lt;/strong&gt; &gt; &lt;strong&gt;Advanced&lt;/strong&gt; &gt; &lt;strong&gt;Diagnostics&lt;/strong&gt; &gt; &lt;strong&gt;Debug Logs&lt;/strong&gt;. The QLog setting from previous releases will no longer be respected.&lt;/li&gt;
&lt;li&gt;DNS over HTTPS traffic is now included in the WARP tunnel by default.&lt;/li&gt;
&lt;li&gt;The WARP client now applies &lt;a href=&quot;https://blog.cloudflare.com/pq-2024/&quot; target=&quot;_blank&quot;&gt;post-quantum cryptography&lt;/a&gt; end-to-end on enabled devices accessing resources behind a Cloudflare Tunnel. This feature can be enabled by &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#enable_post_quantum&quot;&gt;MDM&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Fixed an issue that caused WARP connection failures on ChromeOS devices.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 30 Jun 2025 00:00:00 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - Cloudflare One Agent for iOS (version 1.11)</title><link>https://developers.cloudflare.com/changelog/post/2025-06-30-warp-ga-ios/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-30-warp-ga-ios/</guid><description>&lt;p&gt;A new GA release for the iOS Cloudflare One Agent is now available in the &lt;a href=&quot;https://apps.apple.com/us/app/cloudflare-one-agent/id6443476492&quot; target=&quot;_blank&quot;&gt;iOS App Store&lt;/a&gt;. This release
contains improvements and new exciting features, including &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#enable_post_quantum&quot;&gt;post-quantum cryptography&lt;/a&gt;.
By tunneling your corporate network traffic over Cloudflare, you can now gain the immediate &lt;a href=&quot;https://blog.cloudflare.com/pq-2024/&quot; target=&quot;_blank&quot;&gt;protection of post-quantum cryptography&lt;/a&gt; without needing to upgrade any of your individual corporate applications or systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;QLogs are now disabled by default and can be enabled in the app by turning on &lt;strong&gt;Enable qlogs&lt;/strong&gt; under &lt;strong&gt;Settings&lt;/strong&gt; &gt; &lt;strong&gt;Advanced&lt;/strong&gt; &gt; &lt;strong&gt;Diagnostics&lt;/strong&gt; &gt; &lt;strong&gt;Debug Logs&lt;/strong&gt;. The QLog setting from previous releases will no longer be respected.&lt;/li&gt;
&lt;li&gt;DNS over HTTPS traffic is now included in the WARP tunnel by default.&lt;/li&gt;
&lt;li&gt;The WARP client now applies &lt;a href=&quot;https://blog.cloudflare.com/pq-2024/&quot; target=&quot;_blank&quot;&gt;post-quantum cryptography&lt;/a&gt; end-to-end on enabled devices accessing resources behind a Cloudflare Tunnel. This feature can be enabled by &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#enable_post_quantum&quot;&gt;MDM&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 30 Jun 2025 00:00:00 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Email Routing - Mail authentication requirements for Email Routing</title><link>https://developers.cloudflare.com/changelog/post/2025-06-30-mail-authentication/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-30-mail-authentication/</guid><description>&lt;p&gt;The Email Routing platform supports &lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc7208&quot; target=&quot;_blank&quot;&gt;SPF&lt;/a&gt; records and &lt;a href=&quot;https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail&quot; target=&quot;_blank&quot;&gt;DKIM (DomainKeys Identified Mail)&lt;/a&gt; signatures and
honors these protocols when the sending domain has them configured. However, if the sending domain doesn&apos;t implement them,
we still forward the emails to upstream mailbox providers.&lt;/p&gt;
&lt;p&gt;Starting on July 3, 2025, we will require all emails to be authenticated using at least one of the protocols, SPF or DKIM, to
forward them. We also strongly recommend that all senders implement the DMARC protocol.&lt;/p&gt;
&lt;p&gt;If you are using a Worker with an Email trigger to receive email messages and forward them upstream, you will need to handle the case where
the forward action may fail due to missing authentication on the incoming email.&lt;/p&gt;
&lt;p&gt;SPAM has been a long-standing issue with email. By enforcing mail authentication, we will increase the efficiency of identifying abusive senders and blocking
bad emails.
If you&apos;re an email server delivering emails to large mailbox providers, it&apos;s likely you already use these protocols; otherwise, please ensure
you have them properly configured.&lt;/p&gt;</description><pubDate>Mon, 30 Jun 2025 00:00:00 GMT</pubDate><product>Email Routing</product><category>Email Routing</category></item><item><title>Magic Transit - Graceful withdrawal of BYOIP prefixes</title><link>https://developers.cloudflare.com/changelog/post/2025-06-30-graceful-byoip-withdrawal/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-30-graceful-byoip-withdrawal/</guid><description>&lt;p&gt;Magic Transit customers can now configure AS prepending on their BYOIP prefixes advertised at the Cloudflare edge. This allows for smoother traffic migration and minimizes packet loss when changing providers.&lt;/p&gt;
&lt;p&gt;AS prepending makes the Cloudflare route less preferred by increasing the AS path length. You can use this to gradually shift traffic away from Cloudflare before withdrawing a prefix, avoiding abrupt routing changes.&lt;/p&gt;
&lt;p&gt;Prepending can be configured via the API or through BGP community values when peering with the Magic Transit routing table. For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/magic-transit/how-to/advertise-prefixes/&quot;&gt;Advertise prefixes&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 30 Jun 2025 00:00:00 GMT</pubDate><product>Magic Transit</product><category>Magic Transit</category></item><item><title>Workers - Remote bindings (beta) now works with Next.js — connect to remote resources (D1, KV, R2, etc.) during local development</title><link>https://developers.cloudflare.com/changelog/post/2025-06-25-getplatformproxy-support-remote-bindings/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-25-getplatformproxy-support-remote-bindings/</guid><description>&lt;p&gt;We &lt;a href=&quot;https://github.com/cloudflare/workers-sdk/discussions/9660&quot; target=&quot;_blank&quot;&gt;recently announced&lt;/a&gt; our public beta for &lt;a href=&quot;https://developers.cloudflare.com/workers/development-testing/#remote-bindings&quot;&gt;remote bindings&lt;/a&gt;, which allow you to connect to deployed resources running on your Cloudflare account (like &lt;a href=&quot;https://developers.cloudflare.com/r2&quot;&gt;R2 buckets&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/d1&quot;&gt;D1 databases&lt;/a&gt;) while running a local development session.&lt;/p&gt;
&lt;p&gt;Now, you can use remote bindings with your Next.js applications through the &lt;a href=&quot;https://opennext.js.org/cloudflare/bindings#remote-bindings&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;@opennextjs/cloudflare&lt;/code&gt; adaptor&lt;/a&gt; by enabling the experimental feature in your &lt;code&gt;next.config.ts&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;diff&quot;&gt;&lt;code class=&quot;language-diff&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;initOpenNextCloudflareForDev();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;initOpenNextCloudflareForDev({&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;experimental: { remoteBindings: true }&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;Then, all you have to do is specify which bindings you want connected to the deployed resource on your Cloudflare account via the &lt;code&gt;experimental_remote&lt;/code&gt; flag in your binding definition:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;r2_buckets&lt;/span&gt;&lt;span&gt;&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;bucket_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;testing-bucket&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MY_BUCKET&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;experimental_remote&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[[&lt;/span&gt;&lt;span&gt;r2_buckets&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bucket_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;testing-bucket&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;experimental_remote&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;You can then run &lt;code&gt;next dev&lt;/code&gt; to start a local development session (or start a preview with &lt;code&gt;opennextjs-cloudflare preview&lt;/code&gt;), and all requests to &lt;code&gt;env.MY_BUCKET&lt;/code&gt; will be proxied to the remote &lt;code&gt;testing-bucket&lt;/code&gt; — rather than the &lt;a href=&quot;https://developers.cloudflare.com/workers/development-testing/#bindings-during-local-development&quot;&gt;default local binding simulations&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Remote bindings &amp;#x26; ISR&lt;/h4&gt;
&lt;p&gt;Remote bindings are also used during the build process, which comes with significant benefits for pages using &lt;a href=&quot;https://opennext.js.org/aws/inner_workings/components/server/node#isrssg&quot; target=&quot;_blank&quot;&gt;Incremental Static Regeneration (ISR)&lt;/a&gt;. During the build step for an ISR page, your server executes the page&apos;s code just as it would for normal user requests. If a page needs data to display (like fetching user info from &lt;a href=&quot;https://developers.cloudflare.com/kv&quot;&gt;KV&lt;/a&gt;), those requests are actually made. The server then uses this fetched data to render the final HTML.&lt;/p&gt;
&lt;p&gt;Data fetching is a critical part of this process, as the finished HTML is only as good as the data it was built with. If the build process can&apos;t fetch real data, you end up with a pre-rendered page that&apos;s empty or incomplete.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;With remote bindings support in OpenNext,&lt;/strong&gt; your pre-rendered pages are built with real data from the start. The build process uses any configured remote bindings, and any data fetching occurs against the deployed resources on your Cloudflare account.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Want to learn more?&lt;/strong&gt; Get started with &lt;a href=&quot;https://opennext.js.org/cloudflare/bindings#remote-bindings&quot; target=&quot;_blank&quot;&gt;remote bindings and OpenNext&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Have feedback?&lt;/strong&gt; Join the discussion in our &lt;a href=&quot;https://github.com/cloudflare/workers-sdk/discussions/9660&quot; target=&quot;_blank&quot;&gt;beta announcement&lt;/a&gt; to share feedback or report any issues.&lt;/p&gt;</description><pubDate>Mon, 30 Jun 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Run and connect Workers in separate dev commands with the Cloudflare Vite plugin</title><link>https://developers.cloudflare.com/changelog/post/2025-06-26-vite-plugin-cross-commands-binding/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-26-vite-plugin-cross-commands-binding/</guid><description>&lt;p&gt;Workers can now talk to each other across separate dev commands using service bindings and tail consumers, whether started with &lt;code&gt;vite dev&lt;/code&gt; or &lt;code&gt;wrangler dev&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Simply start each Worker in its own terminal:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Terminal 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;vite&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&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;# Terminal 2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&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;This is useful when different teams maintain different Workers, or when each Worker has its own build setup or tooling.&lt;/p&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://developers.cloudflare.com/workers/development-testing/multi-workers&quot;&gt;Developing with multiple Workers&lt;/a&gt; guide to learn more about the different approaches and when to use each one.&lt;/p&gt;</description><pubDate>Thu, 26 Jun 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Agents, Workers, Workflows - Run AI-generated code on-demand with Code Sandboxes (new)</title><link>https://developers.cloudflare.com/changelog/post/2025-06-24-announcing-sandboxes/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-24-announcing-sandboxes/</guid><description>&lt;p&gt;AI is supercharging app development for everyone, but we need a safe way to run untrusted, LLM-written code. We’re introducing &lt;a href=&quot;https://www.npmjs.com/package/@cloudflare/sandbox&quot; target=&quot;_blank&quot;&gt;Sandboxes&lt;/a&gt;, which let your Worker run actual processes in a secure, container-based environment.&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getSandbox&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/sandbox&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Sandbox&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/sandbox&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;,&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;span&gt;Env&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getSandbox&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;Sandbox&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-sandbox&quot;&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sandbox&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;exec&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ls&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;-la&quot;&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;/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;h4&gt;Methods&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;exec(command: string, args: string[], options?: { stream?: boolean })&lt;/code&gt;:Execute a command in the sandbox.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gitCheckout(repoUrl: string, options: { branch?: string; targetDir?: string; stream?: boolean })&lt;/code&gt;: Checkout a git repository in the sandbox.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mkdir(path: string, options: { recursive?: boolean; stream?: boolean })&lt;/code&gt;: Create a directory in the sandbox.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;writeFile(path: string, content: string, options: { encoding?: string; stream?: boolean })&lt;/code&gt;: Write content to a file in the sandbox.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;readFile(path: string, options: { encoding?: string; stream?: boolean })&lt;/code&gt;: Read content from a file in the sandbox.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;deleteFile(path: string, options?: { stream?: boolean })&lt;/code&gt;: Delete a file from the sandbox.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;renameFile(oldPath: string, newPath: string, options?: { stream?: boolean })&lt;/code&gt;: Rename a file in the sandbox.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;moveFile(sourcePath: string, destinationPath: string, options?: { stream?: boolean })&lt;/code&gt;: Move a file from one location to another in the sandbox.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ping()&lt;/code&gt;: Ping the sandbox.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sandboxes are still experimental. We&apos;re using them to explore how isolated, container-like workloads might scale on Cloudflare — and to help define the developer experience around them.&lt;/p&gt;
&lt;p&gt;You can try it today from your Worker, with just a few lines of code. Let us know what you build.&lt;/p&gt;</description><pubDate>Wed, 25 Jun 2025 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category><category>Workflows</category></item><item><title>Durable Objects, Workers - @cloudflare/actors library - SDK for Durable Objects in beta</title><link>https://developers.cloudflare.com/changelog/post/2025-06-25-actors-package-alpha/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-25-actors-package-alpha/</guid><description>&lt;p&gt;The new &lt;a href=&quot;https://www.npmjs.com/package/@cloudflare/actors&quot; target=&quot;_blank&quot;&gt;@cloudflare/actors&lt;/a&gt; library is now in beta!&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;@cloudflare/actors&lt;/code&gt; library is a new SDK for Durable Objects and provides a powerful set of abstractions for building real-time, interactive, and multiplayer applications on top of Durable Objects. With beta usage and feedback, &lt;code&gt;@cloudflare/actors&lt;/code&gt; will become the recommended way to build on Durable Objects and draws upon Cloudflare&apos;s experience building products/features on Durable Objects.&lt;/p&gt;
&lt;p&gt;The name &quot;actors&quot; originates from the &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/concepts/what-are-durable-objects/#actor-programming-model&quot;&gt;actor programming model&lt;/a&gt;, which closely ties to how Durable Objects are modelled.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;@cloudflare/actors&lt;/code&gt; library includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Storage helpers for querying embeddeded, per-object SQLite storage&lt;/li&gt;
&lt;li&gt;Storage helpers for managing SQL schema migrations&lt;/li&gt;
&lt;li&gt;Alarm helpers for scheduling multiple alarms provided a date, delay in seconds, or cron expression&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Actor&lt;/code&gt; class for using Durable Objects with a defined pattern&lt;/li&gt;
&lt;li&gt;Durable Objects &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/api/base/&quot; target=&quot;_blank&quot;&gt;Workers API&lt;/a&gt; is always available for your application as needed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Storage and alarm helper methods can be combined with &lt;a href=&quot;https://github.com/cloudflare/actors?tab=readme-ov-file#storage--alarms-with-durableobject-class&quot; target=&quot;_blank&quot;&gt;any Javascript class&lt;/a&gt; that defines your Durable Object, i.e, ones that extend &lt;code&gt;DurableObject&lt;/code&gt; including the &lt;code&gt;Actor&lt;/code&gt; class.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Storage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/actors/storage&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ChatRoom&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DurableObject&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Env&lt;/span&gt;&lt;span&gt;&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;storage&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Storage&lt;/span&gt;&lt;span&gt;;&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;constructor&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DurableObjectState&lt;/span&gt;&lt;span&gt;,&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;span&gt;Env&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;super&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;env&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;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Storage&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;storage&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;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;migrations&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;idMonotonicInc&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&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;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Create users table&quot;&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;sql&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY)&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;&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;// Run migrations before executing SQL query&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;runMigrations&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;// Query with SQL template&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;userId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;URL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;searchParams&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;userId&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sql&lt;/span&gt;&lt;span&gt;`SELECT * FROM users WHERE id = &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;userId&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;query&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;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;&lt;code&gt;@cloudflare/actors&lt;/code&gt; library introduces the &lt;code&gt;Actor&lt;/code&gt; class pattern. &lt;code&gt;Actor&lt;/code&gt; lets you access Durable Objects without writing the Worker that communicates with your Durable Object (the Worker is created for you). By default, requests are routed to a Durable Object named &quot;default&quot;.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyActor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Actor&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Env&lt;/span&gt;&lt;span&gt;&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;Hello, World!&apos;&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;handler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;MyActor&lt;/span&gt;&lt;span&gt;)&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;You can &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/get-started/#3-instantiate-and-communicate-with-a-durable-object&quot;&gt;route&lt;/a&gt; to different Durable Objects by name within your &lt;code&gt;Actor&lt;/code&gt; class using &lt;a href=&quot;https://github.com/cloudflare/actors?tab=readme-ov-file#actor-with-custom-name&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;nameFromRequest&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyActor&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Actor&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Env&lt;/span&gt;&lt;span&gt;&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;static&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nameFromRequest&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;)&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;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;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;URL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;searchParams&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;userId&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;??&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;foo&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`Actor identifier (Durable Object name): &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;identifier&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;/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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;handler&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;MyActor&lt;/span&gt;&lt;span&gt;)&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;For more examples, check out the library &lt;a href=&quot;https://github.com/cloudflare/actors?tab=readme-ov-file#getting-started&quot; target=&quot;_blank&quot;&gt;README&lt;/a&gt;. &lt;code&gt;@cloudflare/actors&lt;/code&gt; library is a place for more helpers and built-in patterns, like retry handling and Websocket-based applications, to reduce development overhead for common Durable Objects functionality. Please share feedback and what more you would like to see on our &lt;a href=&quot;https://discord.com/channels/595317990191398933/773219443911819284&quot; target=&quot;_blank&quot;&gt;Discord channel&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 25 Jun 2025 00:00:00 GMT</pubDate><product>Durable Objects</product><category>Durable Objects</category><category>Workers</category></item><item><title>Data Loss Prevention, CASB, Cloudflare One - Data Security Analytics in the Zero Trust dashboard</title><link>https://developers.cloudflare.com/changelog/post/cf1-data-security-analytics-v1/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/cf1-data-security-analytics-v1/</guid><description>&lt;p&gt;Zero Trust now includes &lt;strong&gt;Data security analytics&lt;/strong&gt;, providing you with unprecedented visibility into your organization sensitive data.&lt;/p&gt;
&lt;p&gt;The new dashboard includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sensitive Data Movement Over Time:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;See patterns and trends in how sensitive data moves across your environment. This helps understand where data is flowing and identify common paths.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sensitive Data at Rest in SaaS &amp;#x26; Cloud:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;View an inventory of sensitive data stored within your corporate SaaS applications (for example, Google Drive, Microsoft 365) and cloud accounts (such as AWS S3).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DLP Policy Activity:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Identify which of your Data Loss Prevention (DLP) policies are being triggered most often.&lt;/li&gt;
&lt;li&gt;See which specific users are responsible for triggering DLP policies.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/cf1-data-security-analytics-v1.BGl6fYXl_H3N0P.webp&quot; alt=&quot;Data Security Analytics&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To access the new dashboard, log in to &lt;a href=&quot;https://one.dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Cloudflare One&lt;/a&gt; and go to &lt;strong&gt;Insights&lt;/strong&gt; on the sidebar.&lt;/p&gt;</description><pubDate>Mon, 23 Jun 2025 09:00:00 GMT</pubDate><product>Data Loss Prevention</product><category>Data Loss Prevention</category><category>CASB</category><category>Cloudflare One</category></item><item><title>Cloudflare Fundamentals - Cloudflare User Groups &amp; SCIM User Groups are now in GA</title><link>https://developers.cloudflare.com/changelog/post/2025-06-23-user-groups-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-23-user-groups-ga/</guid><description>&lt;p&gt;We&apos;re announcing the GA of &lt;strong&gt;User Groups for Cloudflare Dashboard&lt;/strong&gt; and &lt;strong&gt;System for Cross Domain Identity Management (SCIM) User Groups&lt;/strong&gt;, strengthening our RBAC capabilities with stable, production-ready primitives for managing access at scale.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What&apos;s New&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;User Groups [GA]&lt;/strong&gt;: &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/manage-members/user-groups/&quot;&gt;User Groups&lt;/a&gt; are a new Cloudflare IAM primitive that enable administrators to create collections of account members that are treated equally from an access control perspective. User Groups can be assigned permission policies, with individual members in the group inheriting all permissions granted to the User Group. User Groups can be created manually or via our APIs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SCIM User Groups [GA]&lt;/strong&gt;: Centralize &amp;#x26; simplify your user and group management at scale by syncing memberships directly from your upstream identity provider (like Okta or Entra ID) to the Cloudflare Platform. This ensures Cloudflare stays in sync with your identity provider, letting you apply Permission Policies to those synced groups directly within the Cloudflare Dashboard.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stability &amp;#x26; Scale&lt;/strong&gt;:
These features have undergone extensive testing during the Public Beta period and are now ready for production use across enterprises of all sizes.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;SCIM Virtual Groups  (identified by the pattern &lt;code&gt;CF-&amp;#x3C;accountID&gt;-&amp;#x3C;Role Name&gt;&lt;/code&gt; in your IdP) are now officially deprecated as of June 2, 2025. SCIM Virtual Groups end-of-life will take effect on December 2, 2025. We strongly recommend migrating to SCIM User Groups to ensure continued support for SCIM synchronization to the Cloudflare Dashboard. If you haven’t used Virtual Groups, no action is required.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;For more info:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/manage-members/user-groups/&quot;&gt;Get started with User Groups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/account/account-security/scim-setup/&quot;&gt;Explore our SCIM integration guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 23 Jun 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Network Interconnect - CNI maintenance alerts</title><link>https://developers.cloudflare.com/changelog/post/2025-06-20-cni-maintenance-alerts/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-20-cni-maintenance-alerts/</guid><description>&lt;p&gt;Customers using Cloudflare Network Interconnect with the v1 dataplane can now subscribe to maintenance alert emails. These alerts notify you of planned maintenance windows that may affect your CNI circuits.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/network-interconnect/monitoring-and-alerts/&quot;&gt;Monitoring and alerts&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 20 Jun 2025 00:00:00 GMT</pubDate><product>Network Interconnect</product><category>Network Interconnect</category></item><item><title>Workers - Increased blob size limits in Workers Analytics Engine</title><link>https://developers.cloudflare.com/changelog/post/2025-06-20-increased-blob-size-limits-in-workers-analytics/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-20-increased-blob-size-limits-in-workers-analytics/</guid><description>&lt;p&gt;We’ve increased the total allowed size of &lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/get-started/#2-write-data-points-from-your-worker&quot;&gt;&lt;code&gt;blob&lt;/code&gt;&lt;/a&gt; fields on data points written to &lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/&quot;&gt;Workers Analytics Engine&lt;/a&gt; from &lt;strong&gt;5 KB to 16 KB&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This change gives you more flexibility when logging rich observability data — such as base64-encoded payloads, AI inference traces, or custom metadata — without hitting request size limits.&lt;/p&gt;
&lt;p&gt;You can find full details on limits for queries, filters, payloads, and more &lt;a href=&quot;https://developers.cloudflare.com/analytics/analytics-engine/limits/&quot;&gt;here in the Workers Analytics Engine limits documentation&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;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;env&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;analyticsDataset&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;writeDataPoint&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;// The sum of all of the blob&apos;s sizes can now be 16 KB&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;blobs&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;// The URL of the request to the 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;&lt;/span&gt;&lt;span&gt;request&lt;/span&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;// Some metadata about your application you&apos;d like to store&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;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;metadata&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;// The version of your Worker this datapoint was collected from&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;env&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;versionMetadata&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;tag&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;indexes&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;sample-index&quot;&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;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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;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;env&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;analyticsDataset&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;writeDataPoint&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;// The sum of all of the blob&apos;s sizes can now be 16 KB&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;blobs&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;// The URL of the request to the 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;&lt;/span&gt;&lt;span&gt;request&lt;/span&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;// Some metadata about your application you&apos;d like to store&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;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;metadata&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;// The version of your Worker this datapoint was collected from&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;env&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;versionMetadata&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;tag&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;indexes&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;sample-index&quot;&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;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;/div&gt;&lt;/li&gt;&lt;/ul&gt;</description><pubDate>Fri, 20 Jun 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>AI Search - View custom metadata in responses and guide AI-search with context in AutoRAG</title><link>https://developers.cloudflare.com/changelog/post/2025-06-19-autorag-custom-metadata-and-context/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-19-autorag-custom-metadata-and-context/</guid><description>&lt;p&gt;In &lt;a href=&quot;https://developers.cloudflare.com/ai-search/&quot;&gt;AutoRAG&lt;/a&gt;, you can now view your object&apos;s custom metadata in the response from &lt;a href=&quot;https://developers.cloudflare.com/ai-search/usage/workers-binding/&quot;&gt;&lt;code&gt;/search&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/ai-search/usage/workers-binding/&quot;&gt;&lt;code&gt;/ai-search&lt;/code&gt;&lt;/a&gt;, and optionally add a &lt;code&gt;context&lt;/code&gt; field in the custom metadata of an object to provide additional guidance for AI-generated answers.&lt;/p&gt;
&lt;p&gt;You can add &lt;a href=&quot;https://developers.cloudflare.com/r2/api/workers/workers-api-reference/#r2putoptions&quot;&gt;custom metadata&lt;/a&gt; to an object when uploading it to your R2 bucket.&lt;/p&gt;
&lt;h4&gt;Object&apos;s custom metadata in search responses&lt;/h4&gt;
&lt;p&gt;When you run a search, AutoRAG now returns any custom metadata associated with the object. This metadata appears in the response inside &lt;code&gt;attributes&lt;/code&gt; then &lt;code&gt;file&lt;/code&gt; , and can be used for downstream processing.&lt;/p&gt;
&lt;p&gt;For example, the &lt;code&gt;attributes&lt;/code&gt; section of your search response may look like:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;attributes&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;timestamp&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1750001460000&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;&quot;&lt;/span&gt;&lt;span&gt;folder&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;docs/&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;filename&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;launch-checklist.md&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://wiki.company.com/docs/launch-checklist&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;A checklist for internal launch readiness, including legal, engineering, and marketing steps.&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;/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;h4&gt;Add a &lt;code&gt;context&lt;/code&gt; field to guide LLM answers&lt;/h4&gt;
&lt;p&gt;When you include a custom metadata field named &lt;code&gt;context&lt;/code&gt;, AutoRAG attaches that value to each chunk of the file. When you run an &lt;code&gt;/ai-search&lt;/code&gt; query, this &lt;code&gt;context&lt;/code&gt; is passed to the LLM and can be used as additional input when generating an answer.&lt;/p&gt;
&lt;p&gt;We recommend using the &lt;code&gt;context&lt;/code&gt; field to describe supplemental information you want the LLM to consider, such as a summary of the document or a source URL. If you have several different metadata attributes, you can join them together however you choose within the &lt;code&gt;context&lt;/code&gt; string.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;context&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;summary: &apos;Checklist for internal product launch readiness, including legal, engineering, and marketing steps.&apos;; url: &apos;https://wiki.company.com/docs/launch-checklist&apos;&quot;&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;This gives you more control over how your content is interpreted, without requiring you to modify the original contents of the file.&lt;/p&gt;
&lt;p&gt;Learn more in AutoRAG&apos;s &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/metadata&quot;&gt;metadata filtering documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 19 Jun 2025 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>AI Search - Filter your AutoRAG search by file name</title><link>https://developers.cloudflare.com/changelog/post/2025-06-19-autorag-filename-filter/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-19-autorag-filename-filter/</guid><description>&lt;p&gt;In &lt;a href=&quot;https://developers.cloudflare.com/ai-search/&quot;&gt;AutoRAG&lt;/a&gt;, you can now &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/metadata/&quot;&gt;filter&lt;/a&gt; by an object&apos;s file name using the &lt;code&gt;filename&lt;/code&gt; attribute, giving you more control over which files are searched for a given query.&lt;/p&gt;
&lt;p&gt;This is useful when your application has already determined which files should be searched. For example, you might query a PostgreSQL database to get a list of files a user has access to based on their permissions, and then use that list to limit what AutoRAG retrieves.&lt;/p&gt;
&lt;p&gt;For example, your search query may look like:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;autorag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;my-autorag&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;search&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;query&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;what is the project deadline?&quot;&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;filters&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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;eq&quot;&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;key&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;filename&quot;&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;value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;project-alpha-roadmap.md&quot;&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;;&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;This allows you to connect your application logic with AutoRAG&apos;s retrieval process, making it easy to control what gets searched without needing to reindex or modify your data.&lt;/p&gt;
&lt;p&gt;Learn more in AutoRAG&apos;s &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/metadata/&quot;&gt;metadata filtering documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 19 Jun 2025 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>DNS - Account-level DNS analytics now available via GraphQL Analytics API</title><link>https://developers.cloudflare.com/changelog/post/2025-06-23-account-level-dns-analytics-api/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-23-account-level-dns-analytics-api/</guid><description>&lt;p&gt;Authoritative DNS analytics are now available on the &lt;strong&gt;account level&lt;/strong&gt; via the &lt;a href=&quot;https://developers.cloudflare.com/analytics/graphql-api/&quot;&gt;Cloudflare GraphQL Analytics API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This allows users to query DNS analytics across multiple zones in their account, by using the &lt;code&gt;accounts&lt;/code&gt; filter.&lt;/p&gt;
&lt;p&gt;Here is an example to retrieve the most recent DNS queries across all zones in your account that resulted in an &lt;code&gt;NXDOMAIN&lt;/code&gt; response over a given time frame. Please replace &lt;code&gt;a30f822fcd7c401984bf85d8f2a5111c&lt;/code&gt; with your actual account ID.&lt;/p&gt;
&lt;div&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;GetLatestNXDOMAINResponses&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;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; &lt;/span&gt;&lt;span&gt;&quot;a30f822fcd7c401984bf85d8f2a5111c&quot;&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;dnsAnalyticsAdaptive(&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;date_geq&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2025-06-16&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;date_leq&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2025-06-18&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;responseCode&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;NXDOMAIN&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;limit&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;10000&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;datetime_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;zoneTag&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;queryName&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;responseCode&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;queryType&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;datetime&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;a href=&quot;https://graphql.cloudflare.com/explorer?query=I4VwpgTgngBA4mALgGQIaLAZ0QOQBoAiA8gLICCAkjgEpYAOA9gHaZYwDeAUDDAG4CWYAO6QO3HjFQBjKQxBNEmABQAzfgBsMEAFwdJMuQoAqqAOa6ARKgDMABhUAOAExOVUgCYB2KQBZbARgBOBx8AI0cAVncHFSdUCP9EqQsYAF8ASjEJCXcWMiZUdShEfilMMndUOhLeMCVxbJ41TUhdLkbGyowAfVMwYEsnWycIgFpbADZR-wmLBo6YLrBu9X7B4bHJ6Yc5hYkIemZWAGEGdzBLfGJyKl2F1Pns9X4AW35EXX9bb9tHiQYIOcIAAhKC6ADaSxKL2WBAAogBlY4AXT+mXaCwAXswwCZTH8eKBIFAcKgYQSYAdMIwWGBTucKUToEYoHQwBSoa92R0HtleWlOKkgA&amp;#x26;variables=N4XyA&quot; target=&quot;_blank&quot;&gt;Run in GraphQL API Explorer&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;To learn more and get started, refer to the &lt;a href=&quot;https://developers.cloudflare.com/dns/additional-options/analytics/#analytics&quot;&gt;DNS Analytics documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 19 Jun 2025 00:00:00 GMT</pubDate><product>DNS</product><category>DNS</category></item><item><title>D1, Workers, Workers for Platforms - Automate Worker deployments with a simplified SDK and more reliable Terraform provider</title><link>https://developers.cloudflare.com/changelog/post/2025-06-17-workers-terraform-sdk-api-fixes/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-17-workers-terraform-sdk-api-fixes/</guid><description>&lt;h4&gt;Simplified Worker Deployments with our SDKs&lt;/h4&gt;
&lt;p&gt;We&apos;ve simplified the programmatic deployment of Workers via our &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/api/reference/sdks/&quot;&gt;Cloudflare SDKs&lt;/a&gt;. This update abstracts away the low-level complexities of the &lt;code&gt;multipart/form-data&lt;/code&gt; upload process, allowing you to focus on your code while we handle the deployment mechanics.&lt;/p&gt;
&lt;p&gt;This new interface is available in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/cloudflare-typescript&quot; target=&quot;_blank&quot;&gt;cloudflare-typescript&lt;/a&gt; (4.4.1)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/cloudflare-python&quot; target=&quot;_blank&quot;&gt;cloudflare-python&lt;/a&gt; (4.3.1)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For complete examples, see our guide on &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/infrastructure-as-code&quot;&gt;programmatic Worker deployments&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;The Old way: Manual API calls&lt;/h4&gt;
&lt;p&gt;Previously, deploying a Worker programmatically required manually constructing a &lt;code&gt;multipart/form-data&lt;/code&gt; HTTP request, packaging your code and a separate &lt;code&gt;metadata.json&lt;/code&gt; file. This was more complicated and verbose, and prone to formatting errors.&lt;/p&gt;
&lt;p&gt;For example, here&apos;s how you would upload a Worker script previously with cURL:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://api.cloudflare.com/client/v4/accounts/&amp;#x3C;account_id&gt;/workers/scripts/my-hello-world-script&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;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PUT&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Authorization: Bearer &amp;#x3C;api_token&gt;&apos;&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;-F&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;metadata={&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;main_module&quot;: &quot;my-hello-world-script.mjs&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;bindings&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;type&quot;: &quot;plain_text&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;name&quot;: &quot;MESSAGE&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;text&quot;: &quot;Hello World!&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;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;compatibility_date&quot;: &quot;$today&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;};type=application/json&apos;&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;-F&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;my-hello-world-script.mjs=@-;filename=my-hello-world-script.mjs;type=application/javascript+module&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;&amp;#x3C;&lt;/span&gt;&lt;span&gt;EOF&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export default {&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;async fetch(request, env, ctx) {&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;return new Response(env.MESSAGE, { status: 200 });&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;div&gt;&lt;div&gt;&lt;span&gt;EOF&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;h4&gt;After: SDK interface&lt;/h4&gt;
&lt;p&gt;With the new SDK interface, you can now define your entire Worker configuration using a single, structured object.&lt;/p&gt;
&lt;p&gt;This approach allows you to specify metadata like &lt;code&gt;main_module&lt;/code&gt;, &lt;code&gt;bindings&lt;/code&gt;, and &lt;code&gt;compatibility_date&lt;/code&gt; as clearer properties directly alongside your script content. Our SDK takes this logical object and automatically constructs the complex multipart/form-data API request behind the scenes.&lt;/p&gt;
&lt;p&gt;Here&apos;s how you can now programmatically deploy a Worker via the &lt;a href=&quot;https://github.com/cloudflare/cloudflare-typescript&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare-typescript&lt;/code&gt; SDK&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;Cloudflare&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;cloudflare&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;toFile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;cloudflare/index&quot;&lt;/span&gt;&lt;span&gt;;&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;// ... client setup, script content, etc.&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;workers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;scripts&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;scriptName&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;account_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accountID&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;metadata&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;main_module&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scriptFileName&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;bindings&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;/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;files&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;[&lt;/span&gt;&lt;span&gt;scriptFileName&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;toFile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Buffer&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;scriptContent&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scriptFileName&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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/javascript+module&quot;&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;/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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;Cloudflare&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;cloudflare&apos;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;toFile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&apos;cloudflare/index&apos;&lt;/span&gt;&lt;span&gt;;&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;// ... client setup, script content, etc.&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;workers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;scripts&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;scriptName&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;account_id&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;accountID&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;metadata&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;main_module&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scriptFileName&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;bindings&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;/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;files&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;[&lt;/span&gt;&lt;span&gt;scriptFileName&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;toFile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Buffer&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;scriptContent&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scriptFileName&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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;application/javascript+module&apos;&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;/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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;View the complete example here: &lt;a href=&quot;https://github.com/cloudflare/cloudflare-typescript/blob/main/examples/workers/script-upload.ts&quot; target=&quot;_blank&quot;&gt;https://github.com/cloudflare/cloudflare-typescript/blob/main/examples/workers/script-upload.ts&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Terraform provider improvements&lt;/h4&gt;
&lt;p&gt;We&apos;ve also made several fixes and enhancements to the &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;Cloudflare Terraform provider&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workers_script&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_workers_script&lt;/code&gt;&lt;/a&gt; resource in Terraform, which previously was producing a diff even when there were no changes. Now, your &lt;code&gt;terraform plan&lt;/code&gt; outputs will be cleaner and more reliable.&lt;/li&gt;
&lt;li&gt;Fixed the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workers_for_platforms_dispatch_namespace&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_workers_for_platforms_dispatch_namespace&lt;/code&gt;&lt;/a&gt;, where the provider would attempt to recreate the namespace on a &lt;code&gt;terraform apply&lt;/code&gt;. The resource now correctly reads its remote state, ensuring stability for production environments and CI/CD workflows.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workers_route&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_workers_route&lt;/code&gt;&lt;/a&gt; resource now allows for the &lt;code&gt;script&lt;/code&gt; property to be empty, null, or omitted to indicate that pattern should be negated for all scripts (see routes &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/routing/routes&quot;&gt;docs&lt;/a&gt;). You can now reserve a pattern or temporarily disable a Worker on a route without deleting the route definition itself.&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;primary_location_hint&lt;/code&gt; in the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/d1_database&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;cloudflare_d1_database&lt;/code&gt;&lt;/a&gt; resource will no longer always try to recreate. You can now safely change the location hint for a D1 database without causing a destructive operation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;API improvements&lt;/h4&gt;
&lt;p&gt;We&apos;ve also properly documented the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/scripts/subresources/script_and_version_settings&quot;&gt;Workers Script And Version Settings&lt;/a&gt; in our public OpenAPI spec and SDKs.&lt;/p&gt;</description><pubDate>Thu, 19 Jun 2025 00:00:00 GMT</pubDate><product>D1</product><category>D1</category><category>Workers</category><category>Workers for Platforms</category></item><item><title>Gateway - Gateway will now evaluate Network policies before HTTP policies from July 14th, 2025</title><link>https://developers.cloudflare.com/changelog/post/2025-06-17-new-order-of-enforcement/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-17-new-order-of-enforcement/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/&quot;&gt;Gateway&lt;/a&gt; will now evaluate &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/network-policies/&quot;&gt;Network (Layer 4) policies&lt;/a&gt; &lt;strong&gt;before&lt;/strong&gt; &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/http-policies/&quot;&gt;HTTP (Layer 7) policies&lt;/a&gt;. This change preserves your existing security posture and does not affect which traffic is filtered — but it may impact how notifications are displayed to end users.&lt;/p&gt;
&lt;p&gt;This change will roll out progressively between &lt;strong&gt;July 14–18, 2025&lt;/strong&gt;. If you use HTTP policies, we recommend reviewing your configuration ahead of rollout to ensure the user experience remains consistent.&lt;/p&gt;
&lt;h4&gt;Updated order of enforcement&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Previous order:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;DNS policies&lt;/li&gt;
&lt;li&gt;HTTP policies&lt;/li&gt;
&lt;li&gt;Network policies&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;New order:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;DNS policies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network policies&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTP policies&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Action required: Review your Gateway HTTP policies&lt;/h4&gt;
&lt;p&gt;This change may affect block notifications. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You have an &lt;strong&gt;HTTP policy&lt;/strong&gt; to block &lt;code&gt;example.com&lt;/code&gt; and display a block page.&lt;/li&gt;
&lt;li&gt;You also have a &lt;strong&gt;Network policy&lt;/strong&gt; to block &lt;code&gt;example.com&lt;/code&gt; silently (no client notification).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With the new order, the Network policy will trigger first — and the user will no longer see the HTTP block page.&lt;/p&gt;
&lt;p&gt;To ensure users still receive a block notification, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add a client notification to your Network policy, or&lt;/li&gt;
&lt;li&gt;Use only the HTTP policy for that domain.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h4&gt;Why we’re making this change&lt;/h4&gt;
&lt;p&gt;This update is based on user feedback and aims to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a more intuitive model by evaluating network-level policies before application-level policies.&lt;/li&gt;
&lt;li&gt;Minimize &lt;a href=&quot;https://developers.cloudflare.com/support/troubleshooting/http-status-codes/cloudflare-5xx-errors/error-526/#error-526-in-the-zero-trust-context&quot;&gt;526 connection errors&lt;/a&gt; by verifying the network path to an origin before attempting to establish a decrypted TLS connection.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;To learn more, visit the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/order-of-enforcement/&quot;&gt;Gateway order of enforcement documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 18 Jun 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>Log Explorer - Log Explorer is GA</title><link>https://developers.cloudflare.com/changelog/post/2025-06-18-log-explorer-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-18-log-explorer-ga/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/log-explorer/&quot;&gt;Log Explorer&lt;/a&gt; is now GA, providing native observability and forensics for traffic flowing through Cloudflare.&lt;/p&gt;
&lt;p&gt;Search and analyze your logs, natively in the Cloudflare dashboard. These logs are also stored in Cloudflare&apos;s network, eliminating many of the costs associated with other log providers.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/log-explorer-dash.CJSVLZ7Y_ZXS1TD.webp&quot; alt=&quot;Log Explorer dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;With Log Explorer, you can now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Monitor security and performance issues with custom dashboards&lt;/strong&gt; – use natural language to define charts for measuring response time, error rates, top statistics and more.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Investigate and troubleshoot issues with Log Search&lt;/strong&gt; – use data type-aware search filters or custom sql to investigate detailed logs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Save time and collaborate with saved queries&lt;/strong&gt; – save Log Search queries for repeated use or sharing with other users in your account.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Access Log Explorer at the account and zone level&lt;/strong&gt; – easily find Log Explorer at the account and zone level for querying any dataset.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For help getting started, refer to &lt;a href=&quot;https://developers.cloudflare.com/log-explorer/&quot;&gt;our documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 18 Jun 2025 00:00:00 GMT</pubDate><product>Log Explorer</product><category>Log Explorer</category></item><item><title>Workers - Remote bindings public beta - Connect to remote resources (D1, KV, R2, etc.) during local development</title><link>https://developers.cloudflare.com/changelog/post/2025-06-18-remote-bindings-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-18-remote-bindings-beta/</guid><description>&lt;p&gt;Today &lt;a href=&quot;https://github.com/cloudflare/workers-sdk/discussions/9660&quot; target=&quot;_blank&quot;&gt;we announced the public beta&lt;/a&gt; of &lt;a href=&quot;https://developers.cloudflare.com/workers/development-testing/#remote-bindings&quot;&gt;remote bindings&lt;/a&gt; for local development. With remote bindings, you can now connect to deployed resources like &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;R2 buckets&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/d1/&quot;&gt;D1 databases&lt;/a&gt; while running Worker code on your local machine. This means you can test your local code changes against real data and services, without the overhead of deploying for each iteration.&lt;/p&gt;
&lt;h4&gt;Example configuration&lt;/h4&gt;
&lt;p&gt;To enable remote mode, add &lt;code&gt;&quot;experimental_remote&quot; : true&lt;/code&gt; to each binding that you want to rely on a remote resource running on Cloudflare:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-worker&quot;&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;// Set this to today&apos;s date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;compatibility_date&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2026-04-03&quot;&lt;/span&gt;&lt;span&gt;,&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;&quot;&lt;/span&gt;&lt;span&gt;r2_buckets&lt;/span&gt;&lt;span&gt;&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;bucket_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;screenshots-bucket&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;screenshots_bucket&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;experimental_remote&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-worker&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Set this to today&apos;s date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;compatibility_date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2026-04-03&quot;&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;r2_buckets&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;bucket_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;screenshots-bucket&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;screenshots_bucket&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;experimental_remote&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;When remote bindings are configured, your Worker &lt;strong&gt;still executes locally&lt;/strong&gt;, but all binding calls are proxied to the deployed resource that runs on Cloudflare&apos;s network.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You can try out remote bindings for local development today with:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/development-testing/#remote-bindings&quot;&gt;Wrangler v4.20.3&lt;/a&gt;: Use the &lt;code&gt;wrangler dev --x-remote-bindings&lt;/code&gt; command.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://developers.cloudflare.com/workers/development-testing/#remote-bindings&quot;&gt;Cloudflare Vite Plugin&lt;/a&gt;: Refer to the documentation for how to enable in your Vite config.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;https://developers.cloudflare.com/workers/development-testing/#remote-bindings&quot;&gt;Cloudflare Vitest Plugin&lt;/a&gt;: Refer to the documentation for how to enable in your Vitest config.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Have feedback?&lt;/strong&gt;
Join the discussion in our &lt;a href=&quot;https://github.com/cloudflare/workers-sdk/discussions/9660&quot; target=&quot;_blank&quot;&gt;beta announcement&lt;/a&gt; to share feedback or report any issues.&lt;/p&gt;</description><pubDate>Wed, 18 Jun 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.5.828.1)</title><link>https://developers.cloudflare.com/changelog/post/2025-06-17-warp-windows-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-17-warp-windows-beta/</guid><description>&lt;p&gt;A new Beta release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains new improvements in addition to the features and improvements introduced in Beta client version 2025.5.735.1.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improvement to better handle multi-user fast user switching.&lt;/li&gt;
&lt;li&gt;Fix for an issue causing WARP connectivity to fail without full system reboot.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Microsoft has confirmed a regression with Windows 11 starting around 24H2 that may cause performance issues for some users. These performance issues could manifest as mouse lag, audio cracking, or other slowdowns. A fix from Microsoft is expected in early July.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with &lt;code&gt;KB5055523&lt;/code&gt; installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.
To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 17 Jun 2025 12:04:39 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.5.828.1)</title><link>https://developers.cloudflare.com/changelog/post/2025-06-17-warp-macos-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-17-warp-macos-beta/</guid><description>&lt;p&gt;A new Beta release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains new improvements in addition to the features and improvements introduced in Beta client version 2025.5.735.1.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improvement for WARP connectivity issues on macOS due to the operating system not accepting DNS server configurations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS Sequoia: Due to changes Apple introduced in macOS 15.0.x, the WARP client may not behave as expected. Cloudflare recommends the use of macOS 15.4 or later.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 17 Jun 2025 12:04:39 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare Fundamentals, Terraform - Terraform v5.6.0 now available</title><link>https://developers.cloudflare.com/changelog/post/2025-06-17-terraform-v560-provider/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-17-terraform-v560-provider/</guid><description>&lt;p&gt;Earlier this year, we announced the launch of the new &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-02-03-terraform-v5-provider/&quot;&gt;Terraform v5 Provider&lt;/a&gt;.
Unlike the earlier Terraform providers, v5 is automatically generated based on the OpenAPI Schemas for our REST APIs. Since
launch, we have seen an unexpectedly high number of &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;issues&lt;/a&gt;
reported by customers. These issues currently impact about 15% of resources. We have been working diligently to address
these issues across the company, and have released the v5.6.0 release which includes a number of bug fixes. Please keep an
eye on this changelog for more information about upcoming releases.&lt;/p&gt;
&lt;h4&gt;Changes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Broad fixes across resources with recurring diffs, including, but not limited to:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zero_trust_access_identity_provider&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zone&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_page_rules&lt;/code&gt; runtime panic when setting &lt;code&gt;cache_level&lt;/code&gt; to &lt;code&gt;cache_ttl_by_status&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Failure to serialize requests in &lt;code&gt;cloudflare_zero_trust_tunnel_cloudflared_config&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Undocumented field &apos;priority&apos; on &lt;code&gt;zone_lockdown&lt;/code&gt; resource&lt;/li&gt;
&lt;li&gt;Missing importability for &lt;code&gt;cloudflare_zero_trust_device_default_profile_local_domain_fallback&lt;/code&gt; and &lt;code&gt;cloudflare_account_subscription&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;New resources:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cloudflare_schema_validation_operation_settings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_schema_validation_schemas&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_schema_validation_settings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zero_trust_device_settings&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Other bug fixes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a more detailed look at all of the changes, see the
&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/releases/tag/v5.6.0&quot; target=&quot;_blank&quot;&gt;changelog&lt;/a&gt; in GitHub.&lt;/p&gt;
&lt;h4&gt;Issues Closed&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5098&quot; target=&quot;_blank&quot;&gt;#5098: 500 Server Error on updating &apos;zero_trust_tunnel_cloudflared_virtual_network&apos; Terraform resource&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5148&quot; target=&quot;_blank&quot;&gt;#5148: cloudflare_user_agent_blocking_rule doesn’t actually support user agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5472&quot; target=&quot;_blank&quot;&gt;#5472: cloudflare_zone showing changes in plan after following upgrade steps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5508&quot; target=&quot;_blank&quot;&gt;#5508: cloudflare_zero_trust_tunnel_cloudflared_config failed to serialize http request&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5509&quot; target=&quot;_blank&quot;&gt;#5509: cloudflare_zone: Problematic Terraform behaviour with paused zones&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5520&quot; target=&quot;_blank&quot;&gt;#5520: Resource &apos;cloudflare_magic_wan_static_route&apos; is not working&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5524&quot; target=&quot;_blank&quot;&gt;#5524: Optional fields cause crash in cloudflare_zero_trust_tunnel_cloudflared(s) when left null&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5526&quot; target=&quot;_blank&quot;&gt;#5526: Provider v5 migration issue: no import method for cloudflare_zero_trust_device_default_profile_local_domain_fallback&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5532&quot; target=&quot;_blank&quot;&gt;#5532: cloudflare_zero_trust_access_identity_provider detects changes on every plan&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5561&quot; target=&quot;_blank&quot;&gt;#5561: cloudflare_zero_trust_tunnel_cloudflared: cannot rotate tunnel secret&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5569&quot; target=&quot;_blank&quot;&gt;#5569: cloudflare_zero_trust_device_custom_profile_local_domain_fallback not allowing multiple DNS Server entries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5577&quot; target=&quot;_blank&quot;&gt;#5577: Panic modifying page_rule resource&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5653&quot; target=&quot;_blank&quot;&gt;#5653: cloudflare_zone_setting resource schema confusion in 5.5.0: value vs enabled&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you have an unaddressed issue with the provider, we encourage you to check the
&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues&quot; target=&quot;_blank&quot;&gt;open issues&lt;/a&gt; and open a new one if one does not already
exist for what you are experiencing.&lt;/p&gt;
&lt;h4&gt;Upgrading&lt;/h4&gt;
&lt;p&gt;If you are evaluating a move from v4 to v5, please make use of the
&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/guides/version-5-upgrade&quot; target=&quot;_blank&quot;&gt;migration guide&lt;/a&gt;. We have
provided automated migration scripts using Grit which simplify the transition, although these do not support implementations which
use Terraform modules, so customers making use of modules need to migrate manually. Please make use of &lt;code&gt;terraform plan&lt;/code&gt; to test
your changes before applying, and let us know if you encounter any additional issues by reporting to our
&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;For more info&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;Terraform provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/terraform/&quot;&gt;Documentation on using Terraform with Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Terraform</category></item><item><title>Workers - Control which routes invoke your Worker script for Single Page Applications</title><link>https://developers.cloudflare.com/changelog/post/2025-06-17-advanced-routing/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-17-advanced-routing/</guid><description>&lt;p&gt;For those building &lt;a href=&quot;https://developers.cloudflare.com/workers/static-assets/routing/single-page-application/#advanced-routing-control&quot;&gt;Single Page Applications (SPAs) on Workers&lt;/a&gt;, you can now explicitly define which routes invoke your Worker script in Wrangler configuration. The &lt;a href=&quot;https://developers.cloudflare.com/workers/static-assets/binding/#run_worker_first&quot;&gt;&lt;code&gt;run_worker_first&lt;/code&gt; config option&lt;/a&gt; has now been expanded to accept an array of route patterns, allowing you to more granularly specify when your Worker script runs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Configuration example:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-spa-worker&quot;&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;// Set this to today&apos;s date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;compatibility_date&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2026-04-03&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./src/index.ts&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;assets&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;directory&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./dist/&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;not_found_handling&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;single-page-application&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ASSETS&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;run_worker_first&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;/api/*&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;!/api/docs/*&quot;&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my-spa-worker&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Set this to today&apos;s date&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;compatibility_date&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2026-04-03&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;main&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./src/index.ts&quot;&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;assets&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;directory&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;./dist/&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;not_found_handling&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;single-page-application&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;ASSETS&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;run_worker_first&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;span&gt; &lt;/span&gt;&lt;span&gt;&quot;/api/*&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;!/api/docs/*&quot;&lt;/span&gt;&lt;span&gt; &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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;This new routing control was done in partnership with our community and customers who provided great feedback on &lt;a href=&quot;https://github.com/cloudflare/workers-sdk/discussions/9143&quot; target=&quot;_blank&quot;&gt;our public proposal&lt;/a&gt;. Thank you to everyone who brought forward use-cases and feedback on the design!&lt;/p&gt;
&lt;h4&gt;Prerequisites&lt;/h4&gt;
&lt;p&gt;To use advanced routing control with &lt;code&gt;run_worker_first&lt;/code&gt;, you&apos;ll need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/install-and-update/&quot;&gt;Wrangler&lt;/a&gt; v4.20.0 and above&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/get-started/&quot;&gt;Cloudflare Vite plugin&lt;/a&gt; v1.7.0 and above&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - SSRF vulnerability in @opennextjs/cloudflare proactively mitigated for all Cloudflare customers</title><link>https://developers.cloudflare.com/changelog/post/2025-06-17-open-next-ssrf/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-17-open-next-ssrf/</guid><description>&lt;p&gt;Mitigations have been put in place for all existing and future deployments of sites with the Cloudflare adapter for Open Next in response to an identified Server-Side Request Forgery (SSRF) vulnerability in the &lt;code&gt;@opennextjs/cloudflare&lt;/code&gt; package.&lt;/p&gt;
&lt;p&gt;The vulnerability stemmed from an unimplemented feature in the Cloudflare adapter for Open Next, which allowed users to proxy arbitrary remote content via the &lt;code&gt;/_next/image&lt;/code&gt; endpoint.&lt;/p&gt;
&lt;p&gt;This issue allowed attackers to load remote resources from arbitrary hosts under the victim site&apos;s domain for any site deployed using the Cloudflare adapter for Open Next. For example: &lt;code&gt;https://victim-site.com/_next/image?url=https://attacker.com&lt;/code&gt;. In this example, attacker-controlled content from &lt;code&gt;attacker.com&lt;/code&gt; is served through the victim site&apos;s domain (&lt;code&gt;victim-site.com&lt;/code&gt;), violating the same-origin policy and potentially misleading users or other services.&lt;/p&gt;
&lt;p&gt;References: &lt;a href=&quot;https://www.cve.org/cverecord?id=CVE-2025-6087&quot; target=&quot;_blank&quot;&gt;https://www.cve.org/cverecord?id=CVE-2025-6087&lt;/a&gt;, &lt;a href=&quot;https://github.com/opennextjs/opennextjs-cloudflare/security/advisories/GHSA-rvpw-p7vw-wj3m&quot; target=&quot;_blank&quot;&gt;https://github.com/opennextjs/opennextjs-cloudflare/security/advisories/GHSA-rvpw-p7vw-wj3m&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;Impact&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;SSRF via unrestricted remote URL loading&lt;/li&gt;
&lt;li&gt;Arbitrary remote content loading&lt;/li&gt;
&lt;li&gt;Potential internal service exposure or phishing risks through domain abuse&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Mitigation&lt;/h4&gt;
&lt;p&gt;The following mitigations have been put in place:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Server side updates&lt;/strong&gt; to Cloudflare&apos;s platform to restrict the content loaded via the &lt;code&gt;/_next/image&lt;/code&gt; endpoint to images. The update automatically mitigates the issue for all existing and any future sites deployed to Cloudflare using the affected version of the Cloudflare adapter for Open Next&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Root cause fix:&lt;/strong&gt; Pull request &lt;a href=&quot;https://github.com/opennextjs/opennextjs-cloudflare/pull/727&quot; target=&quot;_blank&quot;&gt;#727&lt;/a&gt; to the Cloudflare adapter for Open Next. The patched version of the adapter has been released as &lt;code&gt;@opennextjs/cloudflare@1.3.0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Package dependency update:&lt;/strong&gt; Pull request &lt;a href=&quot;https://github.com/cloudflare/workers-sdk/pull/9608&quot; target=&quot;_blank&quot;&gt;cloudflare/workers-sdk#9608&lt;/a&gt; to create-cloudflare (c3) to use the fixed version of the Cloudflare adapter for Open Next. The patched version of create-cloudflare has been published as &lt;code&gt;create-cloudflare@2.49.3&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In addition to the automatic mitigation deployed on Cloudflare&apos;s platform, we encourage affected users to upgrade to &lt;code&gt;@opennext/cloudflare&lt;/code&gt; v1.3.0 and use the &lt;a href=&quot;https://nextjs.org/docs/pages/api-reference/components/image#remotepatterns&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;remotePatterns&lt;/code&gt;&lt;/a&gt; filter in Next config if they need to allow-list external urls with images assets.&lt;/p&gt;</description><pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>DNS - Internal DNS (beta) now manageable in the Cloudflare dashboard</title><link>https://developers.cloudflare.com/changelog/post/2025-06-16-internal-dns-beta-ui/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-16-internal-dns-beta-ui/</guid><description>&lt;p&gt;Participating beta testers can now fully configure &lt;a href=&quot;https://developers.cloudflare.com/dns/internal-dns/&quot;&gt;Internal DNS&lt;/a&gt; directly in the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/internal-dns&quot; target=&quot;_blank&quot;&gt;Cloudflare dashboard&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Internal DNS enables customers to:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Map internal hostnames to private IPs for services, devices, and applications not exposed to the public Internet&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Resolve internal DNS queries securely through &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/&quot;&gt;Cloudflare Gateway&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use split-horizon DNS to return different responses based on network context&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Consolidate internal and public DNS zones within a single management platform&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;What’s new in this release:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Beta participants can now create and manage internal zones and views in the Cloudflare dashboard&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/internal-dns-beta-ui.B5uCVZ9o_yVcqC.webp&quot; alt=&quot;Internal DNS UI&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;The Internal DNS beta is currently only available to Enterprise customers.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;To learn more and get started, refer to the &lt;a href=&quot;https://developers.cloudflare.com/dns/internal-dns/&quot;&gt;Internal DNS documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 16 Jun 2025 00:00:00 GMT</pubDate><product>DNS</product><category>DNS</category></item><item><title>WAF - WAF Release - 2025-06-16</title><link>https://developers.cloudflare.com/changelog/post/2025-06-16-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-16-waf-release/</guid><description>&lt;p&gt;This week’s roundup highlights multiple critical vulnerabilities across popular web frameworks, plugins, and enterprise platforms. The focus lies on remote code execution (RCE), server-side request forgery (SSRF), and insecure file upload vectors that enable full system compromise or data exfiltration.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cisco IOS XE (CVE-2025-20188): Critical RCE vulnerability enabling unauthenticated attackers to execute arbitrary commands on network infrastructure devices, risking total router compromise.&lt;/li&gt;
&lt;li&gt;Axios (CVE-2024-39338): SSRF flaw impacting server-side request control, allowing attackers to manipulate internal service requests when misconfigured with unsanitized user input.&lt;/li&gt;
&lt;li&gt;vBulletin (CVE-2025-48827, CVE-2025-48828): Two high-impact RCE flaws enabling attackers to remotely execute PHP code, compromising forum installations and underlying web servers.&lt;/li&gt;
&lt;li&gt;Invision Community (CVE-2025-47916): A critical RCE vulnerability allowing authenticated attackers to run arbitrary code in community platforms, threatening data and lateral movement risk.&lt;/li&gt;
&lt;li&gt;CrushFTP (CVE-2025-32102, CVE-2025-32103): SSRF vulnerabilities in upload endpoint processing permit attackers to pivot internal network scans and abuse internal services.&lt;/li&gt;
&lt;li&gt;Roundcube (CVE-2025-49113): RCE via email processing enables attackers to execute code upon viewing a crafted email — particularly dangerous for webmail deployments.&lt;/li&gt;
&lt;li&gt;WooCommerce WordPress Plugin (CVE-2025-47577): Dangerous file upload vulnerability permits unauthenticated users to upload executable payloads, leading to full WordPress site takeover.&lt;/li&gt;
&lt;li&gt;Cross-Site Scripting (XSS) Detection Improvements: Enhanced detection patterns.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These vulnerabilities span core systems — from routers to e-commerce to email. RCE in Cisco IOS XE, Roundcube, and vBulletin poses full system compromise. SSRF in Axios and CrushFTP supports internal pivoting, while WooCommerce’s file upload bug opens doors to mass WordPress exploitation.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;233bcf0ce50f400989a7e44a35fefd53 &lt;/td&gt;&lt;td&gt;100783&lt;/td&gt;&lt;td&gt;Cisco IOS XE - Remote Code Execution - CVE:CVE-2025-20188&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;9284e3b1586341acb4591bfd8332af5d &lt;/td&gt;&lt;td&gt;100784&lt;/td&gt;&lt;td&gt;Axios - SSRF - CVE:CVE-2024-39338&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;2672b175a25548aa8e0107b12e1648d2 &lt;/td&gt;&lt;td&gt;100785&lt;/td&gt;&lt;td&gt;&lt;p&gt;vBulletin - Remote Code Execution - CVE:CVE-2025-48827,
CVE:CVE-2025-48828&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;b77a19fb053744b49eacdab00edcf1ef &lt;/td&gt;&lt;td&gt;100786&lt;/td&gt;&lt;td&gt;Invision Community - Remote Code Execution - CVE:CVE-2025-47916&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;aec2274743064523a9667248d6f5eb48 &lt;/td&gt;&lt;td&gt;100791&lt;/td&gt;&lt;td&gt;CrushFTP - SSRF - CVE:CVE-2025-32102, CVE:CVE-2025-32103&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;7b80e1f5575d4d99bb7d56ae30baa18a &lt;/td&gt;&lt;td&gt;100792&lt;/td&gt;&lt;td&gt;Roundcube - Remote Code Execution - CVE:CVE-2025-49113&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;52d76f9394494b0382c7cb00229ba236 &lt;/td&gt;&lt;td&gt;100793&lt;/td&gt;&lt;td&gt;XSS - Ontoggle&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;d38e657bd43f4d809c28157dfa338296 &lt;/td&gt;&lt;td&gt;100794&lt;/td&gt;&lt;td&gt;&lt;p&gt;WordPress WooCommerce Plugin - Dangerous File Upload -
CVE:CVE-2025-47577&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 16 Jun 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Grant account members read-only access to the Workers Platform</title><link>https://developers.cloudflare.com/changelog/post/2025-06-16-workers-platform-admin-role/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-16-workers-platform-admin-role/</guid><description>&lt;p&gt;You can now grant members of your Cloudflare account read-only access to the Workers
Platform.&lt;/p&gt;
&lt;p&gt;The new &quot;Workers Platform (Read-only)&quot; role grants read-only access to all products typically used as part of Cloudflare&apos;s Developer Platform, including &lt;a href=&quot;https://developers.cloudflare.com/workers/&quot;&gt;Workers&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/pages/&quot;&gt;Pages&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/&quot;&gt;Durable Objects&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/kv/&quot;&gt;KV&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;R2&lt;/a&gt;, Zones, &lt;a href=&quot;https://developers.cloudflare.com/analytics/account-and-zone-analytics/zone-analytics/&quot;&gt;Zone Analytics&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/rules/&quot;&gt;Page Rules&lt;/a&gt;. When Cloudflare introduces new products to the Workers platform, we will add additional read-only permissions to this role.&lt;/p&gt;
&lt;p&gt;Additionally, the role previously named &quot;Workers Admin&quot; has been renamed to &quot;Workers Platform Admin&quot;. This
change ensures that the name more accurately reflects the permissions granted — this
role has always granted access to more than just
Workers — it grants read and write access to the products mentioned above, and similarly, as new products are added to the Workers platform, we will add additional read and write permissions to this role.&lt;/p&gt;
&lt;p&gt;You can review the updated roles in the &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/manage-members/roles/&quot;&gt;developer docs&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 16 Jun 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>DNS - NSEC3 support for DNSSEC</title><link>https://developers.cloudflare.com/changelog/post/2025-06-11-nsec3-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-11-nsec3-support/</guid><description>&lt;p&gt;Enterprise customers can now select NSEC3 as method for proof of non-existence on their zones.&lt;/p&gt;
&lt;p&gt;What&apos;s new:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NSEC3 support for live-signed zones&lt;/strong&gt; – For both primary and secondary zones that are configured to be live-signed (also known as &quot;on-the-fly signing&quot;), NSEC3 can now be selected as proof of non-existence.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NSEC3 support for pre-signed zones&lt;/strong&gt; – Secondary zones that are transferred to Cloudflare in a &lt;a href=&quot;https://developers.cloudflare.com/dns/zone-setups/zone-transfers/cloudflare-as-secondary/dnssec-for-secondary/#set-up-pre-signed-dnssec&quot;&gt;pre-signed setup&lt;/a&gt; now also support NSEC3 as proof of non-existence.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information and how to enable NSEC3, refer to the &lt;a href=&quot;https://developers.cloudflare.com/dns/dnssec/enable-nsec3/&quot;&gt;NSEC3 documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 11 Jun 2025 00:00:00 GMT</pubDate><product>DNS</product><category>DNS</category></item><item><title>Stream - Increased limits for Media Transformations</title><link>https://developers.cloudflare.com/changelog/post/2025-06-10-media-transformations-limits-increase/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-10-media-transformations-limits-increase/</guid><description>&lt;p&gt;We have increased the limits for &lt;a href=&quot;https://developers.cloudflare.com/stream/transform-videos/&quot;&gt;Media Transformations&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Input file size limit is now 100MB (was 40MB)&lt;/li&gt;
&lt;li&gt;Output video duration limit is now 1 minute (was 30 seconds)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additionally, we have improved caching of the input asset, resulting in fewer
requests to origin storage even when transformation options may differ.&lt;/p&gt;
&lt;p&gt;For more information, learn about &lt;a href=&quot;https://developers.cloudflare.com/stream/transform-videos/&quot;&gt;Transforming Videos&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 10 Jun 2025 00:00:00 GMT</pubDate><product>Stream</product><category>Stream</category></item><item><title>Workers - Access git commit sha and branch name as environment variables in Workers Builds</title><link>https://developers.cloudflare.com/changelog/post/2025-06-10-default-env-vars/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-10-default-env-vars/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/&quot;&gt;Workers Builds&lt;/a&gt; connects your Worker to a &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/git-integration/&quot;&gt;Git repository&lt;/a&gt;, and automates building and deploying your code on each pushed change.&lt;/p&gt;
&lt;p&gt;To make CI/CD pipelines even more flexible, Workers Builds now automatically injects &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/configuration/#environment-variables&quot;&gt;default environment variables&lt;/a&gt; into your build process (much like the defaults in &lt;a href=&quot;https://developers.cloudflare.com/pages/configuration/build-configuration/#environment-variables&quot;&gt;Cloudflare Pages projects&lt;/a&gt;). You can use these variables to customize your build process based on the deployment context, such as the branch or commit.&lt;/p&gt;
&lt;p&gt;The following environment variables are injected by default:&lt;/p&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Environment Variable&lt;/th&gt;&lt;th&gt;Injected value&lt;/th&gt;&lt;th&gt;Example use-case&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;CI&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;true&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Changing build behavior when run on CI versus locally&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;WORKERS_CI&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Changing build behavior when run on Workers Builds versus locally&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;WORKERS_CI_BUILD_UUID&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;#x3C;build-uuid-of-current-build&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Passing the Build UUID along to custom workflows&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;WORKERS_CI_COMMIT_SHA&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;#x3C;sha1-hash-of-current-commit&gt;&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Passing current commit ID to error reporting, for example, Sentry&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;WORKERS_CI_BRANCH&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;&amp;#x3C;branch-name-from-push-event&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Customizing build based on branch, for example, disabling debug logging on &lt;code&gt;production&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;You can override these default values and add your own custom environment variables by navigating to &lt;strong&gt;your Worker&lt;/strong&gt; &gt; &lt;strong&gt;Settings&lt;/strong&gt; &gt; &lt;strong&gt;Environment variables&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Learn more in the &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/configuration/#environment-variables&quot;&gt;Build configuration documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 10 Jun 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Rules - More flexible fallback handling — Custom Errors now support fetching assets returned with 4xx or 5xx status codes</title><link>https://developers.cloudflare.com/changelog/post/2025-06-09-custom-errors-fetch-4xx-5xx-assets/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-09-custom-errors-fetch-4xx-5xx-assets/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/rules/custom-errors/&quot;&gt;Custom Errors&lt;/a&gt; can now fetch and store &lt;a href=&quot;https://developers.cloudflare.com/rules/custom-errors/create-rules/#create-a-custom-error-asset-dashboard&quot;&gt;assets&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/rules/custom-errors/#error-pages&quot;&gt;error pages&lt;/a&gt; from your origin even if they are served with a 4xx or 5xx HTTP status code — previously, only 200 OK responses were allowed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What’s new:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now upload error pages and error assets that return error status codes (for example, 403, 500, 502, 503, 504) when fetched.&lt;/li&gt;
&lt;li&gt;These assets are stored and minified at the edge, so they can be reused across multiple Custom Error rules without triggering requests to the origin.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is especially useful for retrieving error content or downtime banners from your backend when you can’t override the origin status code.&lt;/p&gt;
&lt;p&gt;Learn more in the &lt;a href=&quot;https://developers.cloudflare.com/rules/custom-errors/&quot;&gt;Custom Errors&lt;/a&gt; documentation.&lt;/p&gt;</description><pubDate>Mon, 09 Jun 2025 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Rules - Match Workers subrequests by upstream zone — cf.worker.upstream_zone now supported in Transform Rules</title><link>https://developers.cloudflare.com/changelog/post/2025-06-09-transform-rule-subrequest-matching/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-09-transform-rule-subrequest-matching/</guid><description>&lt;p&gt;You can now use the &lt;a href=&quot;https://developers.cloudflare.com/ruleset-engine/rules-language/fields/reference/cf.worker.upstream_zone/&quot;&gt;&lt;code&gt;cf.worker.upstream_zone&lt;/code&gt;&lt;/a&gt; field in &lt;a href=&quot;https://developers.cloudflare.com/rules/transform/&quot;&gt;Transform Rules&lt;/a&gt; to control rule execution based on whether a request originates from &lt;a href=&quot;https://developers.cloudflare.com/workers/&quot;&gt;Workers&lt;/a&gt;, including subrequests issued by Workers in other zones.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/transform-rule-subrequest-matching.BeUBEN67_wWefn.webp&quot; alt=&quot;Match Workers subrequests by upstream zone in Transform Rules&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;strong&gt;What&apos;s new:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cf.worker.upstream_zone&lt;/code&gt; is now supported in Transform Rules expressions.&lt;/li&gt;
&lt;li&gt;Skip or apply logic conditionally when handling &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/limits/#subrequests&quot;&gt;Workers subrequests&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, to add a header when the subrequest comes from another zone:&lt;/p&gt;
&lt;article&gt; &lt;p&gt;  &lt;span&gt;&lt;/span&gt; &lt;/p&gt; &lt;div&gt; &lt;p&gt;Text in &lt;strong&gt;Expression Editor&lt;/strong&gt; (replace &lt;code&gt;myappexample.com&lt;/code&gt; with your domain):&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(cf.worker.upstream_zone != &quot;&quot; and cf.worker.upstream_zone != &quot;myappexample.com&quot;)&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;Selected operation under &lt;strong&gt;Modify request header&lt;/strong&gt;: &lt;em&gt;Set static&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Header name&lt;/strong&gt;: &lt;code&gt;X-External-Workers-Subrequest&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Value&lt;/strong&gt;: &lt;code&gt;1&lt;/code&gt;&lt;/p&gt; &lt;/div&gt; &lt;/article&gt; 
&lt;p&gt;This gives you more granular control in how you handle incoming requests for your zone.&lt;/p&gt;
&lt;p&gt;Learn more in the &lt;a href=&quot;https://developers.cloudflare.com/rules/transform/&quot;&gt;Transform Rules&lt;/a&gt; documentation and &lt;a href=&quot;https://developers.cloudflare.com/ruleset-engine/rules-language/fields/reference/&quot;&gt;Rules language fields&lt;/a&gt; reference.&lt;/p&gt;</description><pubDate>Mon, 09 Jun 2025 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>WAF - WAF Release - 2025-06-09</title><link>https://developers.cloudflare.com/changelog/post/2025-06-09-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-09-waf-release/</guid><description>&lt;p&gt;This week’s update spotlights four critical vulnerabilities across CMS platforms, VoIP systems, and enterprise applications. Several flaws enable remote code execution or privilege escalation, posing significant enterprise risks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WordPress OttoKit Plugin (CVE-2025-27007): Privilege escalation flaw allows unauthenticated attackers to create or elevate user accounts, compromising WordPress administrative control.&lt;/li&gt;
&lt;li&gt;SAP NetWeaver (CVE-2025-42999): Remote Code Execution vulnerability enables attackers to execute arbitrary code on SAP NetWeaver systems, threatening core ERP and business operations.&lt;/li&gt;
&lt;li&gt;Fortinet FortiVoice (CVE-2025-32756): Buffer error vulnerability may lead to memory corruption and potential code execution, directly impacting enterprise VoIP infrastructure.&lt;/li&gt;
&lt;li&gt;Camaleon CMS (CVE-2024-46986): Remote Code Execution vulnerability allows attackers to gain full control over Camaleon CMS installations, exposing hosted content and underlying servers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These vulnerabilities target widely deployed CMS, ERP, and VoIP systems. RCE flaws in SAP NetWeaver and Camaleon CMS allow full takeover of business-critical applications. Privilege escalation in OttoKit exposes WordPress environments to full administrative compromise. FortiVoice buffer handling issues risk destabilizing or fully compromising enterprise telephony systems.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;4afd50a3ef1948bba87c4e620debd86e &lt;/td&gt;&lt;td&gt;100769&lt;/td&gt;&lt;td&gt;&lt;p&gt;WordPress OttoKit Plugin - Privilege Escalation - CVE:CVE-2025-27007&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;24134c41c3e940daa973b4b95f57b448 &lt;/td&gt;&lt;td&gt;100770&lt;/td&gt;&lt;td&gt;SAP NetWeaver - Remote Code Execution - CVE:CVE-2025-42999&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;4f219ac0be3545a5be5f0bf34df8857a &lt;/td&gt;&lt;td&gt;100779&lt;/td&gt;&lt;td&gt;Fortinet FortiVoice - Buffer Error - CVE:CVE-2025-32756&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;bc8dfbe8cbac4c039725ec743b840107 &lt;/td&gt;&lt;td&gt;100780&lt;/td&gt;&lt;td&gt;Camaleon CMS - Remote Code Execution - CVE:CVE-2024-46986&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 09 Jun 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Workers native integrations were removed from the Cloudflare dashboard</title><link>https://developers.cloudflare.com/changelog/post/2025-06-09-workers-integrations-changes/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-09-workers-integrations-changes/</guid><description>&lt;p&gt;Workers native integrations were &lt;a href=&quot;https://blog.cloudflare.com/announcing-database-integrations/&quot; target=&quot;_blank&quot;&gt;originally launched in May 2023&lt;/a&gt; to connect to popular database and observability providers with your Worker in just a few clicks. We are changing how developers connect Workers to these external services. The &lt;strong&gt;Integrations&lt;/strong&gt; tab in the dashboard has been removed in favor of a more direct, command-line-based approach using &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/commands/general/#secret&quot;&gt;Wrangler secrets&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;What&apos;s changed&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Integrations tab removed&lt;/strong&gt;: The integrations setup flow is no longer available in the Workers dashboard.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manual secret configuration&lt;/strong&gt;: New connections should be configured by adding credentials as secrets to your Workers using &lt;code&gt;npx wrangler secret put&lt;/code&gt; commands.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Impact on existing integrations&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Existing integrations will continue to work without any changes required.&lt;/strong&gt; If you have integrations that were previously created through the dashboard, they will remain functional.&lt;/p&gt;
&lt;h4&gt;Updating existing integrations&lt;/h4&gt;
&lt;p&gt;If you&apos;d like to modify your existing integration, you can update the secrets, environment variables, or &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/logs/tail-workers/&quot;&gt;Tail Workers&lt;/a&gt; that were created from the original integration setup.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Update secrets&lt;/strong&gt;: Use &lt;code&gt;npx wrangler secret put &amp;#x3C;SECRET_NAME&gt;&lt;/code&gt; to update credential values.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modify environment variables&lt;/strong&gt;: Update variables through the dashboard or Wrangler configuration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dashboard management&lt;/strong&gt;: Access your Worker&apos;s settings in the &lt;a href=&quot;https://dash.cloudflare.com&quot; target=&quot;_blank&quot;&gt;Cloudflare dashboard&lt;/a&gt; to modify connections created by our removed native integrations feature.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you have previously set up an observability integration with &lt;a href=&quot;https://sentry.io&quot; target=&quot;_blank&quot;&gt;Sentry&lt;/a&gt;, the following environment variables were set and are still modifiable:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;BLOCKED_HEADERS&lt;/code&gt;: headers to exclude sending to Sentry&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EXCEPTION_SAMPLING_RATE&lt;/code&gt;: number from 0 - 100, where 0 = no events go through to Sentry, and 100 = all events go through to Sentry&lt;/li&gt;
&lt;li&gt;&lt;code&gt;STATUS_CODES_TO_SAMPLING_RATES&lt;/code&gt;: a map of status codes -- like 400 or with wildcards like 4xx -- to sampling rates described above&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Setting up new database and observability connections&lt;/h4&gt;
&lt;p&gt;For new connections, refer to our step-by-step guides on connecting to popular database and observability providers including: &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/third-party-integrations/sentry&quot;&gt;Sentry&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers/databases/third-party-integrations/turso/&quot;&gt;Turso&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers/databases/third-party-integrations/neon/&quot;&gt;Neon&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers/databases/third-party-integrations/supabase/&quot;&gt;Supabase&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers/databases/third-party-integrations/planetscale/&quot;&gt;PlanetScale&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers/databases/third-party-integrations/upstash/&quot;&gt;Upstash&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers/databases/third-party-integrations/xata/&quot;&gt;Xata&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 09 Jun 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.5.735.1)</title><link>https://developers.cloudflare.com/changelog/post/2025-06-05-warp-windows-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-05-warp-windows-beta/</guid><description>&lt;p&gt;A new Beta release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains improvements and new exciting features, including &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#sccm-vpn-boundary-support&quot;&gt;SCCM VPN boundary support&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#enable_post_quantum&quot;&gt;post-quantum cryptography&lt;/a&gt;. By tunneling your corporate network traffic over Cloudflare, you can now gain the immediate protection of post-quantum cryptography without needing to upgrade any of your individual corporate applications or systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed a device registration issue causing WARP connection failures when changing networks.&lt;/li&gt;
&lt;li&gt;Captive portal improvements including showing connectivity status in the client and sending system notifications for captive portal sign in.&lt;/li&gt;
&lt;li&gt;Fixed a bug where in Gateway with DoH mode, connection to DNS servers was not automatically restored after reconnecting WARP.&lt;/li&gt;
&lt;li&gt;The WARP client now applies post-quantum cryptography end-to-end on enabled devices accessing resources behind a Cloudflare Tunnel. This feature can be &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#enable_post_quantum&quot;&gt;enabled by MDM&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Improvement to gracefully handle changes made by MDM while WARP is not running.&lt;/li&gt;
&lt;li&gt;Improvement for multi-user mode to avoid unnecessary key rotations when transitioning from a pre-login to a logged-in state.&lt;/li&gt;
&lt;li&gt;Added a WARP client device posture check for SAN attributes to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/reusable-components/posture-checks/warp-client-checks/client-certificate/&quot;&gt;client certificate check&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Fixed an issue affecting Split Tunnel Include mode, where traffic outside the tunnel was blocked when switching between Wi-Fi and Ethernet networks.&lt;/li&gt;
&lt;li&gt;Added &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#sccm-vpn-boundary-support&quot;&gt;SCCM VPN boundary support&lt;/a&gt; to device profile settings. With SCCM VPN boundary support enabled, operating systems will register WARP&apos;s local interface IP with the on-premise DNS server when reachable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Microsoft has confirmed a regression with Windows 11 starting around 24H2 that may cause performance issues for some users. These performance issues could manifest as mouse lag, audio cracking, or other slowdowns. A fix from Microsoft is expected in early July.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with &lt;code&gt;KB5055523&lt;/code&gt; installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.
To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 05 Jun 2025 20:38:05 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.5.735.1)</title><link>https://developers.cloudflare.com/changelog/post/2025-06-05-warp-macos-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-05-warp-macos-beta/</guid><description>&lt;p&gt;A new Beta release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains improvements and new exciting features, including &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#enable_post_quantum&quot;&gt;post-quantum cryptography&lt;/a&gt;. By tunneling your corporate network traffic over Cloudflare, you can now gain the immediate protection of post-quantum cryptography without needing to upgrade any of your individual corporate applications or systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue where the Cloudflare WARP application may not have automatically relaunched after an update.&lt;/li&gt;
&lt;li&gt;Fixed a device registration issue causing WARP connection failures when changing networks.&lt;/li&gt;
&lt;li&gt;Captive portal improvements including showing connectivity status in the client and sending system notifications for captive portal sign in.&lt;/li&gt;
&lt;li&gt;The WARP client now applies post-quantum cryptography end-to-end on enabled devices accessing resources behind a Cloudflare Tunnel. This feature can be &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/mdm-deployment/parameters/#enable_post_quantum&quot;&gt;enabled by MDM&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Improvement to gracefully handle changes made by MDM while WARP is not running.&lt;/li&gt;
&lt;li&gt;Fixed an issue affecting Split Tunnel Include mode, where traffic outside the tunnel was blocked when switching between Wi-Fi and Ethernet networks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS Sequoia: Due to changes Apple introduced in macOS 15.0.x, the WARP client may not behave as expected. Cloudflare recommends the use of macOS 15.4 or later.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 05 Jun 2025 20:38:04 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Workers - Performance and size optimization for the Cloudflare adapter for Open Next</title><link>https://developers.cloudflare.com/changelog/post/2025-06-05-open-next-size/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-05-open-next-size/</guid><description>&lt;p&gt;With the release of the Cloudflare adapter for Open Next v1.0.0 in May 2025, we already had followups plans &lt;a href=&quot;https://blog.cloudflare.com/deploying-nextjs-apps-to-cloudflare-workers-with-the-opennext-adapter/#1-0-and-the-road-ahead&quot; target=&quot;_blank&quot;&gt;to improve performance and size&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;@opennextjs/cloudflare&lt;/code&gt; v1.2 released on June 5, 2025 delivers on these enhancements. By removing &lt;code&gt;babel&lt;/code&gt; from the app code and dropping a dependency on &lt;code&gt;@ampproject/toolbox-optimizer&lt;/code&gt;, we were able to reduce generated bundle sizes. Additionally, by stopping preloading of all app routes, we were able to improve the cold start time.&lt;/p&gt;
&lt;p&gt;This means that users will now see a decrease from 14 to 8MiB (2.3 to 1.6MiB gzipped) in generated bundle size for a Next app created via create-next-app, and typically 100ms faster startup times for their medium-sized apps.&lt;/p&gt;
&lt;p&gt;Users only need to update to the latest version of &lt;code&gt;@opennextjs/cloudflare&lt;/code&gt; to automatically benefit from these improvements.&lt;/p&gt;
&lt;p&gt;Note that we published &lt;a href=&quot;https://github.com/opennextjs/opennextjs-cloudflare/security/advisories/GHSA-rvpw-p7vw-wj3m&quot; target=&quot;_blank&quot;&gt;CVE-2005-6087&lt;/a&gt; for a SSRF vulnerability in the &lt;code&gt;@opennextjs/cloudflare&lt;/code&gt; package.
The vulnerability has been fixed from &lt;code&gt;@opennextjs/cloudflare&lt;/code&gt; v1.3.0 onwards. Please update to any version after this one.&lt;/p&gt;</description><pubDate>Thu, 05 Jun 2025 19:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Access, Cloudflare One - Cloudflare One Analytics Dashboards and Exportable Access Report</title><link>https://developers.cloudflare.com/changelog/post/dashboards-access-report/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/dashboards-access-report/</guid><description>&lt;p&gt;Cloudflare One now offers powerful new analytics dashboards to help customers easily discover available insights into their application access and network activity. These dashboards provide a centralized, intuitive view for understanding user behavior, application usage, and security posture.&lt;/p&gt;
&lt;p&gt;![Cloudflare One Analytics Dashboards](~/assets/images/changelog/cloudflare-one/Analytics Dashboards.png)&lt;/p&gt;
&lt;p&gt;Additionally, a new exportable access report is available, allowing customers to quickly view high-level metrics and trends in their application access. A &lt;strong&gt;preview&lt;/strong&gt; of the report is shown below, with more to be found in the report:&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/access-report.C744W7JR_2uzMcN.webp&quot; alt=&quot;Cloudflare One Analytics Dashboards&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Both features are accessible in the Cloudflare &lt;a href=&quot;https://one.dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Zero Trust dashboard&lt;/a&gt;, empowering organizations with better visibility and control.&lt;/p&gt;</description><pubDate>Thu, 05 Jun 2025 00:00:00 GMT</pubDate><product>Access</product><category>Access</category><category>Cloudflare One</category></item><item><title>Load Balancing - New Account-Level Load Balancing UI and Private Load Balancers</title><link>https://developers.cloudflare.com/changelog/post/2025-06-04-account-load-balancing-ui/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-04-account-load-balancing-ui/</guid><description>&lt;p&gt;We&apos;ve made two large changes to load balancing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Redesigned the user interface, now centralized at the &lt;strong&gt;account level&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Introduced &lt;a href=&quot;https://developers.cloudflare.com/load-balancing/private-network/&quot;&gt;&lt;strong&gt;Private Load Balancers&lt;/strong&gt;&lt;/a&gt; to the UI, enabling you to manage traffic for all of your external and internal applications in a single spot.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This update streamlines how you manage load balancers across multiple zones and extends robust traffic management to your private network infrastructure.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/account-load-balancing-ui.CoCi7gPb_Z2rDoCY.webp&quot; alt=&quot;Load Balancing UI&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;strong&gt;Key Enhancements:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Account-Level UI Consolidation:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Unified Management:&lt;/strong&gt; Say goodbye to navigating individual zones for load balancing tasks. You can now view, configure, and monitor all your load balancers across every zone in your account from a single, intuitive interface at the account level.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Improved Efficiency:&lt;/strong&gt; This centralized approach provides a more streamlined workflow, making it faster and easier to manage both your public-facing and internal traffic distribution.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Private Network Load Balancing:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Secure Internal Application Access:&lt;/strong&gt; Create &lt;a href=&quot;https://developers.cloudflare.com/load-balancing/private-network/&quot;&gt;&lt;strong&gt;Private Load Balancers&lt;/strong&gt;&lt;/a&gt; to distribute traffic to applications hosted within your private network, ensuring they are not exposed to the public Internet.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;WARP &amp;#x26; Magic WAN Integration:&lt;/strong&gt; Effortlessly direct internal traffic from users connected via Cloudflare WARP or through your Magic WAN infrastructure to the appropriate internal endpoint pools.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Enhanced Security for Internal Resources:&lt;/strong&gt; Combine reliable Load Balancing with Zero Trust access controls to ensure your internal services are both performant and only accessible by verified users.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/private-load-balancer.yti20m_p_q5zIk.webp&quot; alt=&quot;Private Load Balancers&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Wed, 04 Jun 2025 00:00:00 GMT</pubDate><product>Load Balancing</product><category>Load Balancing</category></item><item><title>AI Gateway - AI Gateway adds OpenAI compatible endpoint</title><link>https://developers.cloudflare.com/changelog/post/2025-06-03-aig-openai-compatible-endpoint/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-03-aig-openai-compatible-endpoint/</guid><description>&lt;p&gt;Users can now use an &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/chat-completion/&quot;&gt;OpenAI Compatible endpoint&lt;/a&gt; in AI Gateway to easily switch between providers, while keeping the exact same request and response formats. We&apos;re launching now with the chat completions endpoint, with the embeddings endpoint coming up next.&lt;/p&gt;
&lt;p&gt;To get started, use the OpenAI compatible chat completions endpoint URL with your own account id and gateway id and switch between providers by changing the &lt;code&gt;model&lt;/code&gt; and &lt;code&gt;apiKey&lt;/code&gt; parameters.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;OpenAI&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;openai&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OpenAI&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;apiKey&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;YOUR_PROVIDER_API_KEY&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// Provider API key&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;baseURL&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;&quot;https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/compat&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;chat&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;completions&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;{&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;model&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;google-ai-studio/gemini-2.0-flash&quot;&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;messages&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; role&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;What is Cloudflare?&quot;&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;;&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;choices&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;)&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;Additionally, the &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/chat-completion/&quot;&gt;OpenAI Compatible endpoint&lt;/a&gt; can be combined with our &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/universal/&quot;&gt;Universal Endpoint&lt;/a&gt; to add fallbacks across multiple providers. That means AI Gateway will return every response in the same standardized format, no extra parsing logic required!&lt;/p&gt;
&lt;p&gt;Learn more in the &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/chat-completion/&quot;&gt;OpenAI Compatibility&lt;/a&gt; documentation.&lt;/p&gt;</description><pubDate>Tue, 03 Jun 2025 00:00:00 GMT</pubDate><product>AI Gateway</product><category>AI Gateway</category></item><item><title>DNS - Improved onboarding for Shopify merchants</title><link>https://developers.cloudflare.com/changelog/post/2025-06-03-shopify-o2o-improvements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-03-shopify-o2o-improvements/</guid><description>&lt;p&gt;Shopify merchants can now onboard to &lt;strong&gt;O2O&lt;/strong&gt; automatically, without needing to contact support or community members.&lt;/p&gt;
&lt;p&gt;What&apos;s new:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Automatic enablement&lt;/strong&gt; – O2O is available for all mutual Cloudflare and Shopify customers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Branded record display&lt;/strong&gt; – Merchants see a Shopify logo in DNS records, complete with helpful tooltips.&lt;/p&gt;
&lt;p&gt;&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/shop-dns-icon-o2o.Ca5DAZHL_1weoif.webp&quot; alt=&quot;Shopify O2O logo&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Checkout protection&lt;/strong&gt; – Workers and Snippets are blocked from running on the checkout path to reduce risk and improve security.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/provider-guides/shopify/&quot;&gt;provider guide&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 03 Jun 2025 00:00:00 GMT</pubDate><product>DNS</product><category>DNS</category></item><item><title>Workers - View an architecture diagram of your Worker directly in the Cloudflare dashboard</title><link>https://developers.cloudflare.com/changelog/post/2025-06-03-visualize-your-worker-architecture/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-03-visualize-your-worker-architecture/</guid><description>&lt;p&gt;You can now visualize, explore and modify your Worker’s architecture directly in the Cloudflare dashboard, making it easier to understand how your application connects to Cloudflare resources like &lt;a href=&quot;https://developers.cloudflare.com/d1&quot;&gt;D1 databases&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/durable-objects&quot;&gt;Durable Objects&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/kv&quot;&gt;KV namespaces&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/&quot;&gt;more&lt;/a&gt;.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/bindings-canvas.CszRUVlh_1ytnrB.webp&quot; alt=&quot;Bindings canvas&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;With this new view, you can easily:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explore existing bindings in a visual, architecture-style diagram&lt;/li&gt;
&lt;li&gt;Add and manage bindings directly from the same interface&lt;/li&gt;
&lt;li&gt;Discover the full range of compute, storage, AI, and media resources you can attach to your Workers application.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get started, head to the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers-and-pages&quot; target=&quot;_blank&quot;&gt;Cloudflare dashboard&lt;/a&gt; and open the &lt;strong&gt;Bindings&lt;/strong&gt; tab of any Workers application.&lt;/p&gt;</description><pubDate>Tue, 03 Jun 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare Fundamentals - Cloudflare User Groups &amp; Enhanced Permission Policies are now in Beta</title><link>https://developers.cloudflare.com/changelog/post/2025-06-02-user-groups-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-02-user-groups-beta/</guid><description>&lt;p&gt;We&apos;re excited to announce the Public Beta launch of &lt;strong&gt;User Groups for Cloudflare Dashboard&lt;/strong&gt; and &lt;strong&gt;System for Cross Domain Identity Management (SCIM) User Groups&lt;/strong&gt;, expanding our RBAC capabilities to simplify user and group management at scale.&lt;/p&gt;
&lt;p&gt;We&apos;ve also visually overhauled the &lt;strong&gt;Permission Policies UI&lt;/strong&gt; to make defining permissions more intuitive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What&apos;s New&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;User Groups [BETA]&lt;/strong&gt;: &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/manage-members/user-groups/&quot;&gt;User Groups&lt;/a&gt; are a new Cloudflare IAM primitive that enable administrators to create collections of account members that are treated equally from an access control perspective. User Groups can be assigned permission policies, with individual members in the group inheriting all permissions granted to the User Group. User Groups can be created manually or via our APIs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SCIM User Groups [BETA]&lt;/strong&gt;: Centralize &amp;#x26; simplify your user and group management at scale by syncing memberships directly from your upstream identity provider (like Okta or Entra ID) to the Cloudflare Platform. This ensures Cloudflare stays in sync with your identity provider, letting you apply Permission Policies to those synced groups directly within the Cloudflare Dashboard.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;SCIM Virtual Groups (identified by the pattern &lt;code&gt;CF-&amp;#x3C;accountID&gt;-&amp;#x3C;Role Name&gt;&lt;/code&gt; in your IdP) are deprecated as of 06/02/25. We recommend migrating SCIM Virtual Groups implementations to use &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/account/account-security/scim-setup/&quot;&gt;SCIM User Groups&lt;/a&gt;. If you did not use Virtual Groups, no action is needed.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;&lt;strong&gt;Revamped Permission Policies UI [BETA]&lt;/strong&gt;: As Cloudflare&apos;s services have grown, so has the need for precise, role-based access control. We&apos;ve given the Permission Policies builder a visual overhaul to make it much easier for administrators to find and define the exact permissions they want for specific principals.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-06-02-permissions-policy-ux.2wLEPgVX_7gPgJ.webp&quot; alt=&quot;Updated Permissions Policy UX&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;When opting into the Beta for User Groups and Permission Policies, you&apos;ll be transitioning to a new experience. Please be aware that opting out isn&apos;t currently available.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;For more info:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/manage-members/user-groups/&quot;&gt;Get started with User Groups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/account/account-security/scim-setup/&quot;&gt;Explore our SCIM integration guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 02 Jun 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>WAF - WAF Release - 2025-06-02</title><link>https://developers.cloudflare.com/changelog/post/2025-06-02-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-06-02-waf-release/</guid><description>&lt;p&gt;This week’s roundup highlights five high-risk vulnerabilities affecting SD-WAN, load balancers, and AI platforms. Several flaws enable unauthenticated remote code execution or authentication bypass.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Versa Concerto SD-WAN (CVE-2025-34026, CVE-2025-34027): Authentication bypass vulnerabilities allow attackers to gain unauthorized access to SD-WAN management interfaces, compromising network segmentation and control.&lt;/li&gt;
&lt;li&gt;Kemp LoadMaster (CVE-2024-7591): Remote Code Execution vulnerability enables attackers to execute arbitrary commands, potentially leading to full device compromise within enterprise load balancing environments.&lt;/li&gt;
&lt;li&gt;AnythingLLM (CVE-2024-0759): Server-Side Request Forgery (SSRF) flaw allows external attackers to force the LLM backend to make unauthorized internal network requests, potentially exposing sensitive internal resources.&lt;/li&gt;
&lt;li&gt;Anyscale Ray (CVE-2023-48022): Remote Code Execution vulnerability affecting distributed AI workloads, allowing attackers to execute arbitrary code on Ray cluster nodes.&lt;/li&gt;
&lt;li&gt;Server-Side Request Forgery (SSRF) - Generic &amp;#x26; Obfuscated Payloads: Ongoing advancements in SSRF payload techniques observed, including obfuscation and expanded targeting of cloud metadata services and internal IP ranges.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These vulnerabilities expose critical infrastructure across networking, AI platforms, and SaaS integrations. Unauthenticated RCE and auth bypass flaws in Versa Concerto, Kemp LoadMaster, and Anyscale Ray allow full system compromise. AnythingLLM and SSRF payload variants expand attack surfaces into internal cloud resources, sensitive APIs, and metadata services, increasing risk of privilege escalation, data theft, and persistent access.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;752cfb5e6f9c46f0953c742139b52f02 &lt;/td&gt;&lt;td&gt;100764&lt;/td&gt;&lt;td&gt;Versa Concerto SD-WAN - Auth Bypass - CVE:CVE-2025-34027&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;a01171de18034901b48a5549a34edb97 &lt;/td&gt;&lt;td&gt;100765&lt;/td&gt;&lt;td&gt;Versa Concerto SD-WAN - Auth Bypass - CVE:CVE-2025-34026&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;840b35492a7543c18ffe50fc0d99b2db &lt;/td&gt;&lt;td&gt;100766&lt;/td&gt;&lt;td&gt;Kemp LoadMaster - Remote Code Execution - CVE:CVE-2024-7591&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;121b7070de3a459dbe80d7ed95aa3a4f &lt;/td&gt;&lt;td&gt;100767&lt;/td&gt;&lt;td&gt;AnythingLLM - SSRF - CVE:CVE-2024-0759&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;215417f989e2485a9c50eca0840a0966 &lt;/td&gt;&lt;td&gt;100768&lt;/td&gt;&lt;td&gt;Anyscale Ray - Remote Code Execution - CVE:CVE-2023-48022&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;3ed619a17d4141bda3a8c3869d16ee18 &lt;/td&gt;&lt;td&gt;100781&lt;/td&gt;&lt;td&gt;SSRF - Generic Payloads&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;7ce73f6a70be49f8944737465c963d9d &lt;/td&gt;&lt;td&gt;100782&lt;/td&gt;&lt;td&gt;SSRF - Obfuscated Payloads&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 02 Jun 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Pages - Cloudflare Pages builds now provide Node.js v22 by default</title><link>https://developers.cloudflare.com/changelog/post/2025-05-30-pages-build-image-v3/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-30-pages-build-image-v3/</guid><description>&lt;p&gt;When you use the built-in build system that is part of &lt;a href=&quot;https://developers.cloudflare.com/pages/&quot;&gt;Cloudflare Pages&lt;/a&gt;, the &lt;a href=&quot;https://developers.cloudflare.com/pages/configuration/build-image/&quot;&gt;Build Image&lt;/a&gt; now includes Node.js v22. Previously, Node.js v18 was provided by default, and Node.js v18 is now end-of-life (EOL).&lt;/p&gt;
&lt;p&gt;If you are creating a new Pages project, the new V3 build image that includes Node.js v22 will be used by default. If you have an existing Pages project, you can update to the latest build image by navigating to Settings &gt; Build &amp;#x26; deployments &gt; Build system version in the Cloudflare dashboard for a specific Pages project.&lt;/p&gt;
&lt;p&gt;Note that you can always specify a particular version of Node.js or other built-in dependencies by &lt;a href=&quot;https://developers.cloudflare.com/pages/configuration/build-image/#override-default-versions&quot;&gt;setting an environment variable&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more, refer to the &lt;a href=&quot;https://developers.cloudflare.com/pages/configuration/build-image&quot;&gt;developer docs for Cloudflare Pages builds&lt;/a&gt;&lt;/p&gt;</description><pubDate>Fri, 30 May 2025 00:00:00 GMT</pubDate><product>Pages</product><category>Pages</category></item><item><title>Rules - Fine-tune image optimization — WebP now supported in Configuration Rules</title><link>https://developers.cloudflare.com/changelog/post/2025-05-30-configuration-rules-webp/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-30-configuration-rules-webp/</guid><description>&lt;p&gt;You can now enable &lt;a href=&quot;https://developers.cloudflare.com/images/polish/activate-polish/&quot;&gt;Polish&lt;/a&gt; with the &lt;code&gt;webp&lt;/code&gt; format directly in &lt;a href=&quot;https://developers.cloudflare.com/rules/configuration-rules/&quot;&gt;Configuration Rules&lt;/a&gt;, allowing you to optimize image delivery for specific routes, user agents, or A/B tests — without applying changes zone-wide.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What’s new:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/images/polish/compression/#webp&quot;&gt;WebP&lt;/a&gt; is now a supported &lt;a href=&quot;https://developers.cloudflare.com/rules/configuration-rules/settings/#polish&quot;&gt;value&lt;/a&gt; in the &lt;strong&gt;Polish&lt;/strong&gt; setting for Configuration Rules.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This gives you more precise control over how images are compressed and delivered, whether you&apos;re targeting modern browsers, running experiments, or tailoring performance by geography or device type.&lt;/p&gt;
&lt;p&gt;Learn more in the &lt;a href=&quot;https://developers.cloudflare.com/images/polish/&quot;&gt;Polish&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/rules/configuration-rules/&quot;&gt;Configuration Rules&lt;/a&gt; documentation.&lt;/p&gt;</description><pubDate>Fri, 30 May 2025 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Workers - Debug, profile, and view logs for your Worker in Chrome Devtools — now supported in the Cloudflare Vite plugin</title><link>https://developers.cloudflare.com/changelog/post/2025-05-21-vite-plugin-chrome-devtools/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-21-vite-plugin-chrome-devtools/</guid><description>&lt;p&gt;You can now &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/dev-tools/&quot; target=&quot;_blank&quot;&gt;debug, profile, view logs, and analyze memory usage for your Worker&lt;/a&gt; using &lt;a href=&quot;https://developer.chrome.com/docs/devtools&quot; target=&quot;_blank&quot;&gt;Chrome Devtools&lt;/a&gt; when your Worker runs locally using the &lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/&quot; target=&quot;_blank&quot;&gt;Cloudflare Vite plugin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Previously, this was only possible if your Worker ran locally using the &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/&quot; target=&quot;_blank&quot;&gt;Wrangler CLI&lt;/a&gt;, and now you can do all the same things if your Worker uses &lt;a href=&quot;https://vite.dev/&quot; target=&quot;_blank&quot;&gt;Vite&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When you run &lt;code&gt;vite&lt;/code&gt;, you&apos;ll now see a debug URL in your console:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;VITE v6.3.5  ready in 461 ms&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;➜  Local:   http://localhost:5173/&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;➜  Network: use --host to expose&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;➜  Debug:   http://localhost:5173/__debug&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;➜  press h + enter to show help&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;Open the URL in Chrome, and an instance of Chrome Devtools will open and connect to your Worker running locally. You can then use Chrome Devtools to debug and introspect performance issues. For example, you can navigate to the Performance tab to understand where CPU time is spent in your Worker:&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/profile.Dz8PUp_K_Z16J4tW.webp&quot; alt=&quot;CPU Profile&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;For more information on how to get the most out of Chrome Devtools, refer to the following docs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/observability/dev-tools/breakpoints/&quot;&gt;Debug code by setting breakpoints&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/observability/dev-tools/cpu-usage/&quot;&gt;Profile CPU usage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/observability/dev-tools/memory-usage/&quot;&gt;Observe memory usage and debug memory leaks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 30 May 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Gateway, Cloudflare One - New Gateway Analytics in the Cloudflare One Dashboard</title><link>https://developers.cloudflare.com/changelog/post/gateway-analytics-v2/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/gateway-analytics-v2/</guid><description>&lt;p&gt;Users can now access significant enhancements to Cloudflare Gateway analytics, providing you with unprecedented visibility into your organization&apos;s DNS queries, HTTP requests, and Network sessions. These powerful new dashboards enable you to go beyond raw logs and gain actionable insights into how your users are interacting with the Internet and your protected resources.&lt;/p&gt;
&lt;p&gt;You can now visualize and explore:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Patterns Over Time: Understand trends in traffic volume and blocked requests, helping you identify anomalies and plan for future capacity.&lt;/li&gt;
&lt;li&gt;Top Users &amp;#x26; Destinations: Quickly pinpoint the most active users, enabling better policy enforcement and resource allocation.&lt;/li&gt;
&lt;li&gt;Actions Taken: See a clear breakdown of security actions applied by Gateway policies, such as blocks and allows, offering a comprehensive view of your security posture.&lt;/li&gt;
&lt;li&gt;Geographic Regions: Gain insight into the global distribution of your traffic.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/gateway-analytics.BdSwbIBb_1WTkQL.webp&quot; alt=&quot;Gateway Analytics&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To access the new overview, log in to your Cloudflare &lt;a href=&quot;https://one.dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Zero Trust dashboard&lt;/a&gt; and go to Analytics in the side navigation bar.&lt;/p&gt;</description><pubDate>Thu, 29 May 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category><category>Cloudflare One</category></item><item><title>D1, Workers - 50-500ms Faster D1 REST API Requests</title><link>https://developers.cloudflare.com/changelog/post/2025-05-30-d1-rest-api-latency/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-30-d1-rest-api-latency/</guid><description>&lt;p&gt;Users using Cloudflare&apos;s &lt;a href=&quot;https://developers.cloudflare.com/api/resources/d1/&quot;&gt;REST API&lt;/a&gt; to query their D1 database can see lower end-to-end request latency now that D1 authentication is performed at the closest Cloudflare network data center that received the request. Previously, authentication required D1 REST API requests to proxy to Cloudflare&apos;s core, centralized data centers, which added network round trips and latency.&lt;/p&gt;
&lt;p&gt;Latency improvements range from 50-500 ms depending on request location and &lt;a href=&quot;https://developers.cloudflare.com/d1/configuration/data-location/&quot;&gt;database location&lt;/a&gt; and only apply to the REST API. REST API requests and databases outside the United States see a bigger benefit since Cloudflare&apos;s primary core data centers reside in the United States.&lt;/p&gt;
&lt;p&gt;D1 query endpoints like &lt;code&gt;/query&lt;/code&gt; and &lt;code&gt;/raw&lt;/code&gt; have the most noticeable improvements since they no longer access Cloudflare&apos;s core data centers. D1 control plane endpoints such as those to create and delete databases see smaller improvements, since they still require access to Cloudflare&apos;s core data centers for other control plane metadata.&lt;/p&gt;</description><pubDate>Thu, 29 May 2025 00:00:00 GMT</pubDate><product>D1</product><category>D1</category><category>Workers</category></item><item><title>Browser Rendering - Playwright MCP server is now compatible with Browser Rendering</title><link>https://developers.cloudflare.com/changelog/post/2025-05-28-playwright-mcp/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-28-playwright-mcp/</guid><description>&lt;p&gt;We&apos;re excited to share that you can now use the &lt;a href=&quot;https://github.com/cloudflare/playwright-mcp&quot; target=&quot;_blank&quot;&gt;Playwright MCP&lt;/a&gt; server with Browser Rendering.&lt;/p&gt;
&lt;p&gt;Once you &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/playwright/playwright-mcp/#deploying&quot;&gt;deploy the server&lt;/a&gt;, you can use any MCP client with it to interact with Browser Rendering. This allows you to run AI models that can automate browser tasks, such as taking screenshots, filling out forms, or scraping data.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/playground-ai-screenshot.v44jFMBu_Z1xgc6e.webp&quot; alt=&quot;Access Analytics&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Playwright MCP is available as an npm package at &lt;a href=&quot;https://www.npmjs.com/package/@cloudflare/playwright-mcp&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;@cloudflare/playwright-mcp&lt;/code&gt;&lt;/a&gt;. To install it, type:&lt;/p&gt;
 &lt;div&gt; &lt;div&gt;  &lt;/div&gt; &lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; i -D @cloudflare/playwright-mcp&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;&lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; add -D @cloudflare/playwright-mcp&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;&lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; add -D @cloudflare/playwright-mcp&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;&lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;bun&lt;/span&gt;&lt;span&gt; add -d @cloudflare/playwright-mcp&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt;  
&lt;p&gt;Deploying the server is then as easy as:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&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;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;cloudflare:workers&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createMcpAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/playwright-mcp&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PlaywrightMCP&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createMcpAgent&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;BROWSER&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PlaywrightMCP&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;mount&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;/sse&quot;&lt;/span&gt;&lt;span&gt;)&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;Check out the full code at &lt;a href=&quot;https://github.com/cloudflare/playwright-mcp&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Learn more about Playwright MCP in our &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/playwright/playwright-mcp/&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 28 May 2025 00:00:00 GMT</pubDate><product>Browser Rendering</product><category>Browser Rendering</category></item><item><title>WAF - Updated attack score model</title><link>https://developers.cloudflare.com/changelog/post/2025-05-28-updated-attack-score-model/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-28-updated-attack-score-model/</guid><description>&lt;p&gt;We have deployed an updated attack score model focused on enhancing the detection of multiple false positives (FPs).&lt;/p&gt;
&lt;p&gt;As a result of this improvement, some changes in observed attack scores are expected.&lt;/p&gt;</description><pubDate>Wed, 28 May 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>SSL/TLS, Cloudflare for SaaS, Secrets Store - Increased limits for Cloudflare for SaaS and Secrets Store free and pay-as-you-go plans</title><link>https://developers.cloudflare.com/changelog/post/2025-05-19-paygo-updates/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-19-paygo-updates/</guid><description>&lt;p&gt;With upgraded limits to &lt;a href=&quot;https://www.cloudflare.com/plans/&quot; target=&quot;_blank&quot;&gt;all free and paid plans&lt;/a&gt;, you can now scale more easily with &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/&quot; target=&quot;_blank&quot;&gt;Cloudflare for SaaS&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/secrets-store/&quot; target=&quot;_blank&quot;&gt;Secrets Store&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/&quot; target=&quot;_blank&quot;&gt;Cloudflare for SaaS&lt;/a&gt; allows you to extend the benefits of Cloudflare to your customers via their own custom or vanity domains. Now, the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/plans/&quot; target=&quot;_blank&quot;&gt;limit for custom hostnames&lt;/a&gt; on a Cloudflare for SaaS pay-as-you-go plan has been &lt;strong&gt;raised from 5,000 custom hostnames to 50,000 custom hostnames.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With custom origin server -- previously an enterprise-only feature -- you can route traffic from one or more custom hostnames somewhere other than your default proxy fallback. &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-for-platforms/cloudflare-for-saas/start/advanced-settings/custom-origin/&quot; target=&quot;_blank&quot;&gt;Custom origin server&lt;/a&gt; is now available to Cloudflare for SaaS customers on Free, Pro, and Business plans.&lt;/p&gt;
&lt;p&gt;You can enable custom origin server on a per-custom hostname basis &lt;a href=&quot;https://developers.cloudflare.com/api/resources/custom_hostnames/methods/edit/&quot; target=&quot;_blank&quot;&gt;via the API&lt;/a&gt; or the UI:&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/custom-origin-server.B-BXcG-1_ZUd9i6.webp&quot; alt=&quot;Import repo or choose template&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Currently &lt;a href=&quot;https://blog.cloudflare.com/secrets-store-beta/&quot; target=&quot;_blank&quot;&gt;in beta with a Workers integration&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/secrets-store/&quot; target=&quot;_blank&quot;&gt;Cloudflare Secrets Store&lt;/a&gt; allows you to store, manage, and deploy account level secrets from a secure, centralized platform your &lt;a href=&quot;https://developers.cloudflare.com/workers/&quot; target=&quot;_blank&quot;&gt;Cloudflare Workers&lt;/a&gt;. Now, you can create and deploy &lt;strong&gt;100 secrets per account&lt;/strong&gt;. Try it out &lt;a href=&quot;http://dash.cloudflare.com/?to=/:account/secrets-store&quot; target=&quot;_blank&quot;&gt;in the dashboard&lt;/a&gt;, with &lt;a href=&quot;https://developers.cloudflare.com/secrets-store/integrations/workers/&quot; target=&quot;_blank&quot;&gt;Wrangler&lt;/a&gt;, or &lt;a href=&quot;https://developers.cloudflare.com/api/resources/secrets_store/&quot; target=&quot;_blank&quot;&gt;via the API&lt;/a&gt; today.&lt;/p&gt;</description><pubDate>Tue, 27 May 2025 11:00:00 GMT</pubDate><product>SSL/TLS</product><category>SSL/TLS</category><category>Cloudflare for SaaS</category><category>Secrets Store</category></item><item><title>Gateway - Gateway Protocol Detection Now Available for PAYGO and Free Plans</title><link>https://developers.cloudflare.com/changelog/post/2025-05-27-protocol-detection-availability/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-27-protocol-detection-availability/</guid><description>&lt;p&gt;All Cloudflare One Gateway users can now use Protocol detection logging and filtering, including those on Pay-as-you-go and Free plans.&lt;/p&gt;
&lt;p&gt;With Protocol Detection, admins can identify and enforce policies on traffic proxied through Gateway based on the underlying network protocol (for example, HTTP, TLS, or SSH), enabling more granular traffic control and security visibility no matter your plan tier.&lt;/p&gt;
&lt;p&gt;This feature is available to enable in your account network settings for all accounts. For more information on using Protocol Detection, refer to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/network-policies/protocol-detection/&quot;&gt;Protocol detection documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 27 May 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>WAF - WAF Release - 2025-05-27</title><link>https://developers.cloudflare.com/changelog/post/2025-05-27-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-27-waf-release/</guid><description>&lt;p&gt;This week’s roundup covers nine vulnerabilities, including six critical RCEs and one dangerous file upload. Affected platforms span cloud services, CI/CD pipelines, CMSs, and enterprise backup systems. Several are now addressed by updated WAF managed rulesets.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ingress-Nginx (CVE-2025-1098): Unauthenticated RCE via unsafe annotation handling. Impacts Kubernetes clusters.&lt;/li&gt;
&lt;li&gt;GitHub Actions (CVE-2025-30066): RCE through malicious workflow inputs. Targets CI/CD pipelines.&lt;/li&gt;
&lt;li&gt;Craft CMS (CVE-2025-32432): Template injection enables unauthenticated RCE. High risk to content-heavy sites.&lt;/li&gt;
&lt;li&gt;F5 BIG-IP (CVE-2025-31644): RCE via TMUI exploit, allowing full system compromise.&lt;/li&gt;
&lt;li&gt;AJ-Report (CVE-2024-15077): RCE through untrusted template execution. Affects reporting dashboards.&lt;/li&gt;
&lt;li&gt;NAKIVO Backup (CVE-2024-48248): RCE via insecure script injection. High-value target for ransomware.&lt;/li&gt;
&lt;li&gt;SAP NetWeaver (CVE-2025-31324): Dangerous file upload flaw enables remote shell deployment.&lt;/li&gt;
&lt;li&gt;Ivanti EPMM (CVE-2025-4428, 4427): Auth bypass allows full access to mobile device management.&lt;/li&gt;
&lt;li&gt;Vercel (CVE-2025-32421): Information leak via misconfigured APIs. Useful for attacker recon.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These vulnerabilities expose critical components across Kubernetes, CI/CD pipelines, and enterprise systems to severe threats including unauthenticated remote code execution, authentication bypass, and information leaks. High-impact flaws in Ingress-Nginx, Craft CMS, F5 BIG-IP, and NAKIVO Backup enable full system compromise, while SAP NetWeaver and AJ-Report allow remote shell deployment and template-based attacks. Ivanti EPMM’s auth bypass further risks unauthorized control over mobile device fleets.&lt;/p&gt;
&lt;p&gt;GitHub Actions and Vercel introduce supply chain and reconnaissance risks, allowing malicious workflow inputs and data exposure that aid in targeted exploitation. Organizations should prioritize immediate patching, enhance monitoring, and deploy updated WAF and IDS signatures to defend against likely active exploitation.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;6a61a14f44af4232a44e45aad127592a &lt;/td&gt;&lt;td&gt;100746&lt;/td&gt;&lt;td&gt;Vercel - Information Disclosure&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;bd30b3c43eb44335ab6013c195442495 &lt;/td&gt;&lt;td&gt;100754&lt;/td&gt;&lt;td&gt;AJ-Report - Remote Code Execution - CVE:CVE-2024-15077&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;6a13bd6e5fc94b1d9c97eb87dfee7ae4 &lt;/td&gt;&lt;td&gt;100756&lt;/td&gt;&lt;td&gt;NAKIVO Backup - Remote Code Execution - CVE:CVE-2024-48248&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;a4af6f2f15c9483fa9eab01d1c52f6d0 &lt;/td&gt;&lt;td&gt;100757&lt;/td&gt;&lt;td&gt;Ingress-Nginx - Remote Code Execution - CVE:CVE-2025-1098&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;bd30b3c43eb44335ab6013c195442495 &lt;/td&gt;&lt;td&gt;100759&lt;/td&gt;&lt;td&gt;SAP NetWeaver - Dangerous File Upload - CVE:CVE-2025-31324&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;dab2df4f548349e3926fee845366ccc1 &lt;/td&gt;&lt;td&gt;100760&lt;/td&gt;&lt;td&gt;Craft CMS - Remote Code Execution - CVE:CVE-2025-32432&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5eb23f172ed64ee08895e161eb40686b &lt;/td&gt;&lt;td&gt;100761&lt;/td&gt;&lt;td&gt;GitHub Action - Remote Code Execution - CVE:CVE-2025-30066&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;827037f2d5f941789efcba6260fc041c &lt;/td&gt;&lt;td&gt;100762&lt;/td&gt;&lt;td&gt;Ivanti EPMM - Auth Bypass - CVE:CVE-2025-4428, CVE:CVE-2025-4427&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ddee6d1c4f364768b324609cebafdfe6 &lt;/td&gt;&lt;td&gt;100763&lt;/td&gt;&lt;td&gt;F5 Big IP - Remote Code Execution - CVE:CVE-2025-31644&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Tue, 27 May 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Analytics - New GraphQL Analytics API Explorer and MCP Server</title><link>https://developers.cloudflare.com/changelog/post/2025-05-23-graphql-api-explorer/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-23-graphql-api-explorer/</guid><description>&lt;p&gt;We’ve launched two powerful new tools to make the GraphQL Analytics API more accessible:&lt;/p&gt;
&lt;h4&gt;GraphQL API Explorer&lt;/h4&gt;
&lt;p&gt;The new &lt;a href=&quot;https://graphql.cloudflare.com/explorer&quot; target=&quot;_blank&quot;&gt;GraphQL API Explorer&lt;/a&gt; helps you build, test, and run queries directly in your browser. Features include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In-browser schema documentation to browse available datasets and fields&lt;/li&gt;
&lt;li&gt;Interactive query editor with autocomplete and inline documentation&lt;/li&gt;
&lt;li&gt;A &quot;Run in GraphQL API Explorer&quot; button to execute example queries from our docs&lt;/li&gt;
&lt;li&gt;Seamless OAuth authentication — no manual setup required&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/graphql-api-explorer.CPUNZZ5B_1RXsdE.webp&quot; alt=&quot;GraphQL API Explorer&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;GraphQL Model Context Protocol (MCP) Server&lt;/h4&gt;
&lt;p&gt;MCP Servers let you use natural language tools like Claude to generate structured queries against your data. See our &lt;a href=&quot;https://blog.cloudflare.com/thirteen-new-mcp-servers-from-cloudflare/&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt; for details on how they work and which servers are available. The new &lt;a href=&quot;https://github.com/cloudflare/mcp-server-cloudflare/tree/main/apps/graphql&quot; target=&quot;_blank&quot;&gt;GraphQL MCP server&lt;/a&gt; helps you discover and generate useful queries for the GraphQL Analytics API. With this server, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explore what data is available to query&lt;/li&gt;
&lt;li&gt;Generate and refine queries using natural language, with one-click links to run them in the API Explorer&lt;/li&gt;
&lt;li&gt;Build dashboards and visualizations from structured query outputs&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example prompts include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“Show me HTTP traffic for the last 7 days for example.com”&lt;/li&gt;
&lt;li&gt;“What GraphQL node returns firewall events?”&lt;/li&gt;
&lt;li&gt;“Can you generate a link to the Cloudflare GraphQL API Explorer with a pre-populated query and variables?”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’re continuing to expand these tools, and your feedback helps shape what’s next. &lt;a href=&quot;https://developers.cloudflare.com/analytics/graphql-api/&quot;&gt;Explore the documentation&lt;/a&gt; to learn more and get started.&lt;/p&gt;</description><pubDate>Fri, 23 May 2025 00:00:00 GMT</pubDate><product>Analytics</product><category>Analytics</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.4.943.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-05-22-warp-windows-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-22-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains a hotfix for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/managed-networks/&quot;&gt;managed networks&lt;/a&gt; for the 2025.4.929.0 release.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue where it could take up to 3 minutes for the correct device profile to be applied in some circumstances. In the worst case, it should now only take up to 40 seconds. This will be improved further in a future release.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Microsoft has confirmed a regression with Windows 11 starting around 24H2 that may cause performance issues for some users. These performance issues could manifest as mouse lag, audio cracking, or other slowdowns. A fix from Microsoft is expected in early July.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with &lt;code&gt;KB5055523&lt;/code&gt; installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 22 May 2025 21:34:06 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.4.943.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-05-22-warp-macos-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-22-warp-macos-ga/</guid><description>&lt;p&gt;A new GA release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains a hotfix for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/managed-networks/&quot;&gt;managed networks&lt;/a&gt; for the 2025.4.929.0 release.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue where it could take up to 3 minutes for the correct device profile to be applied in some circumstances. In the worst case, it should now only take up to 40 seconds. This will be improved further in a future release.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS Sequoia: Due to changes Apple introduced in macOS 15.0.x, the WARP client may not behave as expected. Cloudflare recommends the use of macOS 15.4 or later.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 22 May 2025 21:34:06 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for Linux (version 2025.4.943.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-05-22-warp-linux-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-22-warp-linux-ga/</guid><description>&lt;p&gt;A new GA release for the Linux WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains a hotfix for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/managed-networks/&quot;&gt;managed networks&lt;/a&gt; for the 2025.4.929.0 release.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue where it could take up to 3 minutes for the correct device profile to be applied in some circumstances. In the worst case, it should now only take up to 40 seconds. This will be improved further in a future release.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 22 May 2025 19:22:32 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Workers - Handle incoming request cancellation in Workers with Request.signal</title><link>https://developers.cloudflare.com/changelog/post/2025-05-22-handle-request-cancellation/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-22-handle-request-cancellation/</guid><description>&lt;p&gt;In Cloudflare Workers, you can now attach an event listener to &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/request/&quot;&gt;&lt;code&gt;Request&lt;/code&gt;&lt;/a&gt; objects, using the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Request/signal&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;signal&lt;/code&gt; property&lt;/a&gt;. This allows you to perform tasks when the request to your Worker is canceled by the client. To use this feature, you must set the &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/compatibility-flags/#enable-requestsignal-for-incoming-requests&quot;&gt;&lt;code&gt;enable_request_signal&lt;/code&gt;&lt;/a&gt; compatibility flag.&lt;/p&gt;
&lt;p&gt;You can use a listener to perform cleanup tasks or write to logs before your Worker&apos;s invocation ends. For example, if you run the Worker below, and then abort the request from the client, a log will be written:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&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;// This sets up an event listener that will be called if the client disconnects from your&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;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;signal&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;abort&quot;&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;span&gt;=&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;The request was aborted!&quot;&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;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;readable&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writable&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;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;IdentityTransformStream&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;sendPing&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;writable&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;readable&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;headers&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;span&gt;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;text/plain&quot;&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;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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sendPing&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;writable&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writable&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getWriter&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TextEncoder&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&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;// Send &apos;ping&apos; every second to keep the connection alive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writer&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;enc&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;encode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;ping&lt;/span&gt;&lt;span&gt;\r\n&lt;/span&gt;&lt;span&gt;&quot;&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scheduler&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;wait&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1000&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;&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;// This sets up an event listener that will be called if the client disconnects from your&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;&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;signal&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;abort&apos;&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;span&gt;=&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;The request was aborted!&apos;&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;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;readable&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writable&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;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;IdentityTransformStream&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;sendPing&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;writable&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;readable&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; headers&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;span&gt;&apos;Content-Type&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;text/plain&apos;&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;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;span&gt;satisfies&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ExportedHandler&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Env&lt;/span&gt;&lt;span&gt;&gt;;&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sendPing&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;writable&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WritableStream&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writable&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getWriter&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TextEncoder&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&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;// Send &apos;ping&apos; every second to keep the connection alive&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;writer&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;enc&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;encode&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;ping&lt;/span&gt;&lt;span&gt;\r\n&lt;/span&gt;&lt;span&gt;&apos;&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scheduler&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;wait&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1000&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;/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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;For more information see the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/request&quot;&gt;&lt;code&gt;Request&lt;/code&gt; documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 22 May 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare Fundamentals, Terraform - Terraform v5.5.0 now available</title><link>https://developers.cloudflare.com/changelog/post/2025-05-19-terraform-v550-provider/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-19-terraform-v550-provider/</guid><description>&lt;p&gt;Earlier this year, we announced the launch of the new &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-02-03-terraform-v5-provider/&quot;&gt;Terraform v5 Provider&lt;/a&gt;. Unlike the earlier Terraform providers, v5 is automatically generated based on the OpenAPI Schemas for our REST APIs. Since launch, we have seen an unexpectedly high number of &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;issues&lt;/a&gt; reported by customers. These issues currently impact about 15% of resources. We have been working diligently to address these issues across the company, and have released the v5.5.0 release which includes a number of bug fixes. Please keep an eye on this changelog for more information about upcoming releases.&lt;/p&gt;
&lt;h4&gt;Changes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Broad fixes across resources with recurring diffs, including, but not limited to:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zero_trust_gateway_policy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zero_trust_access_application&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zero_trust_tunnel_cloudflared_route&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_zone_setting&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_ruleset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cloudflare_page_rule&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Zone settings can be re-applied without client errors&lt;/li&gt;
&lt;li&gt;Page rules conversion errors are fixed&lt;/li&gt;
&lt;li&gt;Failure to apply changes to &lt;code&gt;cloudflare_zero_trust_tunnel_cloudflared_route&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Other bug fixes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a more detailed look at all of the changes, see the &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/releases/tag/v5.5.0&quot; target=&quot;_blank&quot;&gt;changelog&lt;/a&gt; in GitHub.&lt;/p&gt;
&lt;h4&gt;Issues Closed&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5304&quot; target=&quot;_blank&quot;&gt;#5304: Importing cloudflare_zero_trust_gateway_policy invalid attribute filter value&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5303&quot; target=&quot;_blank&quot;&gt;#5303: cloudflare_page_rule import does not set values for all of the fields in terraform state&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5178&quot; target=&quot;_blank&quot;&gt;#5178: cloudflare_page_rule Page rule creation with redirect fails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5336&quot; target=&quot;_blank&quot;&gt;#5336: cloudflare_turnstile_wwidget not able to udpate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5418&quot; target=&quot;_blank&quot;&gt;#5418: cloudflare_cloud_connector_rules: Provider returned invalid result object after apply&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5423&quot; target=&quot;_blank&quot;&gt;#5423: cloudflare_zone_setting: &quot;Invalid value for zone setting always_use_https&quot;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you have an unaddressed issue with the provider, we encourage you to check the &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues&quot; target=&quot;_blank&quot;&gt;open issues&lt;/a&gt; and open a new one if one does not already exist for what you are experiencing.&lt;/p&gt;
&lt;h4&gt;Upgrading&lt;/h4&gt;
&lt;p&gt;If you are evaluating a move from v4 to v5, please make use of the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/guides/version-5-upgrade&quot; target=&quot;_blank&quot;&gt;migration guide&lt;/a&gt;. We have provided automated migration scripts using Grit which simplify the transition, although these do not support implementations which use Terraform modules, so customers making use of modules need to migrate manually. Please make use of &lt;code&gt;terraform plan&lt;/code&gt; to test your changes before applying, and let us know if you encounter any additional issues by reporting to our &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;For more info&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;Terraform provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/terraform/&quot;&gt;Documentation on using Terraform with Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 19 May 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Terraform</category></item><item><title>WAF - WAF Release - 2025-05-19</title><link>https://developers.cloudflare.com/changelog/post/2025-05-19-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-19-waf-release/</guid><description>&lt;p&gt;This week&apos;s analysis covers four vulnerabilities, with three rated critical due to their Remote Code Execution (RCE) potential. One targets a high-traffic frontend platform, while another targets a popular content management system. These detections are now part of the Cloudflare Managed Ruleset in &lt;em&gt;Block&lt;/em&gt; mode.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Commvault Command Center (CVE-2025-34028) exposes an unauthenticated RCE via insecure command injection paths in the web UI. This is critical due to its use in enterprise backup environments.&lt;/li&gt;
&lt;li&gt;BentoML (CVE-2025-27520) reveals an exploitable vector where serialized payloads in model deployment APIs can lead to arbitrary command execution. This targets modern AI/ML infrastructure.&lt;/li&gt;
&lt;li&gt;Craft CMS (CVE-2024-56145) allows RCE through template injection in unauthenticated endpoints. It poses a significant risk for content-heavy websites with plugin extensions.&lt;/li&gt;
&lt;li&gt;Apache HTTP Server (CVE-2024-38475) discloses sensitive server config data due to misconfigured
&lt;code&gt;mod_proxy&lt;/code&gt; behavior. While not RCE, this is useful for pre-attack recon.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;These newly detected vulnerabilities introduce critical risk across modern web stacks, AI infrastructure, and content platforms: unauthenticated RCEs in Commvault, BentoML, and Craft CMS enable full system compromise with minimal attacker effort.&lt;/p&gt;
&lt;p&gt;Apache HTTPD information leak can support targeted reconnaissance, increasing the success rate of follow-up exploits. Organizations using these platforms should prioritize patching and monitor for indicators of exploitation using updated WAF detection rules.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5c3559ad62994e5b932d7d0075129820 &lt;/td&gt;&lt;td&gt;100745&lt;/td&gt;&lt;td&gt;Apache HTTP Server - Information Disclosure - CVE:CVE-2024-38475&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;28a22a685bba478d99bc904526a517f1 &lt;/td&gt;&lt;td&gt;100747&lt;/td&gt;&lt;td&gt;&lt;p&gt;Commvault Command Center - Remote Code Execution - CVE:CVE-2025-34028&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;2e6bb954d0634e368c49d7d1d7619ccb &lt;/td&gt;&lt;td&gt;100749&lt;/td&gt;&lt;td&gt;BentoML - Remote Code Execution - CVE:CVE-2025-27520&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;91250eebec894705b62305b2f15bfda4 &lt;/td&gt;&lt;td&gt;100753&lt;/td&gt;&lt;td&gt;Craft CMS - Remote Code Execution - CVE:CVE-2024-56145&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 19 May 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Cloudflare One - New Applications Added to Zero Trust</title><link>https://developers.cloudflare.com/changelog/post/new-applications-71825/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/new-applications-71825/</guid><description>&lt;p&gt;42 new applications have been added for Zero Trust support within the Application Library and Gateway policy enforcement, giving you the ability to investigate or apply inline policies to these applications.&lt;/p&gt;
&lt;p&gt;33 of the 42 applications are Artificial Intelligence applications. The others are Human Resources (2 applications), Development (2 applications), Productivity (2 applications), Sales &amp;#x26; Marketing, Public Cloud, and Security.&lt;/p&gt;
&lt;p&gt;To view all available applications, log in to your Cloudflare &lt;a href=&quot;https://one.dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Zero Trust dashboard&lt;/a&gt;, navigate to the &lt;strong&gt;App Library&lt;/strong&gt; under &lt;strong&gt;My Team&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;For more information on creating Gateway policies, see our &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/&quot;&gt;Gateway policy documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Sun, 18 May 2025 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category></item><item><title>Access, Cloudflare One - New Access Analytics in the Cloudflare One Dashboard</title><link>https://developers.cloudflare.com/changelog/post/access-analytics-v2/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/access-analytics-v2/</guid><description>&lt;p&gt;A new Access Analytics dashboard is now available to all Cloudflare One customers. Customers can apply and combine multiple filters to dive into specific slices of their Access metrics. These filters include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Logins granted and denied&lt;/li&gt;
&lt;li&gt;Access events by type (SSO, Login, Logout)&lt;/li&gt;
&lt;li&gt;Application name (Salesforce, Jira, Slack, etc.)&lt;/li&gt;
&lt;li&gt;Identity provider (Okta, Google, Microsoft, onetimepin, etc.)&lt;/li&gt;
&lt;li&gt;Users (&lt;code&gt;chris@cloudflare.com&lt;/code&gt;, &lt;code&gt;sally@cloudflare.com&lt;/code&gt;, &lt;code&gt;rachel@cloudflare.com&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;Countries (US, CA, UK, FR, BR, CN, etc.)&lt;/li&gt;
&lt;li&gt;Source IP address&lt;/li&gt;
&lt;li&gt;App type (self-hosted, Infrastructure, RDP, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/accessanalytics.DYXgwZCl_Z2PPi7.webp&quot; alt=&quot;Access Analytics&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To access the new overview, log in to your Cloudflare &lt;a href=&quot;https://one.dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Zero Trust dashboard&lt;/a&gt; and find Analytics in the side navigation bar.&lt;/p&gt;</description><pubDate>Fri, 16 May 2025 00:00:00 GMT</pubDate><product>Access</product><category>Access</category><category>Cloudflare One</category></item><item><title>Workers, Durable Objects - Durable Objects are now supported in Python Workers</title><link>https://developers.cloudflare.com/changelog/post/2025-05-14-python-worker-durable-object/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-14-python-worker-durable-object/</guid><description>&lt;p&gt;You can now create &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/&quot;&gt;Durable Objects&lt;/a&gt; using
&lt;a href=&quot;https://developers.cloudflare.com/workers/languages/python/&quot;&gt;Python Workers&lt;/a&gt;. A Durable Object is a special kind of
Cloudflare Worker which uniquely combines compute with storage, enabling stateful
long-running applications which run close to your users. For more info see
&lt;a href=&quot;https://developers.cloudflare.com/durable-objects/concepts/what-are-durable-objects/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can define a Durable Object in Python in a similar way to JavaScript:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; workers &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; DurableObject&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; Response&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; WorkerEntrypoint&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;from&lt;/span&gt;&lt;span&gt; urllib&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; urlparse&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;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyDurableObject&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;DurableObject&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;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;__init__&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;env&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;self&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ctx &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; ctx&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;self&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; env&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;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&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;result &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sql&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;exec&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;SELECT &apos;Hello, World!&apos; as greeting&quot;&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;span&gt;one&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;greeting&lt;/span&gt;&lt;span&gt;)&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;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Default&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;WorkerEntrypoint&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;self&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&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;url &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;urlparse&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&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;id&lt;/span&gt;&lt;span&gt; &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;MY_DURABLE_OBJECT&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;idFromName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;path&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;stub &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;MY_DURABLE_OBJECT&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&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;greeting &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; stub&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&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;return&lt;/span&gt;&lt;span&gt; greeting&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;Define the Durable Object in your Wrangler configuration file:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;durable_objects&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;bindings&lt;/span&gt;&lt;span&gt;&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MY_DURABLE_OBJECT&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;class_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MyDurableObject&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[[&lt;/span&gt;&lt;span&gt;durable_objects&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;bindings&lt;/span&gt;&lt;span&gt;]]&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;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MY_DURABLE_OBJECT&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;class_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MyDurableObject&quot;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Then define the storage backend for your Durable Object:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;migrations&lt;/span&gt;&lt;span&gt;&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;v1&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// Should be unique for each entry&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;new_sqlite_classes&lt;/span&gt;&lt;span&gt;&quot;&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;span&gt;// Array of new classes&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;&quot;MyDurableObject&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[[&lt;/span&gt;&lt;span&gt;migrations&lt;/span&gt;&lt;span&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;tag&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;v1&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;new_sqlite_classes&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;span&gt; &lt;/span&gt;&lt;span&gt;&quot;MyDurableObject&quot;&lt;/span&gt;&lt;span&gt; &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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Then test your new Durable Object locally by running &lt;code&gt;wrangler dev&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npx wrangler dev&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;Consult the &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/&quot;&gt;Durable Objects documentation&lt;/a&gt; for more details.&lt;/p&gt;</description><pubDate>Fri, 16 May 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category><category>Durable Objects</category></item><item><title>Email security - Open email attachments with Browser Isolation</title><link>https://developers.cloudflare.com/changelog/post/2025-05-08-open-attachments-with-browser-isolation/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-08-open-attachments-with-browser-isolation/</guid><description>&lt;p&gt;You can now safely open email attachments to view and investigate them.&lt;/p&gt;
&lt;p&gt;What this means is that messages now have a &lt;strong&gt;Attachments&lt;/strong&gt; section. Here, you can view processed attachments and their classifications (for example, &lt;em&gt;Malicious&lt;/em&gt;, &lt;em&gt;Suspicious&lt;/em&gt;, &lt;em&gt;Encrypted&lt;/em&gt;). Next to each attachment, a &lt;strong&gt;Browser Isolation&lt;/strong&gt; icon allows your team to safely open the file in a &lt;strong&gt;clientless, isolated browser&lt;/strong&gt; with no risk to the analyst or your environment.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/Attachment-RBI.U9Dp8dJO_265xjw.webp&quot; alt=&quot;Attachment-RBI&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To use this feature, you must:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enable &lt;strong&gt;Clientless Web Isolation&lt;/strong&gt; in your Zero Trust settings.&lt;/li&gt;
&lt;li&gt;Have &lt;strong&gt;Browser Isolation (BISO)&lt;/strong&gt; seats assigned.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more details, refer to our &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/remote-browser-isolation/setup/clientless-browser-isolation/&quot;&gt;setup guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Some attachment types may not render in Browser Isolation. If there is a file type that you would like to be opened with Browser Isolation, reach out to your Cloudflare contact.&lt;/p&gt;
&lt;p&gt;This feature is available across these Email security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Advantage&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 15 May 2025 23:22:49 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.4.929.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-05-14-warp-windows-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-14-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains two significant changes all customers should be aware of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;All DNS traffic now flows inside the WARP tunnel. Customers are no longer required to configure their local firewall rules to allow our &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/firewall/#doh-ip&quot;&gt;DoH IP addresses and domains&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;When using MASQUE, the connection will fall back to HTTP/2 (TCP) when we detect that HTTP/3 traffic is blocked. This allows for a much more reliable connection on some public WiFi networks.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue causing reconnection loops when captive portals are detected.&lt;/li&gt;
&lt;li&gt;Fixed an issue that caused WARP client disk encryption posture checks to fail due to missing drive names.&lt;/li&gt;
&lt;li&gt;Fixed an issue where managed network policies could incorrectly report network location beacons as missing.&lt;/li&gt;
&lt;li&gt;Improved DEX test error reporting.&lt;/li&gt;
&lt;li&gt;Fixed an issue where some parts of the WARP Client UI were missing in high contrast mode.&lt;/li&gt;
&lt;li&gt;Fixed an issue causing client notifications to fail in IPv6 only environments which prevented the client from receiving configuration changes to settings like device profile.&lt;/li&gt;
&lt;li&gt;Added a TCP fallback for the MASQUE tunnel protocol to improve connectivity on networks that block UDP or HTTP/3 specifically.&lt;/li&gt;
&lt;li&gt;Added new IP addresses for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/firewall/#connectivity-checks&quot;&gt;tunnel connectivity checks&lt;/a&gt;. If your organization uses a firewall or other policies you will need to exempt these IPs.&lt;/li&gt;
&lt;li&gt;DNS over HTTPS traffic is now included in the WARP tunnel by default.&lt;/li&gt;
&lt;li&gt;Improved the error message displayed in the client GUI when the rate limit for entering an incorrect admin override code is met.&lt;/li&gt;
&lt;li&gt;Improved handling of non-SLAAC IPv6 interface addresses for better connectivity in IPv6 only environments.&lt;/li&gt;
&lt;li&gt;Fixed an issue where frequent network changes could cause WARP to become unresponsive.&lt;/li&gt;
&lt;li&gt;Improvement for WARP to check if tunnel connectivity fails or times out at device wake before attempting to reconnect.&lt;/li&gt;
&lt;li&gt;Fixed an issue causing WARP connection disruptions after network changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Microsoft has confirmed a regression with Windows 11 starting around 24H2 that may cause performance issues for some users. These performance issues could manifest as mouse lag, audio cracking, or other slowdowns. A fix from Microsoft is expected in early July.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Devices with &lt;code&gt;KB5055523&lt;/code&gt; installed may receive a warning about &lt;code&gt;Win32/ClickFix.ABA&lt;/code&gt; being present in the installer. To resolve this false positive, update Microsoft Security Intelligence to &lt;a href=&quot;https://www.microsoft.com/en-us/wdsi/definitions/antimalware-definition-release-notes?requestVersion=1.429.19.0&quot;&gt;version 1.429.19.0&lt;/a&gt; or later.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 14 May 2025 21:32:45 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Gateway - Domain Categories improvements</title><link>https://developers.cloudflare.com/changelog/post/2025-05-14-domain-category-improvements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-14-domain-category-improvements/</guid><description>&lt;p&gt;&lt;strong&gt;New categories added&lt;/strong&gt;&lt;/p&gt;





















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Parent ID&lt;/th&gt;&lt;th&gt;Parent Name&lt;/th&gt;&lt;th&gt;Category ID&lt;/th&gt;&lt;th&gt;Category Name&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Ads&lt;/td&gt;&lt;td&gt;66&lt;/td&gt;&lt;td&gt;Advertisements&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;Business &amp;#x26; Economy&lt;/td&gt;&lt;td&gt;185&lt;/td&gt;&lt;td&gt;Personal Finance&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;Business &amp;#x26; Economy&lt;/td&gt;&lt;td&gt;186&lt;/td&gt;&lt;td&gt;Brokerage &amp;#x26; Investing&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;Security Threats&lt;/td&gt;&lt;td&gt;187&lt;/td&gt;&lt;td&gt;Compromised Domain&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;Security Threats&lt;/td&gt;&lt;td&gt;188&lt;/td&gt;&lt;td&gt;Potentially Unwanted Software&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;Education&lt;/td&gt;&lt;td&gt;189&lt;/td&gt;&lt;td&gt;Reference&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;Government &amp;#x26; Politics&lt;/td&gt;&lt;td&gt;190&lt;/td&gt;&lt;td&gt;Charity and Non-profit&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Changes to existing categories&lt;/strong&gt;&lt;/p&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Original Name&lt;/th&gt;&lt;th&gt;New Name&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Religion&lt;/td&gt;&lt;td&gt;Religion &amp;#x26; Spirituality&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Government&lt;/td&gt;&lt;td&gt;Government/Legal&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Redirect&lt;/td&gt;&lt;td&gt;URL Alias/Redirect&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/domain-categories/&quot;&gt;Gateway domain categories&lt;/a&gt; to learn more.&lt;/p&gt;</description><pubDate>Wed, 14 May 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>Hyperdrive - Hyperdrive achieves FedRAMP Moderate-Impact Authorization</title><link>https://developers.cloudflare.com/changelog/post/2025-05-14-hyperdrive-fedramp/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-14-hyperdrive-fedramp/</guid><description>&lt;p&gt;Hyperdrive has been approved for FedRAMP Authorization and is now available in the &lt;a href=&quot;https://marketplace.fedramp.gov/products/FR2000863987&quot; target=&quot;_blank&quot;&gt;FedRAMP Marketplace&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;FedRAMP is a U.S. government program that provides standardized assessment and authorization for cloud products and services. As a result of this product update,
Hyperdrive has been approved as an authorized service to be used by U.S. federal agencies at the Moderate Impact level.&lt;/p&gt;
&lt;p&gt;For detailed information regarding FedRAMP and its implications, please refer to the &lt;a href=&quot;https://marketplace.fedramp.gov/products/FR2000863987&quot; target=&quot;_blank&quot;&gt;official FedRAMP documentation for Cloudflare&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 14 May 2025 00:00:00 GMT</pubDate><product>Hyperdrive</product><category>Hyperdrive</category></item><item><title>Stream - Introducing Origin Restrictions for Media Transformations</title><link>https://developers.cloudflare.com/changelog/post/2025-05-14-media-transformations-origin-restrictions/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-14-media-transformations-origin-restrictions/</guid><description>&lt;p&gt;We are adding &lt;a href=&quot;https://developers.cloudflare.com/stream/transform-videos/sources/&quot;&gt;source origin restrictions&lt;/a&gt; to
the Media Transformations beta. This allows customers to restrict what sources
can be used to fetch images and video for transformations. This feature is the
same as --- and uses the same settings as ---
&lt;a href=&quot;https://developers.cloudflare.com/images/transform-images/sources/&quot;&gt;Image Transformations sources&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When transformations is first enabled, the default setting only allows
transformations on images and media from the same website or domain being used to make
the transformation request. In other words, by default, requests to
&lt;code&gt;example.com/cdn-cgi/media&lt;/code&gt; can only reference originals on &lt;code&gt;example.com&lt;/code&gt;.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/allowed-origins.4hu5lHws_ZsjEgI.webp&quot; alt=&quot;Enable allowed origins from the Cloudflare dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Adding access to other sources, or allowing any source,
&lt;a href=&quot;https://developers.cloudflare.com/images/transform-images/sources/&quot;&gt;is easy to do&lt;/a&gt;
in the &lt;strong&gt;Transformations&lt;/strong&gt; tab under &lt;strong&gt;Stream&lt;/strong&gt;. Click each domain enabled for
Transformations and set its sources list to match the needs of your content. The
user making this change will need permission to edit zone settings.&lt;/p&gt;
&lt;p&gt;For more information, learn about &lt;a href=&quot;https://developers.cloudflare.com/stream/transform-videos/&quot;&gt;Transforming Videos&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 14 May 2025 00:00:00 GMT</pubDate><product>Stream</product><category>Stream</category></item><item><title>Browser Isolation - SAML HTTP-POST bindings support for RBI</title><link>https://developers.cloudflare.com/changelog/post/2025-05-13-rbi-saml-post-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-13-rbi-saml-post-support/</guid><description>&lt;p&gt;Remote Browser Isolation (RBI) now supports SAML HTTP-POST bindings, enabling seamless authentication for SSO-enabled applications that rely on POST-based SAML responses from Identity Providers (IdPs) within a Remote Browser Isolation session. This update resolves a previous limitation that caused &lt;code&gt;405&lt;/code&gt; errors during login and improves compatibility with multi-factor authentication (MFA) flows.&lt;/p&gt;
&lt;p&gt;With expanded support for major IdPs like Okta and Azure AD, this enhancement delivers a more consistent and user-friendly experience across authentication workflows. Learn how to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/remote-browser-isolation/setup/&quot;&gt;set up Remote Browser Isolation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 13 May 2025 00:00:00 GMT</pubDate><product>Browser Isolation</product><category>Browser Isolation</category></item><item><title>Gateway - New Applications Added for DNS Filtering</title><link>https://developers.cloudflare.com/changelog/post/2025-05-13-new-applications-added/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-13-new-applications-added/</guid><description>&lt;p&gt;You can now create DNS policies to manage outbound traffic for an expanded list of applications.
This update adds support for 273 new applications, giving you more control over your organization&apos;s outbound traffic.&lt;/p&gt;
&lt;p&gt;With this update, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create DNS policies for a wider range of applications&lt;/li&gt;
&lt;li&gt;Manage outbound traffic more effectively&lt;/li&gt;
&lt;li&gt;Improve your organization&apos;s security and compliance posture&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information on creating DNS policies, see our &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/dns-policies/&quot;&gt;DNS policy documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 13 May 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>Cloudflare One Client - WARP client for Linux (version 2025.4.929.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-05-12-warp-linux-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-12-warp-linux-ga/</guid><description>&lt;p&gt;A new GA release for the Linux WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains two significant changes all customers should be aware of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;All DNS traffic now flows inside the WARP tunnel. Customers are no longer required to configure their local firewall rules to allow our &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/firewall/#doh-ip&quot;&gt;DoH IP addresses and domains&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;When using MASQUE, the connection will fall back to HTTP/2 (TCP) when we detect that HTTP/3 traffic is blocked. This allows for a much more reliable connection on some public WiFi networks.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue where the managed network policies could incorrectly report network location beacons as missing.&lt;/li&gt;
&lt;li&gt;Improved DEX test error reporting.&lt;/li&gt;
&lt;li&gt;Fixed an issue causing client notifications to fail in IPv6 only environments which prevented the client from receiving configuration changes to settings like device profile.&lt;/li&gt;
&lt;li&gt;Added a TCP fallback for the MASQUE tunnel protocol to improve connectivity on networks that block UDP or HTTP/3 specifically.&lt;/li&gt;
&lt;li&gt;Added new IP addresses for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/firewall/#connectivity-checks&quot;&gt;tunnel connectivity checks&lt;/a&gt;. If your organization uses a firewall or other policies you will need to exempt these IPs.&lt;/li&gt;
&lt;li&gt;Fixed an issue where frequent network changes could cause WARP to become unresponsive.&lt;/li&gt;
&lt;li&gt;DNS over HTTPS traffic is now included in the WARP tunnel by default.&lt;/li&gt;
&lt;li&gt;Improvement for WARP to check if tunnel connectivity fails or times out at device wake before attempting to reconnect.&lt;/li&gt;
&lt;li&gt;Fixed an issue causing WARP connection disruptions after network changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Devices using WARP client 2025.4.929.0 and up may experience Local Domain Fallback failures if a fallback server has not been configured. To configure a fallback server, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#route-traffic-to-fallback-server&quot;&gt;Route traffic to fallback server&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 12 May 2025 23:21:47 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.4.929.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-05-12-warp-macos-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-12-warp-macos-ga/</guid><description>&lt;p&gt;A new GA release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains two significant changes all customers should be aware of:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;All DNS traffic now flows inside the WARP tunnel. Customers are no longer required to configure their local firewall rules to allow our &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/firewall/#doh-ip&quot;&gt;DoH IP addresses and domains&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;When using MASQUE, the connection will fall back to HTTP/2 (TCP) when we detect that HTTP/3 traffic is blocked. This allows for a much more reliable connection on some public WiFi networks.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue where the managed network policies could incorrectly report network location beacons as missing.&lt;/li&gt;
&lt;li&gt;Improved DEX test error reporting.&lt;/li&gt;
&lt;li&gt;Fixed an issue causing client notifications to fail in IPv6 only environments which prevented the client from receiving configuration changes to settings like device profile.&lt;/li&gt;
&lt;li&gt;Improved captive portal detection.&lt;/li&gt;
&lt;li&gt;Added a TCP fallback for the MASQUE tunnel protocol to improve connectivity on networks that block UDP or HTTP/3 specifically.&lt;/li&gt;
&lt;li&gt;Added new IP addresses for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/firewall/#connectivity-checks&quot;&gt;tunnel connectivity checks&lt;/a&gt;. If your organization uses a firewall or other policies you will need to exempt these IPs.&lt;/li&gt;
&lt;li&gt;DNS over HTTPS traffic is now included in the WARP tunnel by default.&lt;/li&gt;
&lt;li&gt;Improved the error message displayed in the client GUI when the rate limit for entering an incorrect admin override code is met.&lt;/li&gt;
&lt;li&gt;Improved handling of non-SLAAC IPv6 interface addresses for better connectivity in IPv6 only environments.&lt;/li&gt;
&lt;li&gt;Fixed an issue where frequent network changes could cause WARP to become unresponsive.&lt;/li&gt;
&lt;li&gt;Improvement for WARP to check if tunnel connectivity fails or times out at device wake before attempting to reconnect.&lt;/li&gt;
&lt;li&gt;Fixed an issue causing WARP connection disruptions after network changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS Sequoia: Due to changes Apple introduced in macOS 15.0.x, the WARP client may not behave as expected. Cloudflare recommends the use of macOS 15.4 or later.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 12 May 2025 23:20:27 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Data Loss Prevention - Case Sensitive Custom Word Lists</title><link>https://developers.cloudflare.com/changelog/post/2025-05-12-case-sensitive-cwl/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-12-case-sensitive-cwl/</guid><description>&lt;p&gt;You can now configure &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/detection-entries/#custom-wordlist&quot;&gt;custom word lists&lt;/a&gt; to enforce case sensitivity. This setting supports flexibility where needed and aims to reduce false positives where letter casing is critical.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/case-sesitive-cwl.MPuOc_3r_220dca.webp&quot; alt=&quot;dlp&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Mon, 12 May 2025 00:00:00 GMT</pubDate><product>Data Loss Prevention</product><category>Data Loss Prevention</category></item><item><title>Queues - Publish messages to Queues directly via HTTP</title><link>https://developers.cloudflare.com/changelog/post/2025-05-09-publish-to-queues-via-http/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-09-publish-to-queues-via-http/</guid><description>&lt;p&gt;You can now publish messages to &lt;a href=&quot;https://developers.cloudflare.com/queues/&quot;&gt;Cloudflare Queues&lt;/a&gt; directly via HTTP from any service or programming language that supports sending HTTP requests. Previously, publishing to queues was only possible from within &lt;a href=&quot;https://developers.cloudflare.com/workers/&quot;&gt;Cloudflare Workers&lt;/a&gt;. You can already consume from queues via Workers or &lt;a href=&quot;https://developers.cloudflare.com/queues/configuration/pull-consumers/&quot;&gt;HTTP pull consumers&lt;/a&gt;, and now publishing is just as flexible.&lt;/p&gt;
&lt;p&gt;Publishing via HTTP requires a &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/api/get-started/create-token/&quot;&gt;Cloudflare API token&lt;/a&gt; with &lt;code&gt;Queues Edit&lt;/code&gt; permissions for authentication. Here&apos;s a simple example:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.cloudflare.com/client/v4/accounts/&amp;#x3C;account_id&gt;/queues/&amp;#x3C;queue_id&gt;/messages&quot;&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;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Authorization: Bearer &amp;#x3C;api_token&gt;&apos;&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;--data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;{ &quot;body&quot;: { &quot;greeting&quot;: &quot;hello&quot;, &quot;timestamp&quot;:  &quot;2025-07-24T12:00:00Z&quot;} }&apos;&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;You can also use our &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/api/reference/sdks/&quot;&gt;SDKs&lt;/a&gt; for TypeScript, Python, and Go.&lt;/p&gt;
&lt;p&gt;To get started with HTTP publishing, check out our &lt;a href=&quot;https://developers.cloudflare.com/queues/examples/publish-to-a-queue-via-http/&quot;&gt;step-by-step example&lt;/a&gt; and the full API documentation in our &lt;a href=&quot;https://developers.cloudflare.com/api/resources/queues/subresources/messages/methods/push/&quot;&gt;API reference&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 09 May 2025 12:00:00 GMT</pubDate><product>Queues</product><category>Queues</category></item><item><title>Rules - More ways to match — Snippets now support Custom Lists, Bot Score, and WAF Attack Score</title><link>https://developers.cloudflare.com/changelog/post/2025-05-09-snippets-cloud-connector-lists-waf-bot-scores/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-09-snippets-cloud-connector-lists-waf-bot-scores/</guid><description>&lt;p&gt;You can now use IP, Autonomous System (AS), and Hostname &lt;a href=&quot;https://developers.cloudflare.com/waf/tools/lists/custom-lists/&quot;&gt;custom lists&lt;/a&gt; to route traffic to &lt;a href=&quot;https://developers.cloudflare.com/rules/snippets/&quot;&gt;Snippets&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/rules/cloud-connector/&quot;&gt;Cloud Connector&lt;/a&gt;, giving you greater precision and control over how you match and process requests at the edge.&lt;/p&gt;
&lt;p&gt;In Snippets, you can now also match on &lt;a href=&quot;https://developers.cloudflare.com/bots/concepts/bot-score/&quot;&gt;Bot Score&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/waf/detections/attack-score/&quot;&gt;WAF Attack Score&lt;/a&gt;, unlocking smarter edge logic for everything from request filtering and mitigation to &lt;a href=&quot;https://developers.cloudflare.com/rules/snippets/examples/slow-suspicious-requests/&quot;&gt;tarpitting&lt;/a&gt; and logging.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What’s new:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/waf/tools/lists/custom-lists/&quot;&gt;Custom lists&lt;/a&gt; matching – Snippets and Cloud Connector now support user-created IP, AS, and Hostname lists via dashboard or &lt;a href=&quot;https://developers.cloudflare.com/api/resources/rules/subresources/lists/methods/list/&quot;&gt;Lists API&lt;/a&gt;. Great for shared logic across zones.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/bots/concepts/bot-score/&quot;&gt;Bot Score&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/waf/detections/attack-score/&quot;&gt;WAF Attack Score&lt;/a&gt; – Use Cloudflare’s intelligent traffic signals to detect bots or attacks and take advanced, tailored actions with just a few lines of code.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/snippets-lists-scores.D05l6zgc_ZG4Rof.webp&quot; alt=&quot;New fields in Snippets&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;These enhancements unlock new possibilities for building smarter traffic workflows with minimal code and maximum efficiency.&lt;/p&gt;
&lt;p&gt;Learn more in the &lt;a href=&quot;https://developers.cloudflare.com/rules/snippets/&quot;&gt;Snippets&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/rules/cloud-connector/&quot;&gt;Cloud Connector&lt;/a&gt; documentation.&lt;/p&gt;</description><pubDate>Fri, 09 May 2025 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Email security - Open email links with Browser Isolation</title><link>https://developers.cloudflare.com/changelog/post/2025-05-15-open-links-browser-isolation/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-15-open-links-browser-isolation/</guid><description>&lt;p&gt;You can now safely open links in emails to view and investigate them.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/investigate-links.pYbpGkt5_Z1DQRHU.webp&quot; alt=&quot;Open links with Browser Isolation&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;From &lt;strong&gt;Investigation&lt;/strong&gt;, go to &lt;strong&gt;View details&lt;/strong&gt;, and look for the &lt;strong&gt;Links identified&lt;/strong&gt; section. Next to each link, the Cloudflare dashboard will display an &lt;strong&gt;Open in Browser Isolation&lt;/strong&gt; icon which allows your team to safely open the link in a clientless, isolated browser with no risk to the analyst or your environment. Refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/email-security/investigation/search-email/#open-links&quot;&gt;Open links&lt;/a&gt; to learn more about this feature.&lt;/p&gt;
&lt;p&gt;To use this feature, you must:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enable &lt;strong&gt;Clientless Web Isolation&lt;/strong&gt; in your Zero Trust settings.&lt;/li&gt;
&lt;li&gt;Have &lt;strong&gt;Browser Isolation (RBI)&lt;/strong&gt; seats assigned.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more details, refer to our &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/remote-browser-isolation/setup/clientless-browser-isolation/&quot;&gt;setup guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This feature is available across these Email security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Advantage&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 08 May 2025 23:22:49 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>Security Center - URL Scanner now supports geo-specific scanning</title><link>https://developers.cloudflare.com/changelog/post/2025-05-07-url-scanner-geoegress/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-07-url-scanner-geoegress/</guid><description>&lt;p&gt;Enterprise customers can now choose the geographic location from which a URL scan is performed — either via &lt;a href=&quot;https://developers.cloudflare.com/security-center/investigate/&quot;&gt;Security Center&lt;/a&gt; in the Cloudflare dashboard or via the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/url_scanner/subresources/scans/methods/create/&quot;&gt;URL Scanner API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This feature gives security teams greater insight into how a website behaves across different regions, helping uncover targeted, location-specific threats.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What’s new:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Location Picker: Select a location for the scan via &lt;strong&gt;Security Center → Investigate&lt;/strong&gt; in the dashboard or through the API.&lt;/li&gt;
&lt;li&gt;Region-aware scanning: Understand how content changes by location — useful for detecting regionally tailored attacks.&lt;/li&gt;
&lt;li&gt;Default behavior: If no location is set, scans default to the user’s current geographic region.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learn more in the &lt;a href=&quot;https://developers.cloudflare.com/security-center/&quot;&gt;Security Center documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 08 May 2025 00:00:00 GMT</pubDate><product>Security Center</product><category>Security Center</category></item><item><title>WAF - Improved Payload Logging for WAF Managed Rules</title><link>https://developers.cloudflare.com/changelog/post/2025-05-08-improved-payload-logging/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-08-improved-payload-logging/</guid><description>&lt;p&gt;We have upgraded WAF Payload Logging to enhance rule diagnostics and usability:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Targeted logging&lt;/strong&gt;: Logs now capture only the specific portions of requests that triggered WAF rules, rather than entire request segments.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Visual highlighting&lt;/strong&gt;: Matched content is visually highlighted in the UI for faster identification.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced context&lt;/strong&gt;: Logs now include surrounding context to make diagnostics more effective.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-05-payload-logging-update.1M29LjNm_Z23wApX.webp&quot; alt=&quot;Log entry showing payload logging details&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Payload Logging is available to all Enterprise customers. If you have not used Payload Logging before, check how you can &lt;a href=&quot;https://developers.cloudflare.com/waf/managed-rules/payload-logging/&quot;&gt;get started&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The structure of the &lt;code&gt;encrypted_matched_data&lt;/code&gt; field in Logpush has changed from &lt;code&gt;Map&amp;#x3C;Field, Value&gt;&lt;/code&gt; to &lt;code&gt;Map&amp;#x3C;Field, {Before: bytes, Content: Value, After: bytes}&gt;&lt;/code&gt;. If you rely on this field in your Logpush jobs, you should review and update your processing logic accordingly.&lt;/p&gt;</description><pubDate>Thu, 08 May 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Improved memory efficiency for WebAssembly Workers</title><link>https://developers.cloudflare.com/changelog/post/2025-05-08-finalization-registry/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-08-finalization-registry/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry&quot; target=&quot;_blank&quot;&gt;FinalizationRegistry&lt;/a&gt; is now available in Workers. You can opt-in using the &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/compatibility-flags/#enable-finalizationregistry-and-weakref&quot;&gt;&lt;code&gt;enable_weak_ref&lt;/code&gt;&lt;/a&gt; compatibility flag.&lt;/p&gt;
&lt;p&gt;This can reduce memory leaks when using WebAssembly-based Workers, which includes &lt;a href=&quot;https://developers.cloudflare.com/workers/languages/python/&quot;&gt;Python Workers&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/workers/languages/rust/&quot;&gt;Rust Workers&lt;/a&gt;. The FinalizationRegistry works by enabling toolchains such as &lt;a href=&quot;https://emscripten.org/&quot; target=&quot;_blank&quot;&gt;Emscripten&lt;/a&gt; and &lt;a href=&quot;https://rustwasm.github.io/wasm-bindgen/&quot; target=&quot;_blank&quot;&gt;wasm-bindgen&lt;/a&gt; to automatically free WebAssembly heap allocations. If you are using WASM and seeing Exceeded Memory errors and cannot determine a cause using &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/dev-tools/memory-usage/&quot;&gt;memory profiling&lt;/a&gt;, you may want to enable the FinalizationRegistry.&lt;/p&gt;
&lt;p&gt;For more information refer to the &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/compatibility-flags/#enable-finalizationregistry-and-weakref&quot;&gt;&lt;code&gt;enable_weak_ref&lt;/code&gt;&lt;/a&gt; compatibility flag documentation.&lt;/p&gt;</description><pubDate>Thu, 08 May 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Data Loss Prevention - Send forensic copies to storage without DLP profiles</title><link>https://developers.cloudflare.com/changelog/post/2025-05-07-forensic-copy-update/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-07-forensic-copy-update/</guid><description>&lt;p&gt;You can now &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/dlp-policies/logging-options/#send-dlp-forensic-copies-to-logpush-destination&quot;&gt;send DLP forensic copies&lt;/a&gt; to third-party storage for any HTTP policy with an &lt;code&gt;Allow&lt;/code&gt; or &lt;code&gt;Block&lt;/code&gt; action, without needing to include a DLP profile. This change increases flexibility for data handling and forensic investigation use cases.&lt;/p&gt;
&lt;p&gt;By default, Gateway will send all matched HTTP requests to your configured DLP Forensic Copy jobs.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/forensic-copies-for-all.fxeFrCY4_Z1rCUy9.webp&quot; alt=&quot;DLP&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Wed, 07 May 2025 00:00:00 GMT</pubDate><product>Data Loss Prevention</product><category>Data Loss Prevention</category></item><item><title>Load Balancing - UDP and ICMP Monitor Support for Private Load Balancing Endpoints</title><link>https://developers.cloudflare.com/changelog/post/2025-05-06-private-health-monitoring-methods/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-06-private-health-monitoring-methods/</guid><description>&lt;p&gt;Cloudflare Load Balancing now supports &lt;strong&gt;UDP (Layer 4)&lt;/strong&gt; and &lt;strong&gt;ICMP (Layer 3)&lt;/strong&gt; health monitors for &lt;strong&gt;private endpoints&lt;/strong&gt;. This makes it simple to track the health and availability of internal services that don’t respond to HTTP, TCP, or other protocol probes.&lt;/p&gt;
&lt;h4&gt;What you can do:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Set up &lt;strong&gt;ICMP ping monitors&lt;/strong&gt; to check if your private endpoints are reachable.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;UDP monitors&lt;/strong&gt; for lightweight health checks on non-TCP workloads, such as DNS, VoIP, or custom UDP-based services.&lt;/li&gt;
&lt;li&gt;Gain better visibility and uptime guarantees for services running behind &lt;strong&gt;Private Network Load Balancing&lt;/strong&gt;, without requiring public IP addresses.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This enhancement is ideal for internal applications that rely on low-level protocols, especially when used in conjunction with &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/&quot;&gt;&lt;strong&gt;Cloudflare Tunnel&lt;/strong&gt;&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/&quot;&gt;&lt;strong&gt;WARP&lt;/strong&gt;&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/&quot;&gt;&lt;strong&gt;Magic WAN&lt;/strong&gt;&lt;/a&gt; to create a secure and observable private network.&lt;/p&gt;
&lt;p&gt;Learn more about &lt;a href=&quot;https://developers.cloudflare.com/load-balancing/private-network/&quot;&gt;Private Network Load Balancing&lt;/a&gt; or view the full list of &lt;a href=&quot;https://developers.cloudflare.com/load-balancing/monitors/#supported-protocols&quot;&gt;supported health monitor protocols&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 06 May 2025 00:00:00 GMT</pubDate><product>Load Balancing</product><category>Load Balancing</category></item><item><title>Cloudflare Fundamentals, Terraform - Terraform v5.4.0 now available</title><link>https://developers.cloudflare.com/changelog/post/2025-05-06-terraform-v540-provider/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-06-terraform-v540-provider/</guid><description>&lt;p&gt;Earlier this year, we announced the launch of the new &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-02-03-terraform-v5-provider/&quot;&gt;Terraform v5 Provider&lt;/a&gt;. Unlike the earlier Terraform providers, v5 is automatically generated based on the OpenAPI Schemas for our REST APIs. Since launch, we have seen an unexpectedly high number of &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;issues&lt;/a&gt; reported by customers. These issues currently impact about 15% of resources. We have been working diligently to address these issues across the company, and have released the v5.4.0 release which includes a number of bug fixes. Please keep an eye on this changelog for more information about upcoming releases.&lt;/p&gt;
&lt;h4&gt;Changes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Removes the &lt;code&gt;worker_platforms_script_secret&lt;/code&gt; resource from the provider (see &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/guides/version-5-upgrade#cloudflare_worker_secret&quot; target=&quot;_blank&quot;&gt;migration guide&lt;/a&gt; for alternatives—applicable to both Workers and Workers for Platforms)&lt;/li&gt;
&lt;li&gt;Removes duplicated fields in &lt;code&gt;cloudflare_cloud_connector_rules&lt;/code&gt; resource&lt;/li&gt;
&lt;li&gt;Fixes &lt;code&gt;cloudflare_workers_route&lt;/code&gt; id issues &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5134&quot; target=&quot;_blank&quot;&gt;#5134&lt;/a&gt; &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/issues/5501&quot; target=&quot;_blank&quot;&gt;#5501&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixes issue around refreshing resources that have unsupported response types
&lt;details&gt;&lt;summary&gt;Affected resources&lt;/summary&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;cloudflare_certificate_pack&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_registrar_domain&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_stream_download&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_stream_webhook&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_user&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_workers_kv&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_workers_script&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/details&gt;
&lt;/li&gt;
&lt;li&gt;Fixes &lt;code&gt;cloudflare_workers_kv&lt;/code&gt; state refresh issues&lt;/li&gt;
&lt;li&gt;Fixes issues around configurability of nested properties without computed values for the following resources
&lt;details&gt;&lt;summary&gt;Affected resources&lt;/summary&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;cloudflare_account&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_account_dns_settings&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_account_token&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_api_token&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_cloud_connector_rules&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_custom_ssl&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_d1_database&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_dns_record&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;email_security_trusted_domains&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_hyperdrive_config&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_keyless_certificate&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_list_item&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_load_balancer&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_logpush_dataset_job&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_magic_network_monitoring_configuration&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_magic_transit_site&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_magic_transit_site_lan&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_magic_transit_site_wan&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_magic_wan_static_route&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_notification_policy&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_pages_project&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_queue&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_queue_consumer&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_r2_bucket_cors&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_r2_bucket_event_notification&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_r2_bucket_lifecycle&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_r2_bucket_lock&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_r2_bucket_sippy&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_ruleset&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_snippet_rules&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_snippets&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_spectrum_application&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_workers_deployment&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_zero_trust_access_application&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code&gt;cloudflare_zero_trust_access_group&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/details&gt;
&lt;/li&gt;
&lt;li&gt;Fixed defaults that made &lt;code&gt;cloudflare_workers_script&lt;/code&gt; fail when using Assets&lt;/li&gt;
&lt;li&gt;Fixed Workers Logpush setting in &lt;code&gt;cloudflare_workers_script&lt;/code&gt; mistakenly being readonly&lt;/li&gt;
&lt;li&gt;Fixed &lt;code&gt;cloudflare_pages_project&lt;/code&gt; broken when using &quot;source&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The detailed &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare/releases/tag/v5.4.0&quot; target=&quot;_blank&quot;&gt;changelog&lt;/a&gt; is available on GitHub.&lt;/p&gt;
&lt;h4&gt;Upgrading&lt;/h4&gt;
&lt;p&gt;If you are evaluating a move from v4 to v5, please make use of the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/guides/version-5-upgrade&quot; target=&quot;_blank&quot;&gt;migration guide&lt;/a&gt;. We have provided automated migration scripts using Grit which simplify the transition, although these do not support implementations which use Terraform modules, so customers making use of modules need to migrate manually. Please make use of &lt;code&gt;terraform plan&lt;/code&gt; to test your changes before applying, and let us know if you encounter any additional issues either by reporting to our &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;GitHub repository&lt;/a&gt;, or by opening a &lt;a href=&quot;https://www.support.cloudflare.com/s/?language=en_US&quot; target=&quot;_blank&quot;&gt;support ticket&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;For more info&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;Terraform provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/terraform/&quot; target=&quot;_blank&quot;&gt;Documentation on using Terraform with Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 06 May 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Terraform</category></item><item><title>WAF - WAF Release - 2025-05-05</title><link>https://developers.cloudflare.com/changelog/post/2025-05-05-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-05-waf-release/</guid><description>&lt;p&gt;This week&apos;s analysis covers five CVEs with varying impact levels. Four are rated critical, while one is rated high severity. Remote Code Execution vulnerabilities dominate this set.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Findings&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;GFI KerioControl (CVE-2024-52875) contains an unauthenticated Remote Code Execution (RCE) vulnerability that targets firewall appliances. This vulnerability can let attackers gain root level system access, making this CVE particularly attractive for threat actors.&lt;/p&gt;
&lt;p&gt;The SonicWall SMA vulnerabilities remain concerning due to their continued exploitation since 2021. These critical vulnerabilities in remote access solutions create dangerous entry points to networks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Customers using the Managed Ruleset will receive rule coverage following this week&apos;s release. Below is a breakdown of the recommended prioritization based on current exploitation trends:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GFI KerioControl (CVE-2024-52875) - Highest priority; unauthenticated RCE&lt;/li&gt;
&lt;li&gt;SonicWall SMA (Multiple vulnerabilities) - Critical for network appliances&lt;/li&gt;
&lt;li&gt;XWiki (CVE-2025-24893) - High priority for development environments&lt;/li&gt;
&lt;li&gt;Langflow (CVE-2025-3248) - Important for AI workflow platforms&lt;/li&gt;
&lt;li&gt;MinIO (CVE-2025-31489) - Important for object storage implementations&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;921660147baa48eaa9151077d0b7a392 &lt;/td&gt;&lt;td&gt;100724&lt;/td&gt;&lt;td&gt;GFI KerioControl - Remote Code Execution - CVE:CVE-2024-52875&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;a3900934273b4a488111f810717a9e42 &lt;/td&gt;&lt;td&gt;100748&lt;/td&gt;&lt;td&gt;XWiki - Remote Code Execution - CVE:CVE-2025-24893&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;616ad0e03892473191ca1df4e9cf745d &lt;/td&gt;&lt;td&gt;100750&lt;/td&gt;&lt;td&gt;&lt;p&gt;SonicWall SMA - Dangerous File Upload - CVE:CVE-2021-20040,
CVE:CVE-2021-20041, CVE:CVE-2021-20042&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;1a11fbe84b49451193ee1ee6d29da333 &lt;/td&gt;&lt;td&gt;100751&lt;/td&gt;&lt;td&gt;Langflow - Remote Code Execution - CVE:CVE-2025-3248&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5eb7ed601e6844828b9bdb05caa7b208 &lt;/td&gt;&lt;td&gt;100752&lt;/td&gt;&lt;td&gt;MinIO - Auth Bypass - CVE:CVE-2025-31489&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 05 May 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Browser Isolation - Browser Isolation Overview page for Zero Trust</title><link>https://developers.cloudflare.com/changelog/post/2025-05-01-browser-isolation-overview-page/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-05-01-browser-isolation-overview-page/</guid><description>&lt;p&gt;A new &lt;strong&gt;Browser Isolation Overview&lt;/strong&gt; page is now available in the Cloudflare Zero Trust dashboard. This centralized view simplifies the management of &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/remote-browser-isolation/&quot;&gt;Remote Browser Isolation (RBI)&lt;/a&gt; deployments, providing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Streamlined Onboarding:&lt;/strong&gt; Easily set up and manage isolation policies from one location.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quick Testing:&lt;/strong&gt; Validate &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/remote-browser-isolation/setup/clientless-browser-isolation/&quot;&gt;clientless web application isolation&lt;/a&gt; with ease.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simplified Configuration:&lt;/strong&gt; Configure &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/policies/isolate-application/&quot;&gt;isolated access applications&lt;/a&gt; and policies efficiently.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Centralized Monitoring:&lt;/strong&gt; Track aggregate usage and blocked actions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This update consolidates previously disparate settings, accelerating deployment, improving visibility into isolation activity, and making it easier to ensure your protections are working effectively.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/browser-isolation-overview.Ljd5ax_O_Z1SURww.webp&quot; alt=&quot;Browser Isolation Overview&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To access the new overview, log in to your Cloudflare &lt;a href=&quot;https://one.dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Zero Trust dashboard&lt;/a&gt; and find Browser Isolation in the side navigation bar.&lt;/p&gt;</description><pubDate>Thu, 01 May 2025 00:00:00 GMT</pubDate><product>Browser Isolation</product><category>Browser Isolation</category></item><item><title>R2 - R2 Dashboard experience gets new updates</title><link>https://developers.cloudflare.com/changelog/post/2025-05-01-r2-dashboard-updates/</link><guid isPermaLink="true">https://developers.cloudflare.com/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.cloudflare.com/r2/&quot;&gt;Cloudflare R2&lt;/a&gt; dashboard experience that make managing your object storage easier and more intuitive:&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/r2-dashboard-updates.B7WXxzMk_Z2vfGut.webp&quot; alt=&quot;Cloudflare R2 Dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;All-new settings page&lt;/h4&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;h4&gt;Improved navigation and sharing&lt;/h4&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;h4&gt;Clearer public access controls&lt;/h4&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>Cloudflare One - Dark Mode for Zero Trust Dashboard</title><link>https://developers.cloudflare.com/changelog/post/2025-04-30-zero-trust-dashboard-dark-mode/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-30-zero-trust-dashboard-dark-mode/</guid><description>&lt;p&gt;The &lt;a href=&quot;https://one.dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Cloudflare Zero Trust dashboard&lt;/a&gt; now supports Cloudflare&apos;s native dark mode for all accounts and plan types.&lt;/p&gt;
&lt;p&gt;Zero Trust Dashboard will automatically accept your user-level preferences for system settings, so if your Dashboard appearance is set to &apos;system&apos; or &apos;dark&apos;, the Zero Trust dashboard will enter dark mode whenever the rest of your Cloudflare account does.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/dark-mode.DfLeS20d_Z2kTwNR.webp&quot; alt=&quot;Zero Trust dashboard supports dark mode&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;Zero Trust Dashboard&lt;/p&gt;&lt;div&gt; &lt;p&gt;To update your view preference in the Zero Trust dashboard:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Log into the &lt;a href=&quot;https://one.dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Zero Trust dashboard&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Select your user icon.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Dark Mode&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt; &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Core Dashboard&lt;/p&gt;&lt;div&gt; &lt;p&gt;To update your view preference in the Core dashboard:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;Log into the &lt;a href=&quot;https://dash.cloudflare.com&quot; target=&quot;_blank&quot;&gt;Cloudflare dashboard&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;My Profile&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;For &lt;strong&gt;Appearance&lt;/strong&gt;, choose &lt;strong&gt;Dark&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt; &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;</description><pubDate>Wed, 30 Apr 2025 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category></item><item><title>Cloudflare One, Cloudflare WAN - Cloudflare One Appliance supports multiple DNS server IPs</title><link>https://developers.cloudflare.com/changelog/post/2025-04-30-appliance-multiple-dns-servers/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-30-appliance-multiple-dns-servers/</guid><description>&lt;p&gt;Cloudflare One Appliance DHCP server settings now support specifying multiple DNS server IP addresses in the DHCP pool.&lt;/p&gt;
&lt;p&gt;Previously, customers could only configure a single DNS server per DHCP pool. With this update, you can specify multiple DNS servers to provide redundancy for clients at branch locations.&lt;/p&gt;
&lt;p&gt;For configuration details, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-server/&quot;&gt;DHCP server&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 30 Apr 2025 00:00:00 GMT</pubDate><product>Cloudflare One</product><category>Cloudflare One</category><category>Cloudflare WAN</category></item><item><title>Gateway - FQDN Filtering For Gateway Egress Policies</title><link>https://developers.cloudflare.com/changelog/post/2025-04-28-fdqn-filtering-egress-policies/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-28-fdqn-filtering-egress-policies/</guid><description>&lt;p&gt;Cloudflare One administrators can now control which egress IP is used based on a destination&apos;s fully qualified domain name (FDQN) within Gateway Egress policies.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Host, Domain, Content Categories, and Application selectors are now available in the Gateway Egress policy builder in beta.&lt;/li&gt;
&lt;li&gt;During the beta period, you can use these selectors with traffic on-ramped to Gateway with the WARP client, proxy endpoints (commonly deployed with PAC files), or Cloudflare Browser Isolation.
&lt;ul&gt;
&lt;li&gt;For WARP client support, additional configuration is required. For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/egress-policies/#limitations&quot;&gt;WARP client configuration documentation&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/Gateway-Egress-FQDN-Policy-preview.Civon5p8_Z2hcuQE.webp&quot; alt=&quot;Egress by FQDN and Hostname&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;This will help apply egress IPs to your users&apos; traffic when an upstream application or network requires it, while the rest of their traffic can take the most performant egress path.&lt;/p&gt;</description><pubDate>Mon, 28 Apr 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>WAF - WAF Release - 2025-04-26 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-04-26-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-26-emergency-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;54ea354d7f2d43c69b238d1419fcc883 &lt;/td&gt;&lt;td&gt;100755&lt;/td&gt;&lt;td&gt;&lt;p&gt;React.js - Router and Remix Vulnerability - CVE:CVE-2025-43864,
CVE:CVE-2025-43865&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Sat, 26 Apr 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Rules - Custom Errors are now Generally Available</title><link>https://developers.cloudflare.com/changelog/post/2025-04-24-custom-errors-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-24-custom-errors-ga/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/rules/custom-errors/&quot;&gt;Custom Errors&lt;/a&gt; are now generally available for all paid plans — bringing a unified and powerful experience for customizing error responses at both the zone and account levels.&lt;/p&gt;
&lt;p&gt;You can now manage &lt;strong&gt;Custom Error Rules&lt;/strong&gt;, &lt;strong&gt;Custom Error Assets&lt;/strong&gt;, and redesigned &lt;strong&gt;Error Pages&lt;/strong&gt; directly from the Cloudflare dashboard. These features let you deliver tailored messaging when errors occur, helping you maintain brand consistency and improve user experience — whether it’s a 404 from your origin or a security challenge from Cloudflare.&lt;/p&gt;
&lt;p&gt;What&apos;s new:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Custom Errors are now GA&lt;/strong&gt; – Available on all paid plans and ready for production traffic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UI for Custom Error Rules and Assets&lt;/strong&gt; – Manage your zone-level rules from the Rules &gt; Overview and your zone-level assets from the Rules &gt; Settings tabs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Define inline content or upload assets&lt;/strong&gt; – Create custom responses directly in the rule builder, upload new or reuse previously stored assets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Refreshed UI and new name for Error Pages&lt;/strong&gt; – Formerly known as “Custom Pages,” Error Pages now offer a cleaner, more intuitive experience for both zone and account-level configurations.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Powered by Ruleset Engine&lt;/strong&gt; – Custom Error Rules support &lt;a href=&quot;https://developers.cloudflare.com/ruleset-engine/rules-language/&quot;&gt;conditional logic&lt;/a&gt; and override Error Pages for 500 and 1000 class errors, as well as errors originating from your origin or &lt;a href=&quot;https://developers.cloudflare.com/ruleset-engine/reference/phases-list/&quot;&gt;other Cloudflare products&lt;/a&gt;. You can also configure &lt;a href=&quot;https://developers.cloudflare.com/rules/transform/response-header-modification/&quot;&gt;Response Header Transform Rules&lt;/a&gt; to add, change, or remove HTTP headers from responses returned by Custom Error Rules.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learn more in the &lt;a href=&quot;https://developers.cloudflare.com/rules/custom-errors/&quot;&gt;Custom Errors documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 24 Apr 2025 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Workers - Cron triggers are now supported in Python Workers</title><link>https://developers.cloudflare.com/changelog/post/2025-04-22-python-worker-cron-triggers/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-22-python-worker-cron-triggers/</guid><description>&lt;p&gt;You can now create Python Workers which are executed via a cron trigger.&lt;/p&gt;
&lt;p&gt;This is similar to how it&apos;s done in JavaScript Workers, simply define a scheduled event
listener in your Worker:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;python&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; workers &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; handler&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;handler&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;on_scheduled&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;env&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ctx&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;print&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;cron processed&quot;&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;Define a cron trigger configuration in your Wrangler configuration file:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;triggers&lt;/span&gt;&lt;span&gt;&quot;&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;// Schedule cron triggers:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// - At every 3rd minute&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// - At 15:00 (UTC) on first day of the month&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// - At 23:59 (UTC) on the last weekday of the month&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;crons&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;*/3 * * * *&quot;&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;&quot;0 15 1 * *&quot;&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;&quot;59 23 LW * *&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;triggers&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;crons&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;span&gt; &lt;/span&gt;&lt;span&gt;&quot;*/3 * * * *&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;0 15 1 * *&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;59 23 LW * *&quot;&lt;/span&gt;&lt;span&gt; &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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Then test your new handler by using Wrangler with the &lt;code&gt;--test-scheduled&lt;/code&gt; flag and
making a request to &lt;code&gt;/cdn-cgi/handler/scheduled?cron=*+*+*+*+*&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&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;dev&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--test-scheduled&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;http://localhost:8787/cdn-cgi/handler/scheduled?cron=*+*+*+*+*&quot;&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;Consult the &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/cron-triggers/&quot;&gt;Workers Cron Triggers page&lt;/a&gt; for full details on cron triggers in Workers.&lt;/p&gt;</description><pubDate>Thu, 24 Apr 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>AI Search - Metadata filtering and multitenancy support in AutoRAG</title><link>https://developers.cloudflare.com/changelog/post/2025-04-23-autorag-metadata-filtering/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-23-autorag-metadata-filtering/</guid><description>&lt;p&gt;You can now filter &lt;a href=&quot;https://developers.cloudflare.com/ai-search/&quot;&gt;AutoRAG&lt;/a&gt; search results by &lt;code&gt;folder&lt;/code&gt; and &lt;code&gt;timestamp&lt;/code&gt; using &lt;a href=&quot;https://developers.cloudflare.com/ai-search/configuration/metadata&quot;&gt;metadata filtering&lt;/a&gt; to narrow down the scope of your query.&lt;/p&gt;
&lt;p&gt;This makes it easy to build &lt;a href=&quot;https://developers.cloudflare.com/ai-search/how-to/multitenancy/&quot;&gt;multitenant experiences&lt;/a&gt; where each user can only access their own data. By organizing your content into per-tenant folders and applying a &lt;code&gt;folder&lt;/code&gt; filter at query time, you ensure that each tenant retrieves only their own documents.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example folder structure:&lt;/strong&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;customer-a/logs/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;customer-a/contracts/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;customer-b/contracts/&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;&lt;strong&gt;Example query:&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;autorag&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;my-autorag&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;search&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;query&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;When did I sign my agreement contract?&quot;&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;filters&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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;eq&quot;&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;key&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;folder&quot;&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;value&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;customer-a/contracts/&quot;&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;;&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;You can use metadata filtering by creating a new AutoRAG or reindexing existing data. To reindex all content in an existing AutoRAG, update any chunking setting and select &lt;strong&gt;Sync index&lt;/strong&gt;. Metadata filtering is available for all data indexed on or after &lt;strong&gt;April 21, 2025&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If you are new to AutoRAG, get started with the &lt;a href=&quot;https://developers.cloudflare.com/ai-search/get-started/&quot;&gt;Get started AutoRAG guide&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 23 Apr 2025 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.4.589.1)</title><link>https://developers.cloudflare.com/changelog/post/2025-04-22-warp-windows-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-22-warp-windows-beta/</guid><description>&lt;p&gt;A new Beta release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue causing reconnection loops when captive portals are detected.&lt;/li&gt;
&lt;li&gt;Fixed an issue that caused WARP client disk encryption posture checks to fail due to missing drive names.&lt;/li&gt;
&lt;li&gt;Fixed an issue where managed network policies could incorrectly report network location beacons as missing.&lt;/li&gt;
&lt;li&gt;Improved error reporting for DEX tests.&lt;/li&gt;
&lt;li&gt;Improved WARP client UI high contrast mode.&lt;/li&gt;
&lt;li&gt;Fixed an issue causing client notifications to fail in IPv6 only environments which prevented the client from receiving configuration changes to settings like device profile.&lt;/li&gt;
&lt;li&gt;Added a TCP fallback for the MASQUE tunnel protocol to improve compatibility with networks on MASQUE.&lt;/li&gt;
&lt;li&gt;Added new IP addresses for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/firewall/#connectivity-checks&quot;&gt;tunnel connectivity checks&lt;/a&gt;. If your organization uses a firewall or other policies you will need to exempt these IPs.&lt;/li&gt;
&lt;li&gt;DNS over HTTPS traffic is now included in the WARP tunnel by default.&lt;/li&gt;
&lt;li&gt;Improved the error message displayed in the client GUI when the rate limit for entering an incorrect admin override code is met.&lt;/li&gt;
&lt;li&gt;Added a &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/captive-portals/#get-captive-portal-logs&quot;&gt;Collect Captive Portal Diag&lt;/a&gt; button in the client GUI to make it easier for users to collect captive portal debugging diagnostics.&lt;/li&gt;
&lt;li&gt;Improved handling of non-SLAAC IPv6 interface addresses for better connectivity in IPv6 only environments.&lt;/li&gt;
&lt;li&gt;Fixed an issue where frequent network changes could cause WARP to become unresponsive.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 22 Apr 2025 20:20:21 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.4.589.1)</title><link>https://developers.cloudflare.com/changelog/post/2025-04-22-warp-macos-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-22-warp-macos-beta/</guid><description>&lt;p&gt;A new Beta release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/beta-releases/&quot;&gt;beta releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue where managed network policies could incorrectly report network location beacons as missing.&lt;/li&gt;
&lt;li&gt;Improved DEX test error reporting.&lt;/li&gt;
&lt;li&gt;Fixed an issue causing client notifications to fail in IPv6 only environments which prevented the client from receiving configuration changes to settings like device profile.&lt;/li&gt;
&lt;li&gt;Improved captive portal detection.&lt;/li&gt;
&lt;li&gt;Added a TCP fallback for the MASQUE tunnel protocol to improve compatibility with networks on MASQUE.&lt;/li&gt;
&lt;li&gt;Added new IP addresses for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/firewall/#connectivity-checks&quot;&gt;tunnel connectivity checks&lt;/a&gt;. If your organization uses a firewall or other policies you will need to exempt these IPs.&lt;/li&gt;
&lt;li&gt;DNS over HTTPS traffic is now included in the WARP tunnel by default.&lt;/li&gt;
&lt;li&gt;Improved the error message displayed in the client GUI when the rate limit for entering an incorrect admin override code is met.&lt;/li&gt;
&lt;li&gt;Added a &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/captive-portals/#get-captive-portal-logs&quot;&gt;Collect Captive Portal Diag&lt;/a&gt; button in the client GUI to make it easier for users to collect captive portal debugging diagnostics.&lt;/li&gt;
&lt;li&gt;Improved handling of non-SLAAC IPv6 interface addresses for better connectivity in IPv6 only environments.&lt;/li&gt;
&lt;li&gt;Fixed an issue where frequent network changes could cause WARP to become unresponsive.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS Sequoia: Due to changes Apple introduced in macOS 15.0.x, the WARP client may not behave as expected. Cloudflare recommends the use of macOS 15.4 or later.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 22 Apr 2025 20:20:21 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>WAF - WAF Release - 2025-04-22</title><link>https://developers.cloudflare.com/changelog/post/2025-04-22-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-22-waf-release/</guid><description>&lt;p&gt;Each of this week&apos;s rule releases covers a distinct CVE, with half of the rules targeting Remote Code Execution (RCE) attacks. Of the 6 CVEs covered, four were scored as critical, with the other two scored as high.&lt;/p&gt;
&lt;p&gt;When deciding which exploits to tackle, Cloudflare tunes into the attackers&apos; areas of focus. Cloudflare&apos;s network intelligence provides a unique lens into attacker activity – for instance, through the volume of blocked requests related with CVE exploits after updating WAF Managed Rules with new detections.&lt;/p&gt;
&lt;p&gt;From this week&apos;s releases, one indicator that RCE is a &quot;hot topic&quot; attack type is the fact that the Oracle PeopleSoft RCE rule accounts for half of all of the new rule matches. This rule patches CVE-2023-22047, a high-severity vulnerability in the Oracle PeopleSoft suite that allows unauthenticated attackers to access PeopleSoft Enterprise PeopleTools data through remote code execution. This is particularly concerning because of the nature of the data managed by PeopleSoft – this can include payroll records or student profile information. This CVE, along with five others, are addressed with the latest detection update to WAF Managed Rules.&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;faa032d9825e4844a1188f3ba5be3327 &lt;/td&gt;&lt;td&gt;100738&lt;/td&gt;&lt;td&gt;GitLab - Auth Bypass - CVE:CVE-2023-7028&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;2e96b6d5cdd94f7782b90e266c9531fa &lt;/td&gt;&lt;td&gt;100740&lt;/td&gt;&lt;td&gt;Splunk Enterprise - Remote Code Execution - CVE:CVE-2025-20229&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5c9c095bc1e5411195edb893f40bbc2b &lt;/td&gt;&lt;td&gt;100741&lt;/td&gt;&lt;td&gt;Oracle PeopleSoft - Remote Code Execution - CVE:CVE-2023-22047&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;1d7a3932296c42fd827055335462167c &lt;/td&gt;&lt;td&gt;100742&lt;/td&gt;&lt;td&gt;CrushFTP - Auth Bypass - CVE:CVE-2025-31161&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5eb7ed601e6844828b9bdb05caa7b208 &lt;/td&gt;&lt;td&gt;100743&lt;/td&gt;&lt;td&gt;Ivanti - Buffer Error - CVE:CVE-2025-22457&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;410317f1e32b41859fa3214dd52139a8 &lt;/td&gt;&lt;td&gt;100744&lt;/td&gt;&lt;td&gt;&lt;p&gt;Oracle Access Manager - Remote Code Execution - CVE:CVE-2021-35587&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Tue, 22 Apr 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Access - Access bulk policy tester</title><link>https://developers.cloudflare.com/changelog/post/2025-04-21-access-bulk-policy-tester/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-21-access-bulk-policy-tester/</guid><description>&lt;p&gt;The &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/policies/policy-management/#test-all-policies-in-an-application&quot;&gt;Access bulk policy tester&lt;/a&gt; is now available in the Cloudflare Zero Trust dashboard. The bulk policy tester allows you to simulate Access policies against your entire user base before and after deploying any changes. The policy tester will simulate the configured policy against each user&apos;s last seen identity and device posture (if applicable).&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/example-policy-tester.DCY8hQvx_2nxAfs.webp&quot; alt=&quot;Example policy tester&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Mon, 21 Apr 2025 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Logs - Custom fields raw and transformed values support</title><link>https://developers.cloudflare.com/changelog/post/2025-04-18-custom-fields-raw-transformed-values/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-18-custom-fields-raw-transformed-values/</guid><description>&lt;p&gt;Custom Fields now support logging both &lt;strong&gt;raw and transformed values&lt;/strong&gt; for request and response headers in the HTTP requests dataset.&lt;/p&gt;
&lt;p&gt;These fields are configured per zone and apply to all Logpush jobs in that zone that include request headers, response headers. Each header can be logged in only one format—either raw or transformed—not both.&lt;/p&gt;
&lt;p&gt;By default:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Request headers are logged as raw values&lt;/li&gt;
&lt;li&gt;Response headers are logged as transformed values&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These defaults can be overidden to suit your logging needs.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;Transformed and raw values for request and response headers are available &lt;strong&gt;only via the API&lt;/strong&gt; and cannot be set through the UI.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;For more information refer to &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/custom-fields/&quot;&gt;Custom fields&lt;/a&gt; documentation&lt;/p&gt;</description><pubDate>Fri, 18 Apr 2025 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>Queues - Increased limits for Queues pull consumers</title><link>https://developers.cloudflare.com/changelog/post/2025-04-17-pull-consumer-limits/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-17-pull-consumer-limits/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/queues/configuration/pull-consumers/&quot;&gt;Queues pull consumers&lt;/a&gt; can now pull and acknowledge up to &lt;strong&gt;5,000 messages / second per queue&lt;/strong&gt;. Previously, pull consumers were rate limited to 1,200 requests / 5 minutes, aggregated across all queues.&lt;/p&gt;
&lt;p&gt;Pull consumers allow you to consume messages over HTTP from any environment—including outside of &lt;a href=&quot;https://developers.cloudflare.com/workers&quot;&gt;Cloudflare Workers&lt;/a&gt;. They’re also useful when you need fine-grained control over how quickly messages are consumed.&lt;/p&gt;
&lt;p&gt;To setup a new queue with a pull based consumer using &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt;, run:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&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;queues&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-queue&lt;/span&gt;&lt;/div&gt;&lt;/div&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;queues&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;consumer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;http&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-queue&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;You can also configure a pull consumer using the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/queues/subresources/consumers/methods/create/&quot;&gt;REST API&lt;/a&gt; or the Queues dashboard.&lt;/p&gt;
&lt;p&gt;Once configured, you can pull messages from the queue using any HTTP client. You&apos;ll need a &lt;a href=&quot;https://developers.cloudflare.com/fundamentals/api/get-started/create-token/&quot;&gt;Cloudflare API Token&lt;/a&gt; with &lt;code&gt;queues_read&lt;/code&gt; and &lt;code&gt;queues_write&lt;/code&gt; permissions. For example:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.cloudflare.com/client/v4/accounts/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;CF_ACCOUNT_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/queues/&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;QUEUE_ID&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;/messages/pull&quot;&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;--header &lt;/span&gt;&lt;span&gt;&quot;Authorization: Bearer &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;API_TOKEN&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&quot;&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;--header &lt;/span&gt;&lt;span&gt;&quot;Content-Type: application/json&quot;&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;--data &lt;/span&gt;&lt;span&gt;&apos;{ &quot;visibility_timeout&quot;: 10000, &quot;batch_size&quot;: 2 }&apos;&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;To learn more about how to acknowledge messages, pull batches at once, and setup multiple consumers, refer to the &lt;a href=&quot;https://developers.cloudflare.com/queues/configuration/pull-consumers&quot;&gt;pull consumer documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As always, Queues doesn&apos;t charge for data egress. Pull operations continue to be billed at the &lt;a href=&quot;https://developers.cloudflare.com/queues/platform/pricing&quot;&gt;existing rate&lt;/a&gt;, of $0.40 / million operations. The increased limits are available now, on all new and existing queues. If you&apos;re new to Queues, &lt;a href=&quot;https://developers.cloudflare.com/queues/get-started&quot;&gt;get started with the Cloudflare Queues guide&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 17 Apr 2025 12:00:00 GMT</pubDate><product>Queues</product><category>Queues</category></item><item><title>KV - Read multiple keys from Workers KV with bulk reads</title><link>https://developers.cloudflare.com/changelog/post/2025-04-10-kv-bulk-reads/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-10-kv-bulk-reads/</guid><description>&lt;p&gt;You can now retrieve up to 100 keys in a single bulk read request made to Workers KV using the binding.&lt;/p&gt;
&lt;p&gt;This makes it easier to request multiple KV pairs within a single Worker invocation. Retrieving many key-value pairs using the bulk read operation is more performant than making individual requests since bulk read operations are not affected by &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/limits/#simultaneous-open-connections&quot;&gt;Workers simultaneous connection limits&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Read single key&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;key-a&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;NAMESPACE&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;key&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Read multiple keys&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;keys&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;key-a&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;key-b&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;key-c&quot;&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;span&gt;// up to 100 keys&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Map&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;&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;span&gt;&lt;span&gt;&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;span&gt;await&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;NAMESPACE&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;keys&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Print the value of &quot;key-a&quot; to the console.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`The first key is &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;values&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;key-a&quot;&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;/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;Consult the &lt;a href=&quot;https://developers.cloudflare.com/kv/api/read-key-value-pairs/&quot;&gt;Workers KV Read key-value pairs API&lt;/a&gt; for full details on Workers KV&apos;s new bulk reads support.&lt;/p&gt;</description><pubDate>Thu, 17 Apr 2025 00:00:00 GMT</pubDate><product>KV</product><category>KV</category></item><item><title>Workers, Workers for Platforms - Fixed and documented Workers Routes and Secrets API</title><link>https://developers.cloudflare.com/changelog/post/2025-04-15-workers-api-fixes/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-15-workers-api-fixes/</guid><description>&lt;h4&gt;Workers Routes API&lt;/h4&gt;
&lt;p&gt;Previously, a request to the Workers &lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/routes/methods/create/&quot;&gt;Create Route API&lt;/a&gt; always returned &lt;code&gt;null&lt;/code&gt; for &quot;script&quot; and an empty string for &quot;pattern&quot; even if the request was successful.&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://api.cloudflare.com/client/v4/zones/&lt;/span&gt;&lt;span&gt;$CF_ACCOUNT_ID&lt;/span&gt;&lt;span&gt;/workers/routes&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;-X &lt;/span&gt;&lt;span&gt;PUT&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;-H &lt;/span&gt;&lt;span&gt;&quot;Authorization: Bearer &lt;/span&gt;&lt;span&gt;$CF_API_TOKEN&lt;/span&gt;&lt;span&gt;&quot;&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;-H &lt;/span&gt;&lt;span&gt;&apos;Content-Type: application/json&apos;&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;--data &lt;/span&gt;&lt;span&gt;&apos;{ &quot;pattern&quot;: &quot;example.com/*&quot;, &quot;script&quot;: &quot;hello-world-script&quot; }&apos;&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;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;bf153a27ba2b464bb9f04dcf75de1ef9&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;pattern&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&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;&quot;&lt;/span&gt;&lt;span&gt;request_limit_fail_open&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;&quot;&lt;/span&gt;&lt;span&gt;success&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;&quot;&lt;/span&gt;&lt;span&gt;errors&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;&quot;&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;/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;Now, it properly returns all values!&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;bf153a27ba2b464bb9f04dcf75de1ef9&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;pattern&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;example.com/*&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;script&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;hello-world-script&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;request_limit_fail_open&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;&quot;&lt;/span&gt;&lt;span&gt;success&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;&quot;&lt;/span&gt;&lt;span&gt;errors&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;&quot;&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;/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;h4&gt;Workers Secrets API&lt;/h4&gt;
&lt;p&gt;The &lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/scripts/subresources/secrets/&quot;&gt;Workers&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers_for_platforms/subresources/dispatch/subresources/namespaces/subresources/scripts/subresources/secrets/&quot;&gt;Workers for Platforms&lt;/a&gt; secrets APIs are now properly documented in the Cloudflare OpenAPI docs. Previously, these endpoints were not publicly documented, leaving users confused on how to directly manage their secrets via the API. Now, you can find the proper endpoints in our public documentation, as well as in our API Library SDKs such as &lt;a href=&quot;https://github.com/cloudflare/cloudflare-typescript&quot; target=&quot;_blank&quot;&gt;cloudflare-typescript&lt;/a&gt; (&gt;4.2.0) and &lt;a href=&quot;https://github.com/cloudflare/cloudflare-python&quot; target=&quot;_blank&quot;&gt;cloudflare-python&lt;/a&gt; (&gt;4.1.0).&lt;/p&gt;
&lt;p&gt;Note the &lt;code&gt;cloudflare_workers_secret&lt;/code&gt; and &lt;code&gt;cloudflare_workers_for_platforms_script_secret&lt;/code&gt; &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;Terraform resources&lt;/a&gt; are being removed in a future release. This resource is not recommended for managing secrets. Users should instead use the:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/secrets_store/&quot;&gt;Secrets Store&lt;/a&gt; with the &quot;Secrets Store Secret&quot; binding on Workers and Workers for Platforms Script Upload&lt;/li&gt;
&lt;li&gt;&quot;Secret Text&quot; Binding on &lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/scripts/methods/update/&quot;&gt;Workers Script Upload&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers_for_platforms/subresources/dispatch/subresources/namespaces/subresources/scripts/methods/update/&quot;&gt;Workers for Platforms Script Upload&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Workers (and WFP) Secrets API&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 15 Apr 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category><category>Workers for Platforms</category></item><item><title>Data Loss Prevention - New predefined detection entry for ICD-11</title><link>https://developers.cloudflare.com/changelog/post/2025-04-14-icd11-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-14-icd11-support/</guid><description>&lt;p&gt;You now have access to the World Health Organization (WHO) 2025 edition of the &lt;a href=&quot;https://www.who.int/news/item/14-02-2025-who-releases-2025-update-to-the-international-classification-of-diseases-%28icd-11%29&quot; target=&quot;_blank&quot;&gt;International Classification of Diseases 11th Revision (ICD-11)&lt;/a&gt; as a predefined detection entry. The new dataset can be found in the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/dlp-profiles/predefined-profiles/#health-information&quot;&gt;Health Information&lt;/a&gt; predefined profile.&lt;/p&gt;
&lt;p&gt;ICD-10 dataset remains available for use.&lt;/p&gt;</description><pubDate>Mon, 14 Apr 2025 00:00:00 GMT</pubDate><product>Data Loss Prevention</product><category>Data Loss Prevention</category></item><item><title>WAF - WAF Release - 2025-04-14</title><link>https://developers.cloudflare.com/changelog/post/2025-04-14-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-14-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;9209bb65527f4c088bca5ffad6b2d36c &lt;/td&gt;&lt;td&gt;100739A&lt;/td&gt;&lt;td&gt;Next.js - Auth Bypass - CVE:CVE-2025-29927 - 2&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 14 Apr 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Gateway - HTTP redirect and custom block page redirect</title><link>https://developers.cloudflare.com/changelog/post/2025-04-11-http-redirect-custom-block-page-redirect/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-11-http-redirect-custom-block-page-redirect/</guid><description>&lt;p&gt;You can now use more flexible redirect capabilities in Cloudflare One with Gateway.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A new &lt;strong&gt;Redirect&lt;/strong&gt; action is available in the HTTP policy builder, allowing admins to redirect users to any URL when their request matches a policy. You can choose to preserve the original URL and query string, and optionally include policy context via query parameters.&lt;/li&gt;
&lt;li&gt;For &lt;strong&gt;Block&lt;/strong&gt; actions, admins can now configure a custom URL to display when access is denied. This block page redirect is set at the account level and can be overridden in DNS or HTTP policies. Policy context can also be passed along in the URL.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learn more in our documentation for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/http-policies/#redirect&quot;&gt;HTTP Redirect&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/reusable-components/custom-pages/gateway-block-page/#redirect-to-a-block-page&quot;&gt;Block page redirect&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 11 Apr 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>Stream - Signed URLs and Infrastructure Improvements on Stream Live WebRTC Beta</title><link>https://developers.cloudflare.com/changelog/post/2025-04-14-webrtc-beta-signed-urls/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-14-webrtc-beta-signed-urls/</guid><description>&lt;p&gt;Cloudflare &lt;a href=&quot;https://developers.cloudflare.com/stream/&quot;&gt;Stream&lt;/a&gt; has completed an infrastructure upgrade for our &lt;a href=&quot;https://developers.cloudflare.com/stream/webrtc-beta/&quot;&gt;Live WebRTC beta&lt;/a&gt; support which brings increased scalability and improved playback performance to all customers. WebRTC allows broadcasting directly from a browser (or supported WHIP client) with ultra-low latency to tens of thousands of concurrent viewers across the globe.&lt;/p&gt;
&lt;p&gt;Additionally, as part of this upgrade, the WebRTC beta now supports Signed URLs to protect playback, just like our standard live stream options (HLS/DASH).&lt;/p&gt;
&lt;p&gt;For more information, learn about the &lt;a href=&quot;https://developers.cloudflare.com/stream/webrtc-beta/&quot;&gt;Stream Live WebRTC beta&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 11 Apr 2025 00:00:00 GMT</pubDate><product>Stream</product><category>Stream</category></item><item><title>Workers AI - Workers AI for Developer Week - faster inference, new models, async batch API, expanded LoRA support</title><link>https://developers.cloudflare.com/changelog/post/2025-04-11-new-models-faster-inference/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-11-new-models-faster-inference/</guid><description>&lt;p&gt;Happy Developer Week 2025! Workers AI is excited to announce a couple of new features and improvements available today. Check out our &lt;a href=&quot;https://blog.cloudflare.com/workers-ai-improvements&quot; target=&quot;_blank&quot;&gt;blog&lt;/a&gt; for all the announcement details.&lt;/p&gt;
&lt;h4&gt;Faster inference + New models&lt;/h4&gt;
&lt;p&gt;We’re rolling out some in-place improvements to our models that can help speed up inference by 2-4x! Users of the models below will enjoy an automatic speed boost starting today:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/llama-3.3-70b-instruct-fp8-fast/&quot;&gt;&lt;code&gt;@cf/meta/llama-3.3-70b-instruct-fp8-fast&lt;/code&gt;&lt;/a&gt; gets a speed boost of 2-4x, leveraging techniques like speculative decoding, prefix caching, and an updated inference backend.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/bge-small-en-v1.5/&quot;&gt;&lt;code&gt;@cf/baai/bge-small-en-v1.5&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/bge-base-en-v1.5/&quot;&gt;&lt;code&gt;@cf/baai/bge-base-en-v1.5&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/bge-large-en-v1.5/&quot;&gt;&lt;code&gt;@cf/baai/bge-large-en-v1.5&lt;/code&gt;&lt;/a&gt; get an updated back end, which should improve inference times by 2x.
&lt;ul&gt;
&lt;li&gt;With the &lt;code&gt;bge&lt;/code&gt; models, we’re also announcing a new parameter called &lt;code&gt;pooling&lt;/code&gt; which can take &lt;code&gt;cls&lt;/code&gt; or &lt;code&gt;mean&lt;/code&gt; as options. We highly recommend using &lt;code&gt;pooling: cls&lt;/code&gt; which will help generate more accurate embeddings. However, embeddings generated with cls pooling are not backwards compatible with mean pooling. For this to not be a breaking change, the default remains as mean pooling. Please specify &lt;code&gt;pooling: cls&lt;/code&gt; to enjoy more accurate embeddings going forward.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’re also excited to launch a few new models in our catalog to help round out your experience with Workers AI. We’ll be deprecating some older models in the future, so stay tuned for a deprecation announcement. Today’s new models include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/mistral-small-3.1-24b-instruct/&quot;&gt;&lt;code&gt;@cf/mistralai/mistral-small-3.1-24b-instruct&lt;/code&gt;&lt;/a&gt;: a 24B parameter model achieving state-of-the-art capabilities comparable to larger models, with support for vision and tool calling.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/gemma-3-12b-it/&quot;&gt;&lt;code&gt;@cf/google/gemma-3-12b-it&lt;/code&gt;&lt;/a&gt;: well-suited for a variety of text generation and image understanding tasks, including question answering, summarization and reasoning, with a 128K context window, and multilingual support in over 140 languages.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/qwq-32b/&quot;&gt;&lt;code&gt;@cf/qwen/qwq-32b&lt;/code&gt;&lt;/a&gt;: a medium-sized reasoning model, which is capable of achieving competitive performance against state-of-the-art reasoning models, e.g., DeepSeek-R1, o1-mini.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/qwen2.5-coder-32b-instruct/&quot;&gt;&lt;code&gt;@cf/qwen/qwen2.5-coder-32b-instruct&lt;/code&gt;&lt;/a&gt;: the current state-of-the-art open-source code LLM, with its coding abilities matching those of GPT-4o.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Batch Inference&lt;/h4&gt;
&lt;p&gt;Introducing a new batch inference feature that allows you to send us an array of requests, which we will fulfill as fast as possible and send them back as an array. This is really helpful for large workloads such as summarization, embeddings, etc. where you don’t have a human-in-the-loop. Using the batch API will guarantee that your requests are fulfilled eventually, rather than erroring out if we don’t have enough capacity at a given time.&lt;/p&gt;
&lt;p&gt;Check out the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/features/batch-api/&quot;&gt;tutorial&lt;/a&gt; to get started! Models that support batch inference today include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/llama-3.3-70b-instruct-fp8-fast/&quot;&gt;&lt;code&gt;@cf/meta/llama-3.3-70b-instruct-fp8-fast&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/bge-small-en-v1.5/&quot;&gt;&lt;code&gt;@cf/baai/bge-small-en-v1.5&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/bge-base-en-v1.5/&quot;&gt;&lt;code&gt;@cf/baai/bge-base-en-v1.5&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/bge-large-en-v1.5/&quot;&gt;&lt;code&gt;@cf/baai/bge-large-en-v1.5&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/bge-m3/&quot;&gt;&lt;code&gt;@cf/baai/bge-m3&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/m2m100-1.2b/&quot;&gt;&lt;code&gt;@cf/meta/m2m100-1.2b&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Expanded LoRA support&lt;/h4&gt;
&lt;p&gt;We’ve upgraded our LoRA experience to include 8 newer models, and can support ranks of up to 32 with a 300MB safetensors file limit (previously limited to rank of 8 and 100MB safetensors) Check out our &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/features/fine-tunes/loras/&quot;&gt;LoRAs page&lt;/a&gt; to get started. Models that support LoRAs now include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/llama-3.2-11b-vision-instruct/&quot;&gt;&lt;code&gt;@cf/meta/llama-3.2-11b-vision-instruct&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/llama-3.3-70b-instruct-fp8-fast/&quot;&gt;&lt;code&gt;@cf/meta/llama-3.3-70b-instruct-fp8-fast&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/llama-guard-3-8b/&quot;&gt;&lt;code&gt;@cf/meta/llama-guard-3-8b&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/llama-3.1-8b-instruct-fast/&quot;&gt;&lt;code&gt;@cf/meta/llama-3.1-8b-instruct-fast&lt;/code&gt;&lt;/a&gt; (coming soon)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/deepseek-r1-distill-qwen-32b/&quot;&gt;&lt;code&gt;@cf/deepseek-ai/deepseek-r1-distill-qwen-32b&lt;/code&gt;&lt;/a&gt; (coming soon)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/qwen2.5-coder-32b-instruct/&quot;&gt;&lt;code&gt;@cf/qwen/qwen2.5-coder-32b-instruct&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/qwq-32b/&quot;&gt;&lt;code&gt;@cf/qwen/qwq-32b&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/mistral-small-3.1-24b-instruct/&quot;&gt;&lt;code&gt;@cf/mistralai/mistral-small-3.1-24b-instruct&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/gemma-3-12b-it/&quot;&gt;&lt;code&gt;@cf/google/gemma-3-12b-it&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 11 Apr 2025 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>D1, Workers - D1 Read Replication Public Beta</title><link>https://developers.cloudflare.com/changelog/post/2025-04-10-d1-read-replication-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-10-d1-read-replication-beta/</guid><description>&lt;p&gt;D1 read replication is available in public beta to help lower average latency and increase overall throughput for read-heavy applications like e-commerce websites or content management tools.&lt;/p&gt;
&lt;p&gt;Workers can leverage read-only database copies, called read replicas, by using D1 &lt;a href=&quot;https://developers.cloudflare.com/d1/best-practices/read-replication&quot;&gt;Sessions API&lt;/a&gt;. A session encapsulates all the queries from one logical session for your application. For example, a session may correspond to all queries coming from a particular web browser session. With Sessions API, D1 queries in a session are guaranteed to be &lt;a href=&quot;https://developers.cloudflare.com/d1/best-practices/read-replication/#replica-lag-and-consistency-model&quot;&gt;sequentially consistent&lt;/a&gt; to avoid data consistency pitfalls. D1 &lt;a href=&quot;https://developers.cloudflare.com/d1/reference/time-travel/#bookmarks&quot;&gt;bookmarks&lt;/a&gt; can be used from a previous session to ensure logical consistency between sessions.&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;// retrieve bookmark from previous session stored in HTTP header&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bookmark&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;x-d1-bookmark&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;??&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;first-unconstrained&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;session&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;DB&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;withSession&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;bookmark&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;session&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;prepare&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`SELECT * FROM Customers WHERE CompanyName = &apos;Bs Beverages&apos;`&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;run&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;// store bookmark for a future session&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;x-d1-bookmark&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;session&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getBookmark&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;??&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&lt;/span&gt;&lt;span&gt;)&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;Read replicas are automatically created by Cloudflare (currently one in each supported &lt;a href=&quot;https://developers.cloudflare.com/d1/best-practices/read-replication/#read-replica-locations&quot;&gt;D1 region&lt;/a&gt;), are active/inactive based on query traffic, and are transparently routed to by Cloudflare at no additional cost.&lt;/p&gt;
&lt;p&gt;To checkout D1 read replication, deploy the following Worker code using Sessions API, which will prompt you to create a D1 database and enable read replication on said database.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/templates/tree/main/d1-starter-sessions-api&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://deploy.workers.cloudflare.com/button&quot; alt=&quot;Deploy to Cloudflare&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To learn more about how read replication was implemented, go to our &lt;a href=&quot;https://blog.cloudflare.com/d1-read-replication-beta&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 10 Apr 2025 00:00:00 GMT</pubDate><product>D1</product><category>D1</category><category>Workers</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><item><title>R2 - R2 Data Catalog is a managed Apache Iceberg data catalog built directly into R2 buckets</title><link>https://developers.cloudflare.com/changelog/post/2025-04-10-r2-data-catalog-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-10-r2-data-catalog-beta/</guid><description>&lt;p&gt;Today, we&apos;re launching &lt;a href=&quot;https://developers.cloudflare.com/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.cloudflare.com/r2/&quot;&gt;Cloudflare R2&lt;/a&gt; bucket.&lt;/p&gt;
&lt;p&gt;If you&apos;re not already familiar with it, &lt;a href=&quot;https://iceberg.apache.org/&quot; target=&quot;_blank&quot;&gt;Apache Iceberg&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.cloudflare.com/r2/data-catalog/config-examples/spark-scala/&quot;&gt;Spark&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/r2/data-catalog/config-examples/snowflake/&quot;&gt;Snowflake&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/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;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;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;catalog&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;enable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-bucket&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;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.cloudflare.com/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></item><item><title>Access - Cloudflare Zero Trust SCIM User and Group Provisioning Logs</title><link>https://developers.cloudflare.com/changelog/post/2025-04-09-scim-provisioning-logs/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-09-scim-provisioning-logs/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/users/scim&quot;&gt;Cloudflare Zero Trust SCIM provisioning&lt;/a&gt; now has a full audit log of all create, update and delete event from any SCIM Enabled IdP. The &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/logs/dashboard-logs/scim-logs/&quot;&gt;SCIM logs&lt;/a&gt; support filtering by IdP, Event type, Result and many more fields. This will help with debugging user and group update issues and questions.&lt;/p&gt;
&lt;p&gt;SCIM logs can be found on the Zero Trust Dashboard under &lt;strong&gt;Logs&lt;/strong&gt; -&gt; &lt;strong&gt;SCIM provisioning&lt;/strong&gt;.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/example-scim-log.Bv5Zqckh_BY26C.webp&quot; alt=&quot;Example SCIM Logs&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Wed, 09 Apr 2025 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Hyperdrive - Hyperdrive now supports custom TLS/SSL certificates</title><link>https://developers.cloudflare.com/changelog/post/2025-04-09-hyperdrive-custom-certificate-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-09-hyperdrive-custom-certificate-support/</guid><description>&lt;p&gt;Hyperdrive now supports more SSL/TLS security options for your database connections:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configure Hyperdrive to verify server certificates with &lt;code&gt;verify-ca&lt;/code&gt; or &lt;code&gt;verify-full&lt;/code&gt; SSL modes and protect against man-in-the-middle attacks&lt;/li&gt;
&lt;li&gt;Configure Hyperdrive to provide client certificates to the database server to authenticate itself (mTLS) for stronger security beyond username and password&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use the new &lt;code&gt;wrangler cert&lt;/code&gt; commands to create certificate authority (CA) certificate bundles or client certificate pairs:&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;# Create CA certificate bundle&lt;/span&gt;&lt;/div&gt;&lt;/div&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;cert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;upload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;certificate-authority&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--ca-cert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;your-ca-cert.pem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;your-custom-ca-name&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;# Create client certificate pair&lt;/span&gt;&lt;/div&gt;&lt;/div&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;cert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;upload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;mtls-certificate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--cert&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client-cert.pem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--key&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client-key.pem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;your-client-cert-name&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;Then create a Hyperdrive configuration with the certificates and desired SSL mode:&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;hyperdrive&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;your-hyperdrive-config&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;--connection-string=&quot;postgres://user:password@hostname:port/database&quot;&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;--ca-certificate-id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;CA_CERT_ID&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;--mtls-certificate-id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;CLIENT_CERT_ID&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;--sslmode&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;verify-full&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;Learn more about &lt;a href=&quot;https://developers.cloudflare.com/hyperdrive/configuration/tls-ssl-certificates-for-hyperdrive/&quot;&gt;configuring SSL/TLS certificates for Hyperdrive&lt;/a&gt; to enhance your database security posture.&lt;/p&gt;</description><pubDate>Wed, 09 Apr 2025 00:00:00 GMT</pubDate><product>Hyperdrive</product><category>Hyperdrive</category></item><item><title>Rules - Cloudflare Snippets are now Generally Available</title><link>https://developers.cloudflare.com/changelog/post/2025-04-09-snippets-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-09-snippets-ga/</guid><description>&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/snippets-ga.BJr3csvv_Z2q49jT.webp&quot; alt=&quot;Cloudflare Snippets are now GA&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/rules/snippets/&quot;&gt;Cloudflare Snippets&lt;/a&gt; are now generally available at no extra cost across all paid plans — giving you a fast, flexible way to programmatically control HTTP traffic using lightweight JavaScript.&lt;/p&gt;
&lt;p&gt;You can now use Snippets to modify HTTP requests and responses with confidence, reliability, and scale. Snippets are production-ready and deeply integrated with Cloudflare Rules, making them ideal for everything from quick dynamic header rewrites to advanced routing logic.&lt;/p&gt;
&lt;p&gt;What&apos;s new:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Snippets are now GA&lt;/strong&gt; – Available at no extra cost on all Pro, Business, and Enterprise plans.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Ready for production&lt;/strong&gt; – Snippets deliver a production-grade experience built for scale.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Part of the Cloudflare Rules platform&lt;/strong&gt; – Snippets inherit request modifications from other Cloudflare products and support sequential execution, allowing you to run multiple Snippets on the same request and apply custom modifications step by step.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Trace integration&lt;/strong&gt; – Use &lt;a href=&quot;https://developers.cloudflare.com/rules/trace-request/&quot;&gt;Cloudflare Trace&lt;/a&gt; to see which Snippets were triggered on a request — helping you understand traffic flow and debug more effectively.&lt;/p&gt;
&lt;p&gt;&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/snippets-ga-trace.WlCshaFo_1WNo07.webp&quot; alt=&quot;Snippets shown in Cloudflare Trace results&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learn more in the &lt;a href=&quot;https://blog.cloudflare.com/snippets/&quot; target=&quot;_blank&quot;&gt;launch blog post&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 09 Apr 2025 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Secrets Store, SSL/TLS - Cloudflare Secrets Store now available in Beta</title><link>https://developers.cloudflare.com/changelog/post/2025-04-09-secrets-store-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-09-secrets-store-beta/</guid><description>&lt;p&gt;Cloudflare Secrets Store is available today in Beta. You can now store, manage, and deploy account level secrets from a secure, centralized platform to your Workers.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/secrets-store-landing-page.BQoEWsq8_ZUrGq1.webp&quot; alt=&quot;Import repo or choose template&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To spin up your Cloudflare Secrets Store, simply click the new Secrets Store tab &lt;a href=&quot;http://dash.cloudflare.com/?to=/:account/secrets-store&quot; target=&quot;_blank&quot;&gt;in the dashboard&lt;/a&gt; or use this Wrangler command:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;secrets-store&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;store&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;&amp;#x3C;name&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--remote&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;The following are supported in the Secrets Store beta:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Secrets Store UI &amp;#x26; API: create your store &amp;#x26; create, duplicate, update, scope, and delete a secret&lt;/li&gt;
&lt;li&gt;Workers UI: bind a new or existing account level secret to a Worker and deploy in code&lt;/li&gt;
&lt;li&gt;Wrangler: create your store &amp;#x26; create, duplicate, update, scope, and delete a secret&lt;/li&gt;
&lt;li&gt;Account Management UI &amp;#x26; API: assign Secrets Store permissions roles &amp;#x26; view audit logs for actions taken in Secrets Store core platform&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For instructions on how to get started, visit our &lt;a href=&quot;https://developers.cloudflare.com/secrets-store/&quot;&gt;developer documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 09 Apr 2025 00:00:00 GMT</pubDate><product>Secrets Store</product><category>Secrets Store</category><category>SSL/TLS</category></item><item><title>Workers - Investigate your Workers with the Query Builder in the new Observability dashboard</title><link>https://developers.cloudflare.com/changelog/post/2025-04-09-qb-workers-logs-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-09-qb-workers-logs-ga/</guid><description>&lt;p&gt;The &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers-and-pages/observability/&quot; target=&quot;_blank&quot;&gt;Workers Observability dashboard&lt;/a&gt; offers a single place to investigate and explore your &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/logs/workers-logs&quot;&gt;Workers Logs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Overview&lt;/strong&gt; tab shows logs from all your Workers in one place. The &lt;strong&gt;Invocations&lt;/strong&gt; view groups logs together by invocation, which refers to the specific trigger that started the execution of the Worker (i.e. fetch). The &lt;strong&gt;Events&lt;/strong&gt; view shows logs in the order they were produced, based on timestamp. Previously, you could only view logs for a single Worker.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-04-09-workers-observability-overview.BKVvdscp_Z2bR5zE.webp&quot; alt=&quot;Workers Observability Overview Tab&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;The &lt;strong&gt;Investigate&lt;/strong&gt; tab presents a Query Builder, which helps you write structured queries to investigate and visualize your logs. The Query Builder can help answer questions such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Which paths are experiencing the most 5XX errors?&lt;/li&gt;
&lt;li&gt;What is the wall time distribution by status code for my Worker?&lt;/li&gt;
&lt;li&gt;What are the slowest requests, and where are they coming from?&lt;/li&gt;
&lt;li&gt;Who are my top N users?&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-04-09-query-builder.CaW9IZza_ZBBKf9.webp&quot; alt=&quot;Workers Observability Overview Tab&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;The Query Builder can use any field that you store in your logs as a key to visualize, filter, and group by. Use the Query Builder to quickly access your data, build visualizations, save queries, and share them with your team.&lt;/p&gt;
&lt;h4&gt;Workers Logs is now Generally Available&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/observability/logs/workers-logs&quot;&gt;Workers Logs&lt;/a&gt; is now Generally Available. With a &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/logs/workers-logs/#enable-workers-logs&quot;&gt;small change&lt;/a&gt; to your Wrangler configuration, Workers Logs ingests, indexes, and stores all logs emitted from your Workers for up to 7 days.&lt;/p&gt;
&lt;p&gt;We&apos;ve introduced a number of changes during our beta period, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dashboard enhancements with customizable fields as columns in the Logs view and support for invocation-based grouping&lt;/li&gt;
&lt;li&gt;Performance improvements to ensure no adverse impact&lt;/li&gt;
&lt;li&gt;Public &lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/observability/&quot; target=&quot;_blank&quot;&gt;API endpoints&lt;/a&gt; for broader consumption&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The API documents three endpoints: list the keys in the telemetry dataset, run a query, and list the unique values for a key. For more, visit our &lt;a href=&quot;https://developers.cloudflare.com/api/resources/workers/subresources/observability/&quot; target=&quot;_blank&quot;&gt;REST API documentation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Visit the &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/query-builder&quot;&gt;docs&lt;/a&gt; to learn more about the capabilities and methods exposed by the Query Builder. Start using Workers Logs and the Query Builder today by enabling observability for your Workers:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;observability&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;enabled&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;&quot;&lt;/span&gt;&lt;span&gt;logs&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;invocation_logs&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;&quot;&lt;/span&gt;&lt;span&gt;head_sampling_rate&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// optional. default = 1.&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;observability&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;enabled&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;observability&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;logs&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;invocation_logs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;head_sampling_rate&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;</description><pubDate>Wed, 09 Apr 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - CPU time and Wall time now published for Workers Invocations</title><link>https://developers.cloudflare.com/changelog/post/2025-04-09-workers-timing/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-09-workers-timing/</guid><description>&lt;p&gt;You can now observe and investigate the CPU time and Wall time for every Workers Invocations.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/logs/workers-logs&quot;&gt;Workers Logs&lt;/a&gt;, CPU time and Wall time are surfaced in the &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/logs/workers-logs/#invocation-logs&quot;&gt;Invocation Log&lt;/a&gt;..&lt;/li&gt;
&lt;li&gt;For &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/logs/tail-workers&quot;&gt;Tail Workers&lt;/a&gt;, CPU time and Wall time are surfaced at the top level of the &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/datasets/account/workers_trace_events&quot;&gt;Workers Trace Events object&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;For &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/logs/logpush&quot;&gt;Workers Logpush&lt;/a&gt;, CPU and Wall time are surfaced at the top level of the &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/datasets/account/workers_trace_events&quot;&gt;Workers Trace Events object&lt;/a&gt;. All new jobs will have these new fields included by default. Existing jobs need to be updated to include CPU time and Wall time.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can use a Workers Logs filter to search for logs where Wall time exceeds 100ms.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-04-09-wall-time-filter.CT-VQyTS_Z97Aoe.webp&quot; alt=&quot;Workers Logs Wall Time Filter&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;You can also use the Workers Observability &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers-and-pages/observability/investigate&quot; target=&quot;_blank&quot;&gt;Query Builder&lt;/a&gt; to find the median CPU time and median Wall time for all of your Workers.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-04-09-query-builder.CaW9IZza_ZBBKf9.webp&quot; alt=&quot;Query Builder filter&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Wed, 09 Apr 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Cloudflare One Client - WARP client for Windows (version 2025.2.664.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-04-08-warp-windows-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-08-warp-windows-ga/</guid><description>&lt;p&gt;A new GA release for the Windows WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains a hotfix for captive portal detection for the 2025.2.600.0 release.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix to reduce the number of browser tabs opened during captive portal logins.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;DNS resolution may be broken when the following conditions are all true:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WARP is in Secure Web Gateway without DNS filtering (tunnel-only) mode.&lt;/li&gt;
&lt;li&gt;A custom DNS server address is configured on the primary network adapter.&lt;/li&gt;
&lt;li&gt;The custom DNS server address on the primary network adapter is changed while WARP is connected.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To work around this issue, reconnect the WARP client by toggling off and back on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 08 Apr 2025 21:25:24 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - WARP client for macOS (version 2025.2.664.0)</title><link>https://developers.cloudflare.com/changelog/post/2025-04-08-warp-macos-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-08-warp-macos-ga/</guid><description>&lt;p&gt;A new GA release for the macOS WARP client is now available on the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/&quot;&gt;stable releases downloads page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This release contains a hotfix for captive portal detection and PF state tables for the 2025.2.600.0 release.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix to reduce the number of browser tabs opened during captive portal logins.&lt;/li&gt;
&lt;li&gt;Improvement to exclude local DNS traffic entries from PF state table to reduce risk of connectivity issues from exceeding table capacity.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known issues&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS Sequoia: Due to changes Apple introduced in macOS 15.0.x, the WARP client may not behave as expected. Cloudflare recommends the use of macOS 15.4 or later.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 08 Apr 2025 21:25:07 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Email Routing - Local development support for Email Workers</title><link>https://developers.cloudflare.com/changelog/post/2025-04-08-local-development/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-08-local-development/</guid><description>&lt;p&gt;Email Workers enables developers to programmatically take action on anything that hits their email inbox. If you&apos;re building with Email Workers, you can now test the behavior of an Email Worker script, receiving, replying and sending emails in your local environment using &lt;code&gt;wrangler dev&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Below is an example that shows you how you can receive messages using the &lt;code&gt;email()&lt;/code&gt; handler and parse them using &lt;a href=&quot;https://www.npmjs.com/package/postal-mime&quot; target=&quot;_blank&quot;&gt;postal-mime&lt;/a&gt;:&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;import &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;&lt;span&gt; as &lt;/span&gt;&lt;span&gt;PostalMime&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;postal-mime&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;email&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;parser&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PostalMime&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;default&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rawEmail&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;raw&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;email&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;parser&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rawEmail&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;arrayBuffer&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;email&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;/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;Now when you run &lt;code&gt;npx wrangler dev&lt;/code&gt;, wrangler will expose a local &lt;code&gt;/cdn-cgi/handler/email&lt;/code&gt; endpoint that you can &lt;code&gt;POST&lt;/code&gt; email messages to and trigger your Worker&apos;s &lt;code&gt;email()&lt;/code&gt; handler:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;http://localhost:8787/cdn-cgi/handler/email&apos;&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;--url-query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;from=sender@example.com&apos;&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;--url-query&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;to=recipient@example.com&apos;&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Content-Type: application/json&apos;&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;--data-raw&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Received: from smtp.example.com (127.0.0.1)&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;by cloudflare-email.com (unknown) id 4fwwffRXOpyR&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;for &amp;#x3C;recipient@example.com&gt;; Tue, 27 Aug 2024 15:50:20 +0000&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;From: &quot;John&quot; &amp;#x3C;sender@example.com&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Reply-To: sender@example.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;To: recipient@example.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Subject: Testing Email Workers Local Dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Content-Type: text/html; charset=&quot;windows-1252&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;X-Mailer: Curl&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Date: Tue, 27 Aug 2024 08:49:44 -0700&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Message-ID: &amp;#x3C;6114391943504294873000@ZSH-GHOSTTY&gt;&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;Hi there&apos;&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;This is what you get in the console:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;received&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;from smtp.example.com (127.0.0.1) by cloudflare-email.com (unknown) id 4fwwffRXOpyR for &amp;#x3C;recipient@example.com&gt;; Tue, 27 Aug 2024 15:50:20 +0000&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;/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;&quot;&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;from&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;John&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt; &amp;#x3C;sender@example.com&gt;&quot;&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;span&gt;&quot;&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;reply-to&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;sender@example.com&quot;&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;span&gt;&quot;&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;to&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;recipient@example.com&quot;&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;span&gt;&quot;&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;subject&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Testing Email Workers Local Dev&quot;&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;span&gt;&quot;&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;content-type&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;text/html; charset=&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;windows-1252&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;&quot;&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;span&gt;&quot;&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;x-mailer&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Curl&quot;&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;span&gt;&quot;&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;date&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Tue, 27 Aug 2024 08:49:44 -0700&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;key&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;message-id&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;#x3C;6114391943504294873000@ZSH-GHOSTTY&gt;&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;/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;&quot;&lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt;&quot;&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;span&gt;&quot;&lt;/span&gt;&lt;span&gt;address&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;sender@example.com&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;John&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt;&quot;&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;span&gt;&quot;&lt;/span&gt;&lt;span&gt;address&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;recipient@example.com&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;replyTo&lt;/span&gt;&lt;span&gt;&quot;&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;span&gt;&quot;&lt;/span&gt;&lt;span&gt;address&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;sender@example.com&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;subject&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Testing Email Workers Local Dev&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;messageId&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;#x3C;6114391943504294873000@ZSH-GHOSTTY&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;date&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2024-08-27T15:49:44.000Z&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Hi there&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;attachments&lt;/span&gt;&lt;span&gt;&quot;&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;/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;Local development is a critical part of the development flow, and also works for sending, replying and forwarding emails. See &lt;a href=&quot;https://developers.cloudflare.com/email-routing/email-workers/local-development/&quot;&gt;our documentation&lt;/a&gt; for more information.&lt;/p&gt;</description><pubDate>Tue, 08 Apr 2025 00:00:00 GMT</pubDate><product>Email Routing</product><category>Email Routing</category></item><item><title>Hyperdrive - Hyperdrive Free plan makes fast, global database access available to all</title><link>https://developers.cloudflare.com/changelog/post/2025-04-08-hyperdrive-free-plan/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-08-hyperdrive-free-plan/</guid><description>&lt;p&gt;Hyperdrive is now available on the Free plan of Cloudflare Workers, enabling you to build Workers that connect to PostgreSQL or MySQL databases without compromise.&lt;/p&gt;
&lt;p&gt;Low-latency access to SQL databases is critical to building full-stack Workers applications. We want you to be able to build on fast, global apps on Workers,
regardless of the tools you use. So we made Hyperdrive available for all, to make it easier to build Workers that connect to PostgreSQL and MySQL.&lt;/p&gt;
&lt;p&gt;If you want to learn more about how Hyperdrive works, read the &lt;a href=&quot;https://blog.cloudflare.com/how-hyperdrive-speeds-up-database-access&quot; target=&quot;_blank&quot;&gt;deep dive&lt;/a&gt; on how Hyperdrive can make your database queries up to 4x faster.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/hyperdrive-global-placement.DHxlaFbz_1MNCXL.webp&quot; alt=&quot;Hyperdrive provides edge connection setup and global connection pooling for optimal latencies.&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Visit the docs to &lt;a href=&quot;https://developers.cloudflare.com/hyperdrive/get-started/&quot;&gt;get started&lt;/a&gt; with Hyperdrive for PostgreSQL or MySQL.&lt;/p&gt;</description><pubDate>Tue, 08 Apr 2025 00:00:00 GMT</pubDate><product>Hyperdrive</product><category>Hyperdrive</category></item><item><title>Hyperdrive - Hyperdrive introduces support for MySQL and MySQL-compatible databases</title><link>https://developers.cloudflare.com/changelog/post/2025-04-08-hyperdrive-mysql-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-08-hyperdrive-mysql-support/</guid><description>&lt;p&gt;Hyperdrive now supports connecting to MySQL and MySQL-compatible databases, including Amazon RDS and Aurora MySQL, Google Cloud SQL for MySQL, Azure Database for MySQL, PlanetScale and MariaDB.&lt;/p&gt;
&lt;p&gt;Hyperdrive makes your regional, MySQL databases fast when connecting from Cloudflare Workers. It eliminates unnecessary network roundtrips during connection setup, pools database connections globally, and can cache query results to provide the fastest possible response times.&lt;/p&gt;
&lt;p&gt;Best of all, you can connect using your existing drivers, ORMs, and query builders with Hyperdrive&apos;s secure credentials, no code changes required.&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createConnection&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;mysql2/promise&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&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;HYPERDRIVE&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Hyperdrive&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;connection&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createConnection&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;host&lt;/span&gt;&lt;span&gt;:&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;HYPERDRIVE&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;host&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&lt;/span&gt;&lt;span&gt;:&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;HYPERDRIVE&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;user&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;password&lt;/span&gt;&lt;span&gt;:&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;HYPERDRIVE&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;password&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;database&lt;/span&gt;&lt;span&gt;:&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;HYPERDRIVE&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;database&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;port&lt;/span&gt;&lt;span&gt;:&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;HYPERDRIVE&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;port&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;disableEval&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; true&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// Required for Workers compatibility&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fields&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;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;connection&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;query&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;SHOW tables;&quot;&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;/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;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;waitUntil&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;connection&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;end&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;results&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fields&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;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;headers&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;&quot;Content-Type&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/json&quot;&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;&quot;Access-Control-Allow-Origin&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;*&quot;&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;)&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;satisfies&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ExportedHandler&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Env&lt;/span&gt;&lt;span&gt;&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;Learn more about &lt;a href=&quot;https://developers.cloudflare.com/hyperdrive/concepts/how-hyperdrive-works/&quot;&gt;how Hyperdrive works&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/hyperdrive/get-started/&quot;&gt;get started building Workers that connect to MySQL with Hyperdrive&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 08 Apr 2025 00:00:00 GMT</pubDate><product>Hyperdrive</product><category>Hyperdrive</category></item><item><title>Workers - Deploy a Workers application in seconds with one-click</title><link>https://developers.cloudflare.com/changelog/post/2025-04-08-deploy-to-cloudflare-button/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-08-deploy-to-cloudflare-button/</guid><description>&lt;p&gt;You can now add a &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/deploy-buttons/&quot;&gt;Deploy to Cloudflare&lt;/a&gt; button to the README of your Git repository containing a Workers application — making it simple for other developers to quickly set up and deploy your project!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/templates/tree/main/saas-admin-template&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://deploy.workers.cloudflare.com/button&quot; alt=&quot;Deploy to Cloudflare&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Deploy to Cloudflare button:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Creates a new Git repository on your GitHub/ GitLab account&lt;/strong&gt;: Cloudflare will automatically clone and create a new repository on your account, so you can continue developing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatically provisions resources the app needs&lt;/strong&gt;: If your repository requires Cloudflare primitives like a &lt;a href=&quot;https://developers.cloudflare.com/kv/&quot;&gt;Workers KV namespace&lt;/a&gt;, a &lt;a href=&quot;https://developers.cloudflare.com/d1/&quot;&gt;D1 database&lt;/a&gt;, or an &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;R2 bucket&lt;/a&gt;, Cloudflare will automatically provision them on your account and bind them to your Worker upon deployment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configures Workers Builds (CI/CD)&lt;/strong&gt;: Every new push to your production branch on your newly created repository will automatically build and deploy courtesy of &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/&quot;&gt;Workers Builds&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Adds preview URLs to each pull request&lt;/strong&gt;: If you&apos;d like to test your changes before deploying, you can push changes to a &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/build-branches/#configure-non-production-branch-builds&quot;&gt;non-production branch&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/previews/&quot;&gt;preview URLs&lt;/a&gt; will be generated and &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/git-integration/github-integration/#pull-request-comment&quot;&gt;posted back to GitHub as a comment&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/dtw-user-flow.zgS3Y8iK_Z1r8gDo.webp&quot; alt=&quot;Import repo or choose template&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To create a Deploy to Cloudflare button in your README, you can add the following snippet, including your Git repository URL:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;md&quot;&gt;&lt;code class=&quot;language-md&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;![&lt;/span&gt;&lt;span&gt;Deploy to Cloudflare&lt;/span&gt;&lt;span&gt;](&lt;/span&gt;&lt;span&gt;https://deploy.workers.cloudflare.com/button&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;](&lt;/span&gt;&lt;span&gt;https://deploy.workers.cloudflare.com/?url=&amp;#x3C;YOUR_GIT_REPO_URL&gt;&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;Check out our &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/deploy-buttons/&quot;&gt;documentation&lt;/a&gt; for more information on how to set up a deploy button for your application and best practices to ensure a successful deployment for other developers.&lt;/p&gt;</description><pubDate>Tue, 08 Apr 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers, Workers for Platforms - Full-stack frameworks are now Generally Available on Cloudflare Workers</title><link>https://developers.cloudflare.com/changelog/post/2025-04-08-fullstack-on-workers/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-08-fullstack-on-workers/</guid><description>&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/fullstack-on-workers.D7fotYu2_ZMwDKf.webp&quot; alt=&quot;Full-stack on Cloudflare Workers&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;The following full-stack frameworks now have Generally Available (&quot;GA&quot;) adapters for Cloudflare Workers, and are ready for you to use in production:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/web-apps/react-router/&quot;&gt;React Router v7 (Remix)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/web-apps/astro/&quot;&gt;Astro&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/web-apps/more-web-frameworks/hono/&quot;&gt;Hono&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/web-apps/vue/&quot;&gt;Vue.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/web-apps/more-web-frameworks/nuxt/&quot;&gt;Nuxt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/web-apps/sveltekit/&quot;&gt;Svelte (SvelteKit)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;And &lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/&quot;&gt;more&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following frameworks are now in &lt;strong&gt;beta&lt;/strong&gt;, with GA support coming very soon:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/web-apps/nextjs/&quot;&gt;Next.js&lt;/a&gt;, supported through &lt;a href=&quot;https://opennext.js.org/cloudflare&quot; target=&quot;_blank&quot;&gt;@opennextjs/cloudflare&lt;/a&gt; is now &lt;code&gt;v1.0-beta&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/web-apps/more-web-frameworks/angular/&quot;&gt;Angular&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/web-apps/more-web-frameworks/solid/&quot;&gt;SolidJS (SolidStart)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can also build complete full-stack apps on Workers &lt;strong&gt;without a framework&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can &lt;a href=&quot;https://blog.cloudflare.com/introducing-the-cloudflare-vite-plugin&quot; target=&quot;_blank&quot;&gt;“just use Vite&quot;&lt;/a&gt; and React together, and build a back-end API in the same Worker. Follow our &lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/tutorial/&quot;&gt;React SPA with an API tutorial&lt;/a&gt; to learn how.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Get started building today with our &lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/&quot;&gt;framework guides&lt;/a&gt;&lt;/strong&gt;, or read our &lt;a href=&quot;https://blog.cloudflare.com/full-stack-development-on-cloudflare-workers&quot; target=&quot;_blank&quot;&gt;Developer Week 2025 blog post&lt;/a&gt; about all the updates to building full-stack applications on Workers.&lt;/p&gt;</description><pubDate>Tue, 08 Apr 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category><category>Workers for Platforms</category></item><item><title>Workers - Improved support for Node.js Crypto and TLS APIs in Workers</title><link>https://developers.cloudflare.com/changelog/post/2025-04-08-nodejs-crypto-and-tls/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-08-nodejs-crypto-and-tls/</guid><description>&lt;p&gt;When using a Worker with the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/nodejs/&quot;&gt;&lt;code&gt;nodejs_compat&lt;/code&gt;&lt;/a&gt; compatibility flag enabled,
the following Node.js APIs are now available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/nodejs/crypto/&quot;&gt;&lt;code&gt;node:crypto&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/nodejs/tls/&quot;&gt;&lt;code&gt;node:tls&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This make it easier to reuse existing Node.js code in Workers or use npm packages that depend on these APIs.&lt;/p&gt;
&lt;h4&gt;node:crypto&lt;/h4&gt;
&lt;p&gt;The full &lt;a href=&quot;https://nodejs.org/api/crypto.html&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;node:crypto&lt;/code&gt;&lt;/a&gt; API is now available in Workers.&lt;/p&gt;
&lt;p&gt;You can use it to verify and sign data:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sign&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;verify&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;node:crypto&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;signature&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sign&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;sha256&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;-data to sign-&quot;&lt;/span&gt;&lt;span&gt;,&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;PRIVATE_KEY&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;verified&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;verify&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;sha256&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;-data to sign-&quot;&lt;/span&gt;&lt;span&gt;,&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;PUBLIC_KEY&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;signature&lt;/span&gt;&lt;span&gt;)&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;Or, to encrypt and decrypt data:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;publicEncrypt&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;privateDecrypt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;node:crypto&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;encrypted&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;publicEncrypt&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;PUBLIC_KEY&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;some data&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;plaintext&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;privateDecrypt&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;PRIVATE_KEY&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;encrypted&lt;/span&gt;&lt;span&gt;)&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;See the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/nodejs/crypto/&quot;&gt;&lt;code&gt;node:crypto&lt;/code&gt; documentation&lt;/a&gt; for more information.&lt;/p&gt;
&lt;h4&gt;node:tls&lt;/h4&gt;
&lt;p&gt;The following APIs from &lt;code&gt;node:tls&lt;/code&gt; are now available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://nodejs.org/api/tls.html#tlsconnectoptions-callback&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;connect&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nodejs.org/api/tls.html#class-tlstlssocket&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;TLSSocket&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nodejs.org/api/tls.html#tlscheckserveridentityhostname-cert&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;checkServerIdentity&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://nodejs.org/api/tls.html#tlscreatesecurecontextoptions&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;createSecureContext&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This enables secure connections over TLS (Transport Layer Security) to external services.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;connect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;node:tls&quot;&lt;/span&gt;&lt;span&gt;;&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;// ... in a request handler ...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;connectionOptions&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;span&gt; key&lt;/span&gt;&lt;span&gt;:&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;KEY&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; cert&lt;/span&gt;&lt;span&gt;:&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;CERT&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;socket&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;connect&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;connectionOptions&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;span&gt;=&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;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;socket&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;authorized&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Connection authorized&quot;&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;/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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;socket&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;data&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &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; &lt;/span&gt;&lt;span&gt;=&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&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;;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;socket&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;end&quot;&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;span&gt;=&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;server ends connection&quot;&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;/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;See the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/nodejs/tls/&quot;&gt;&lt;code&gt;node:tls&lt;/code&gt; documentation&lt;/a&gt; for more information.&lt;/p&gt;</description><pubDate>Tue, 08 Apr 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - The Cloudflare Vite plugin is now Generally Available</title><link>https://developers.cloudflare.com/changelog/post/2025-04-08-vite-plugin/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-08-vite-plugin/</guid><description>&lt;p&gt;The &lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/&quot;&gt;Cloudflare Vite plugin&lt;/a&gt; has &lt;a href=&quot;https://blog.cloudflare.com/introducing-the-cloudflare-vite-plugin&quot; target=&quot;_blank&quot;&gt;reached v1.0&lt;/a&gt; and is now Generally Available (&quot;GA&quot;).&lt;/p&gt;
&lt;p&gt;When you use &lt;code&gt;@cloudflare/vite-plugin&lt;/code&gt;, you can use Vite&apos;s local development server and build tooling, while ensuring that while developing, your code runs in &lt;a href=&quot;https://github.com/cloudflare/workerd&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;workerd&lt;/code&gt;&lt;/a&gt;, the open-source Workers runtime.&lt;/p&gt;
&lt;p&gt;This lets you get the best of both worlds for a full-stack app — you can use &lt;a href=&quot;https://vite.dev/guide/features.html#hot-module-replacement&quot; target=&quot;_blank&quot;&gt;Hot Module Replacement&lt;/a&gt; from Vite right alongside &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/&quot;&gt;Durable Objects&lt;/a&gt; and other runtime APIs and bindings that are unique to Cloudflare Workers.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;@cloudflare/vite-plugin&lt;/code&gt; is made possible by the new &lt;a href=&quot;https://vite.dev/guide/api-environment&quot; target=&quot;_blank&quot;&gt;environment API&lt;/a&gt; in Vite, and was built &lt;a href=&quot;https://blog.cloudflare.com/introducing-the-cloudflare-vite-plugin&quot; target=&quot;_blank&quot;&gt;in partnership with the Vite team&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Framework support&lt;/h4&gt;
&lt;p&gt;You can build any type of application with &lt;code&gt;@cloudflare/vite-plugin&lt;/code&gt;, using any rendering mode, from single page applications (SPA) and static sites to server-side rendered (SSR) pages and API routes.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/framework-guides/web-apps/react-router/&quot;&gt;React Router v7 (Remix)&lt;/a&gt; is the first full-stack framework to provide full support for Cloudflare Vite plugin, allowing you to use all parts of Cloudflare&apos;s developer platform, without additional build steps.&lt;/p&gt;
&lt;p&gt;You can also build complete full-stack apps on Workers &lt;strong&gt;without a framework&lt;/strong&gt; — &lt;a href=&quot;https://blog.cloudflare.com/introducing-the-cloudflare-vite-plugin&quot; target=&quot;_blank&quot;&gt;&quot;just use Vite&quot;&lt;/a&gt; and React together, and build a back-end API in the same Worker. Follow our &lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/tutorial/&quot;&gt;React SPA with an API tutorial&lt;/a&gt; to learn how.&lt;/p&gt;
&lt;h4&gt;Configuration&lt;/h4&gt;
&lt;p&gt;If you&apos;re already using &lt;a href=&quot;https://vite.dev/&quot; target=&quot;_blank&quot;&gt;Vite&lt;/a&gt; in your build and development toolchain, you can start using our plugin with minimal changes to your &lt;code&gt;vite.config.ts&lt;/code&gt;:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;vite&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&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;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/vite-plugin&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;defineConfig&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;plugins&lt;/span&gt;&lt;span&gt;:&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;)&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;Take a look at the &lt;a href=&quot;https://developers.cloudflare.com/workers/vite-plugin/&quot;&gt;documentation for our Cloudflare Vite plugin&lt;/a&gt; for more information!&lt;/p&gt;</description><pubDate>Tue, 08 Apr 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Agents, Workers - Build MCP servers with the Agents SDK</title><link>https://developers.cloudflare.com/changelog/post/2025-04-07-mcp-servers-agents-sdk-updates/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-07-mcp-servers-agents-sdk-updates/</guid><description>&lt;p&gt;The Agents SDK now includes built-in support for building remote MCP (Model Context Protocol) servers directly as part of your Agent. This allows you to easily create and manage MCP servers, without the need for additional infrastructure or configuration.&lt;/p&gt;
&lt;p&gt;The SDK includes a new &lt;code&gt;MCPAgent&lt;/code&gt; class that extends the &lt;code&gt;Agent&lt;/code&gt; class and allows you to expose resources and tools over the MCP protocol, as well as authorization and authentication to enable remote MCP servers.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyMCP&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;McpAgent&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;server &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;McpServer&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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Demo&quot;&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;version&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1.0.0&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;init&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;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;server&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`counter`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`mcp://resource/counter`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;uri&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;/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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;server&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;tool&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;&quot;add&quot;&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;&quot;Add two numbers together&quot;&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; a&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;number&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; b&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;number&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;/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;)&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyMCP&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;McpAgent&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Env&lt;/span&gt;&lt;span&gt;&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;server &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;McpServer&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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Demo&quot;&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;version&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1.0.0&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;init&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;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;server&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`counter`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`mcp://resource/counter`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;uri&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;/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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;server&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;tool&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;&quot;add&quot;&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;&quot;Add two numbers together&quot;&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; a&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;number&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; b&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;z&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;number&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;({&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;b&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;})&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;/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;)&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;See &lt;a href=&quot;https://github.com/cloudflare/agents/tree/main/examples/mcp&quot; target=&quot;_blank&quot;&gt;the example&lt;/a&gt; for the full code and as the basis for building your own MCP servers, and the &lt;a href=&quot;https://github.com/cloudflare/agents/tree/main/examples/mcp-client&quot; target=&quot;_blank&quot;&gt;client example&lt;/a&gt; for how to build an Agent that acts as an MCP client.&lt;/p&gt;
&lt;p&gt;To learn more, review the &lt;a href=&quot;https://blog.cloudflare.com/building-ai-agents-with-mcp-authn-authz-and-durable-objects&quot; target=&quot;_blank&quot;&gt;announcement blog&lt;/a&gt; as part of Developer Week 2025.&lt;/p&gt;
&lt;h4&gt;Agents SDK updates&lt;/h4&gt;
&lt;p&gt;We&apos;ve made a number of improvements to the &lt;a href=&quot;https://developers.cloudflare.com/agents/&quot;&gt;Agents SDK&lt;/a&gt;, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for building MCP servers with the new &lt;code&gt;MCPAgent&lt;/code&gt; class.&lt;/li&gt;
&lt;li&gt;The ability to export the current agent, request and WebSocket connection context using &lt;code&gt;import { context } from &quot;agents&quot;&lt;/code&gt;, allowing you to minimize or avoid direct dependency injection when calling tools.&lt;/li&gt;
&lt;li&gt;Fixed a bug that prevented query parameters from being sent to the Agent server from the &lt;code&gt;useAgent&lt;/code&gt; React hook.&lt;/li&gt;
&lt;li&gt;Automatically converting the &lt;code&gt;agent&lt;/code&gt; name in &lt;code&gt;useAgent&lt;/code&gt; or &lt;code&gt;useAgentChat&lt;/code&gt; to kebab-case to ensure it matches the naming convention expected by &lt;a href=&quot;https://developers.cloudflare.com/agents/api-reference/routing/&quot;&gt;&lt;code&gt;routeAgentRequest&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To install or update the Agents SDK, run &lt;code&gt;npm i agents@latest&lt;/code&gt; in an existing project, or explore the &lt;code&gt;agents-starter&lt;/code&gt; project:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&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;cloudflare@latest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--template&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cloudflare/agents-starter&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;See the full release notes and changelog &lt;a href=&quot;https://github.com/cloudflare/agents/blob/main/packages/agents/CHANGELOG.md&quot; target=&quot;_blank&quot;&gt;on the Agents SDK repository&lt;/a&gt; and&lt;/p&gt;</description><pubDate>Mon, 07 Apr 2025 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>AI Search, Vectorize - Create fully-managed RAG pipelines for your AI applications with AutoRAG</title><link>https://developers.cloudflare.com/changelog/post/2025-04-07-autorag-open-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-07-autorag-open-beta/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-search/&quot;&gt;AutoRAG&lt;/a&gt; is now in open beta, making it easy for you to build fully-managed retrieval-augmented generation (RAG) pipelines without managing infrastructure. Just upload your docs to &lt;a href=&quot;https://developers.cloudflare.com/r2/get-started/&quot;&gt;R2&lt;/a&gt;, and AutoRAG handles the rest: embeddings, indexing, retrieval, and response generation via API.&lt;/p&gt;
&lt;p&gt;With AutoRAG, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Customize your pipeline:&lt;/strong&gt; Choose from &lt;a href=&quot;https://developers.cloudflare.com/workers-ai&quot;&gt;Workers AI&lt;/a&gt; models, configure chunking strategies, edit system prompts, and more.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Instant setup:&lt;/strong&gt; AutoRAG provisions everything you need from &lt;a href=&quot;https://developers.cloudflare.com/vectorize&quot;&gt;Vectorize&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway&quot;&gt;AI gateway&lt;/a&gt;, to pipeline logic for you, so you can go from zero to a working RAG pipeline in seconds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep your index fresh:&lt;/strong&gt; AutoRAG continuously syncs your index with your data source to ensure responses stay accurate and up to date.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ask questions:&lt;/strong&gt; Query your data and receive grounded responses via a &lt;a href=&quot;https://developers.cloudflare.com/ai-search/usage/workers-binding/&quot;&gt;Workers binding&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/ai-search/usage/rest-api/&quot;&gt;API&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Whether you&apos;re building internal tools, AI-powered search, or a support assistant, AutoRAG gets you from idea to deployment in minutes.&lt;/p&gt;
&lt;p&gt;Get started in the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/ai/autorag&quot; target=&quot;_blank&quot;&gt;Cloudflare dashboard&lt;/a&gt; or check out the &lt;a href=&quot;https://developers.cloudflare.com/ai-search/get-started/&quot;&gt;guide&lt;/a&gt; for instructions on how to build your RAG pipeline today.&lt;/p&gt;</description><pubDate>Mon, 07 Apr 2025 00:00:00 GMT</pubDate><product>AI Search</product><category>AI Search</category><category>Vectorize</category></item><item><title>Browser Rendering - Browser Rendering REST API is Generally Available, with new endpoints and a free tier</title><link>https://developers.cloudflare.com/changelog/post/2025-04-07-br-free-ga-playwright/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-07-br-free-ga-playwright/</guid><description>&lt;p&gt;We’re excited to announce Browser Rendering is now available on the &lt;a href=&quot;https://www.cloudflare.com/plans/developer-platform/&quot; target=&quot;_blank&quot;&gt;Workers Free plan&lt;/a&gt;, making it even easier to prototype and experiment with web search and headless browser use-cases when building applications on Workers.&lt;/p&gt;
&lt;p&gt;The Browser Rendering &lt;strong&gt;&lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/rest-api/&quot;&gt;REST API&lt;/a&gt; is now Generally Available&lt;/strong&gt;, allowing you to control browser instances from outside of Workers applications. We&apos;ve added three new endpoints to help automate more browser tasks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Extract structured data&lt;/strong&gt; – Use &lt;code&gt;/json&lt;/code&gt; to retrieve structured data from a webpage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Retrieve links&lt;/strong&gt; – Use &lt;code&gt;/links&lt;/code&gt; to pull all links from a webpage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Convert to Markdown&lt;/strong&gt; – Use &lt;code&gt;/markdown&lt;/code&gt; to convert webpage content into Markdown format.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, to fetch the Markdown representation of a webpage:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;POST&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://api.cloudflare.com/client/v4/accounts/&amp;#x3C;accountId&gt;/browser-rendering/markdown&apos;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Content-Type: application/json&apos;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Authorization: Bearer &amp;#x3C;apiToken&gt;&apos;&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;-d&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;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;url&quot;: &quot;https://example.com&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;}&apos;&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 endpoints, check out our &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/rest-api/&quot;&gt;REST API documentation&lt;/a&gt;. You can also interact with Browser Rendering via the &lt;a href=&quot;https://github.com/cloudflare/cloudflare-typescript&quot; target=&quot;_blank&quot;&gt;Cloudflare TypeScript SDK&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We also recently landed support for &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/playwright/&quot;&gt;Playwright&lt;/a&gt; in Browser Rendering for browser automation from Cloudflare &lt;a href=&quot;https://developers.cloudflare.com/workers/&quot;&gt;Workers&lt;/a&gt;, in addition to &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/puppeteer/&quot;&gt;Puppeteer&lt;/a&gt;, giving you more flexibility to test across different browser environments.&lt;/p&gt;
&lt;p&gt;Visit the &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/&quot;&gt;Browser Rendering docs&lt;/a&gt; to learn more about how to use headless browsers in your applications.&lt;/p&gt;</description><pubDate>Mon, 07 Apr 2025 00:00:00 GMT</pubDate><product>Browser Rendering</product><category>Browser Rendering</category></item><item><title>Durable Objects, Workers - Durable Objects on Workers Free plan</title><link>https://developers.cloudflare.com/changelog/post/2025-04-07-durable-objects-free-tier/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-07-durable-objects-free-tier/</guid><description>&lt;p&gt;Durable Objects can now be used with zero commitment on the &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/pricing/&quot;&gt;Workers Free plan&lt;/a&gt; allowing you to build AI agents with &lt;a href=&quot;https://developers.cloudflare.com/agents/&quot;&gt;Agents SDK&lt;/a&gt;, collaboration tools, and real-time applications like chat or multiplayer games.&lt;/p&gt;
&lt;p&gt;Durable Objects let you build stateful, serverless applications with millions of tiny coordination instances that run your application code alongside (in the same thread!) your durable storage. Each Durable Object can access its own SQLite database through a &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/best-practices/access-durable-objects-storage/&quot;&gt;Storage API&lt;/a&gt;. A Durable Object class is defined in a Worker script encapsulating the Durable Object&apos;s behavior when accessed from a Worker. To try the code below, click the button:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/templates/tree/main/hello-world-do-template&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://deploy.workers.cloudflare.com/button&quot; alt=&quot;Deploy to Cloudflare&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DurableObject&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;cloudflare:workers&quot;&lt;/span&gt;&lt;span&gt;;&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;// Durable Object&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyDurableObject&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DurableObject&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sayHello&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;`Hello, &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;name&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;/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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Worker&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;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;// Every unique ID refers to an individual instance of the Durable Object class&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;MY_DURABLE_OBJECT&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;idFromName&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;foo&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// A stub is a client used to invoke methods on the Durable Object&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;MY_DURABLE_OBJECT&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Methods on the Durable Object are invoked via the stub&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stub&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sayHello&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;world&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&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;Free plan &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/platform/pricing/&quot;&gt;limits&lt;/a&gt; apply to Durable Objects compute and storage usage. Limits allow developers to build real-world applications, with every Worker request able to call a Durable Object on the free plan.&lt;/p&gt;
&lt;p&gt;For more information, checkout:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/durable-objects/concepts/what-are-durable-objects/&quot;&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.cloudflare.com/sqlite-in-durable-objects/&quot; target=&quot;_blank&quot;&gt;Zero-latency SQLite storage in every Durable Object blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 07 Apr 2025 00:00:00 GMT</pubDate><product>Durable Objects</product><category>Durable Objects</category><category>Workers</category></item><item><title>Durable Objects, Workers - SQLite in Durable Objects GA with 10GB storage per object</title><link>https://developers.cloudflare.com/changelog/post/2025-04-07-sqlite-in-durable-objects-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-07-sqlite-in-durable-objects-ga/</guid><description>&lt;p&gt;SQLite in Durable Objects is now generally available (GA) with 10GB SQLite database per Durable Object. Since the &lt;a href=&quot;https://blog.cloudflare.com/sqlite-in-durable-objects/&quot; target=&quot;_blank&quot;&gt;public beta&lt;/a&gt; in September 2024, we&apos;ve added feature parity and robustness for the SQLite storage backend compared to the preexisting key-value (KV) storage backend for Durable Objects.&lt;/p&gt;
&lt;p&gt;SQLite-backed Durable Objects are recommended for all new Durable Object classes, using &lt;code&gt;new_sqlite_classes&lt;/code&gt; &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/best-practices/access-durable-objects-storage/#create-sqlite-backed-durable-object-class&quot;&gt;Wrangler configuration&lt;/a&gt;. Only SQLite-backed Durable Objects have access to Storage API&apos;s &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/api/sqlite-storage-api/#sql-api&quot;&gt;SQL&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/api/sqlite-storage-api/#pitr-point-in-time-recovery-api&quot;&gt;point-in-time recovery&lt;/a&gt; methods, which provide relational data modeling, SQL querying, and better data management.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyDurableObject&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DurableObject&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;sql&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SqlStorage&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;constructor&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;DurableObjectState&lt;/span&gt;&lt;span&gt;,&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;span&gt;Env&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;super&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;,&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;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sql&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;storage&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sql&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sayHello&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;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sql&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;exec&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;SELECT &apos;Hello, World!&apos; AS greeting&quot;&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;one&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;greeting&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;KV-backed Durable Objects remain for backwards compatibility, and a migration path from key-value storage to SQL storage for existing Durable Object classes will be offered in the future.&lt;/p&gt;
&lt;p&gt;For more details on SQLite storage, checkout &lt;a href=&quot;https://blog.cloudflare.com/sqlite-in-durable-objects/&quot; target=&quot;_blank&quot;&gt;Zero-latency SQLite storage in every Durable Object blog&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 07 Apr 2025 00:00:00 GMT</pubDate><product>Durable Objects</product><category>Durable Objects</category><category>Workers</category></item><item><title>Workers - Capture up to 256 KB of log events in each Workers Invocation</title><link>https://developers.cloudflare.com/changelog/post/2025-04-07-increase-trace-events-limit/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-07-increase-trace-events-limit/</guid><description>&lt;p&gt;You can now capture a maximum of 256 KB of log events per Workers invocation, helping you gain better visibility into application behavior.&lt;/p&gt;
&lt;p&gt;All console.log() statements, exceptions, request metadata, and headers are automatically captured during the Worker invocation and emitted
as &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/datasets/account/workers_trace_events&quot;&gt;JSON object&lt;/a&gt;. &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/logs/workers-logs&quot;&gt;Workers Logs&lt;/a&gt; deserializes
this object before indexing the fields and storing them. You can also capture, transform, and export the JSON object in a
&lt;a href=&quot;https://developers.cloudflare.com/workers/observability/logs/tail-workers&quot;&gt;Tail Worker&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;256 KB is a 2x increase from the previous 128 KB limit. After you exceed this limit, further context associated with the request will not be
recorded in your logs.&lt;/p&gt;
&lt;p&gt;This limit is automatically applied to all Workers.&lt;/p&gt;</description><pubDate>Mon, 07 Apr 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workflows, Workers - Workflows is now Generally Available</title><link>https://developers.cloudflare.com/changelog/post/2025-04-07-workflows-ga/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-07-workflows-ga/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workflows/&quot;&gt;Workflows&lt;/a&gt; is now &lt;em&gt;Generally Available&lt;/em&gt; (or &quot;GA&quot;): in short, it&apos;s ready for production workloads. Alongside marking Workflows as GA, we&apos;ve introduced a number of changes during the beta period, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A new &lt;code&gt;waitForEvent&lt;/code&gt; API that allows a Workflow to wait for an event to occur before continuing execution.&lt;/li&gt;
&lt;li&gt;Increased concurrency: you can &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-02-25-workflows-concurrency-increased/&quot;&gt;run up to 4,500 Workflow instances&lt;/a&gt; concurrently — and this will continue to grow.&lt;/li&gt;
&lt;li&gt;Improved observability, including new CPU time metrics that allow you to better understand which Workflow instances are consuming the most resources and/or contributing to your bill.&lt;/li&gt;
&lt;li&gt;Support for &lt;code&gt;vitest&lt;/code&gt; for testing Workflows locally and in CI/CD pipelines.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Workflows also supports the new &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-03-25-higher-cpu-limits/&quot;&gt;increased CPU limits&lt;/a&gt; that apply to Workers, allowing you to run more CPU-intensive tasks (up to 5 minutes of CPU time per instance), not including the time spent waiting on network calls, AI models, or other I/O bound tasks.&lt;/p&gt;
&lt;h4&gt;Human-in-the-loop&lt;/h4&gt;
&lt;p&gt;The new &lt;code&gt;step.waitForEvent&lt;/code&gt; API allows a Workflow instance to wait on events and data, enabling human-in-the-the-loop interactions, such as approving or rejecting a request, directly handling webhooks from other systems, or pushing event data to a Workflow while it&apos;s running.&lt;/p&gt;
&lt;p&gt;Because Workflows are just code, you can conditionally execute code based on the result of a &lt;code&gt;waitForEvent&lt;/code&gt; call, and/or call &lt;code&gt;waitForEvent&lt;/code&gt; multiple times in a single Workflow based on what the Workflow needs.&lt;/p&gt;
&lt;p&gt;For example, if you wanted to implement a human-in-the-loop approval process, you could use &lt;code&gt;waitForEvent&lt;/code&gt; to wait for a user to approve or reject a request, and then conditionally execute code based on the result.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &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;WorkflowEntrypoint&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;WorkflowStep&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;WorkflowEvent&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; from &lt;/span&gt;&lt;span&gt;&quot;cloudflare:workers&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyWorkflow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WorkflowEntrypoint&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&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;step&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;// Other steps in your Workflow&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stripeEvent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;step&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;waitForEvent&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;&quot;receive invoice paid webhook from Stripe&quot;&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; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;stripe-webhook&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; timeout&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1 hour&quot;&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;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;// Rest of your Workflow&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WorkflowEntrypoint&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WorkflowStep&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WorkflowEvent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;cloudflare:workers&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MyWorkflow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WorkflowEntrypoint&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Env&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Params&lt;/span&gt;&lt;span&gt;&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&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;WorkflowEvent&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Params&lt;/span&gt;&lt;span&gt;&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;step&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WorkflowStep&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;// Other steps in your Workflow&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;stripeEvent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;step&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;waitForEvent&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;IncomingStripeWebhook&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;receive invoice paid webhook from Stripe&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;stripe-webhook&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; timeout&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;1 hour&quot;&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;// Rest of your Workflow&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;You can then send a Workflow an event from an external service via HTTP or from within a Worker using the &lt;a href=&quot;https://developers.cloudflare.com/workflows/build/workers-api/&quot;&gt;Workers API&lt;/a&gt; for Workflows:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;,&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;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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instanceId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;URL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;searchParams&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;instanceId&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;webhookPayload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;json&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;MY_WORKFLOW&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;instanceId&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;// Send our event, with `type` matching the event type defined in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// our step.waitForEvent call&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sendEvent&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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;stripe-webhook&quot;&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;payload&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;webhookPayload&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;json&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;status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;status&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;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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;,&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;span&gt;Env&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instanceId&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;URL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;searchParams&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;instanceId&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;webhookPayload&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;json&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Payload&lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt;()&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;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;MY_WORKFLOW&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;instanceId&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;// Send our event, with `type` matching the event type defined in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// our step.waitForEvent call&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sendEvent&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;stripe-webhook&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; payload&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;webhookPayload&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;json&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;status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instance&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;status&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;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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Read the &lt;a href=&quot;https://blog.cloudflare.com/workflows-is-now-generally-available/&quot; target=&quot;_blank&quot;&gt;GA announcement blog&lt;/a&gt; to learn more about what landed as part of the Workflows GA.&lt;/p&gt;</description><pubDate>Mon, 07 Apr 2025 00:00:00 GMT</pubDate><product>Workflows</product><category>Workflows</category><category>Workers</category></item><item><title>Browser Rendering - Playwright for Browser Rendering now available</title><link>https://developers.cloudflare.com/changelog/post/2025-04-04-playwright-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-04-playwright-beta/</guid><description>&lt;p&gt;We&apos;re excited to share that you can now use Playwright&apos;s browser automation &lt;a href=&quot;https://playwright.dev/docs/api/class-playwright&quot; target=&quot;_blank&quot;&gt;capabilities&lt;/a&gt; from Cloudflare &lt;a href=&quot;https://developers.cloudflare.com/workers/&quot;&gt;Workers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://playwright.dev/&quot; target=&quot;_blank&quot;&gt;Playwright&lt;/a&gt; is an open-source package developed by Microsoft that can do browser automation tasks; it&apos;s commonly used to write software tests, debug applications, create screenshots, and crawl pages. Like &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/puppeteer/&quot;&gt;Puppeteer&lt;/a&gt;, we &lt;a href=&quot;https://github.com/cloudflare/playwright&quot; target=&quot;_blank&quot;&gt;forked&lt;/a&gt; Playwright and modified it to be compatible with Cloudflare Workers and &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/&quot; target=&quot;_blank&quot;&gt;Browser Rendering&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Below is an example of how to use Playwright with Browser Rendering to test a TODO application using assertions:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;launch&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; type &lt;/span&gt;&lt;span&gt;BrowserWorker&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/playwright&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;@cloudflare/playwright/test&quot;&lt;/span&gt;&lt;span&gt;;&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;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;MYBROWSER&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;BrowserWorker&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;,&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;span&gt;Env&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;browser&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;launch&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;MYBROWSER&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;browser&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;newPage&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;goto&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://demo.playwright.dev/todomvc&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TODO_ITEMS&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;&quot;buy some cheese&quot;&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;&quot;feed the cat&quot;&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;&quot;book a doctors appointment&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newTodo&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getByPlaceholder&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;What needs to be done?&quot;&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;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;item&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TODO_ITEMS&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newTodo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fill&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;item&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;newTodo&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;press&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Enter&quot;&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;/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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;expect&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getByTestId&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;todo-title&quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toHaveCount&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;TODO_ITEMS&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;length&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;all&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;TODO_ITEMS&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;map&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &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;expect&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;getByTestId&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;todo-title&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;nth&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;index&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toHaveText&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;value&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;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;/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;Playwright is available as an npm package at &lt;a href=&quot;https://www.npmjs.com/package/@cloudflare/playwright&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;@cloudflare/playwright&lt;/code&gt;&lt;/a&gt; and the code is at &lt;a href=&quot;https://github.com/cloudflare/playwright&quot; target=&quot;_blank&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Learn more in our &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/playwright/&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 04 Apr 2025 00:00:00 GMT</pubDate><product>Browser Rendering</product><category>Browser Rendering</category></item><item><title>Cache - Workers Fetch API can override Cache Rules</title><link>https://developers.cloudflare.com/changelog/post/2025-04-04-workers-fetch-api-override-cache-rules/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-04-workers-fetch-api-override-cache-rules/</guid><description>&lt;p&gt;You can now programmatically override Cache Rules using the &lt;code&gt;cf&lt;/code&gt; object in the &lt;code&gt;fetch()&lt;/code&gt; command. This feature gives you fine-grained control over caching behavior on a per-request basis, allowing Workers to customize cache settings dynamically based on request properties, user context, or business logic.&lt;/p&gt;
&lt;h4&gt;How it works&lt;/h4&gt;
&lt;p&gt;Using the &lt;code&gt;cf&lt;/code&gt; object in &lt;code&gt;fetch()&lt;/code&gt;, you can override specific Cache Rules settings by:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Setting custom cache options&lt;/strong&gt;: Pass cache properties in the &lt;code&gt;cf&lt;/code&gt; object as the second argument to &lt;code&gt;fetch()&lt;/code&gt; to override default Cache Rules.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic cache control&lt;/strong&gt;: Apply different caching strategies based on request headers, cookies, or other runtime conditions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Per-request customization&lt;/strong&gt;: Bypass or modify Cache Rules for individual requests while maintaining default behavior for others.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Programmatic cache management&lt;/strong&gt;: Implement complex caching logic that adapts to your application&apos;s needs.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;What can be configured&lt;/h4&gt;
&lt;p&gt;Workers can override the following Cache Rules settings through the &lt;code&gt;cf&lt;/code&gt; object:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;cacheEverything&lt;/code&gt;&lt;/strong&gt;: Treat all content as static and cache all file types beyond the default cached content.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;cacheTtl&lt;/code&gt;&lt;/strong&gt;: Set custom time-to-live values in seconds for cached content at the edge, regardless of origin headers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;cacheTtlByStatus&lt;/code&gt;&lt;/strong&gt;: Set different TTLs based on the response status code (for example, &lt;code&gt;{ &quot;200-299&quot;: 86400, 404: 1, &quot;500-599&quot;: 0 }&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;cacheKey&lt;/code&gt;&lt;/strong&gt;: Customize cache keys to control which requests are treated as the same for caching purposes (Enterprise only).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;cacheTags&lt;/code&gt;&lt;/strong&gt;: Append additional cache tags for targeted cache purging operations.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Benefits&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enhanced flexibility&lt;/strong&gt;: Customize cache behavior without modifying zone-level Cache Rules.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic optimization&lt;/strong&gt;: Adjust caching strategies in real-time based on request context.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simplified configuration&lt;/strong&gt;: Reduce the number of Cache Rules needed by handling edge cases programmatically.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved performance&lt;/strong&gt;: Fine-tune cache behavior for specific use cases to maximize hit rates.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;To get started, refer to the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/fetch/&quot;&gt;Workers Fetch API documentation&lt;/a&gt; and the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/request/#the-cf-property-requestinitcfproperties&quot;&gt;cf object properties documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 04 Apr 2025 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>Cache - All cache purge methods now available for all plans</title><link>https://developers.cloudflare.com/changelog/post/2025-04-01-purge-for-all/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-01-purge-for-all/</guid><description>&lt;p&gt;You can now access all Cloudflare cache purge methods — no matter which plan you’re on. Whether you need to update a single asset or instantly invalidate large portions of your site’s content, you now have the same powerful tools previously reserved for Enterprise customers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Anyone on Cloudflare can now:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/purge-cache/purge-everything/&quot;&gt;Purge Everything&lt;/a&gt;: Clears all cached content associated with a website.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/purge-cache/purge_by_prefix/&quot;&gt;Purge by Prefix&lt;/a&gt;: Targets URLs sharing a common prefix.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/purge-cache/purge-by-hostname/&quot;&gt;Purge by Hostname&lt;/a&gt;: Invalidates content by specific hostnames.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/purge-cache/purge-by-single-file/&quot;&gt;Purge by URL (single-file purge)&lt;/a&gt;: Precisely targets individual URLs.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/purge-cache/purge-by-tags/&quot;&gt;Purge by Tag&lt;/a&gt;: Uses Cache-Tag response headers to invalidate grouped assets, offering flexibility for complex cache management scenarios.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Want to learn how each purge method works, when to use them, or what limits apply to your plan? Dive into our &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/purge-cache/&quot;&gt;purge cache documentation&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/api/resources/cache/methods/purge/&quot; target=&quot;_blank&quot;&gt;API reference&lt;/a&gt; for all the details.&lt;/p&gt;</description><pubDate>Thu, 03 Apr 2025 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>WAF - WAF Release - 2025-04-02</title><link>https://developers.cloudflare.com/changelog/post/2025-04-02-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-02-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;8b8074e73b7d4aba92fc68f3622f0483 &lt;/td&gt;&lt;td&gt;100732&lt;/td&gt;&lt;td&gt;Sitecore - Code Injection - CVE:CVE-2025-27218&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;8350947451a1401c934f5e660f101cca &lt;/td&gt;&lt;td&gt;100733&lt;/td&gt;&lt;td&gt;&lt;p&gt;Angular-Base64-Upload - Remote Code Execution - CVE:CVE-2024-42640&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;a9ec9cf625ff42769298671d1bbcd247 &lt;/td&gt;&lt;td&gt;100734&lt;/td&gt;&lt;td&gt;Apache Camel - Remote Code Execution - CVE:CVE-2025-29891&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;3d6bf99039b54312a1a2165590aea1ca &lt;/td&gt;&lt;td&gt;100735&lt;/td&gt;&lt;td&gt;&lt;p&gt;Progress Software WhatsUp Gold - Remote Code Execution -
CVE:CVE-2024-4885&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;d104e3246dc14ac7851b4049d9d8c5f2 &lt;/td&gt;&lt;td&gt;100737&lt;/td&gt;&lt;td&gt;Apache Tomcat - Remote Code Execution - CVE:CVE-2025-24813&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;21c7a963e1b749e7b1753238a28a42c4 &lt;/td&gt;&lt;td&gt;100659&lt;/td&gt;&lt;td&gt;Common Payloads for Server-side Template Injection&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;887843ffbe90436dadd1543adaa4b037 &lt;/td&gt;&lt;td&gt;100659&lt;/td&gt;&lt;td&gt;Common Payloads for Server-side Template Injection - Base64&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;3565b80fc5b541b4832c0fc848f6a9cf &lt;/td&gt;&lt;td&gt;100642&lt;/td&gt;&lt;td&gt;LDAP Injection&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;44d7bf9bf0fa4898b8579573e0713e9f &lt;/td&gt;&lt;td&gt;100642&lt;/td&gt;&lt;td&gt;LDAP Injection Base64&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;e35c9a670b864a3ba0203ffb1bc977d1 &lt;/td&gt;&lt;td&gt;100005&lt;/td&gt;&lt;td&gt;&lt;p&gt;DotNetNuke - File Inclusion - CVE:CVE-2018-9126, CVE:CVE-2011-1892,
CVE:CVE-2022-31474&lt;/p&gt;&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;cd8db44032694fdf8d6e22c1bb70a463 &lt;/td&gt;&lt;td&gt;100527&lt;/td&gt;&lt;td&gt;Apache Struts - CVE:CVE-2021-31805&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;0d838d9ab046443fa3f8b3e50c99546a &lt;/td&gt;&lt;td&gt;100702&lt;/td&gt;&lt;td&gt;Command Injection - CVE:CVE-2022-24108&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;533fbad558ce4c5ebcf013f09a5581d0 &lt;/td&gt;&lt;td&gt;100622C&lt;/td&gt;&lt;td&gt;&lt;p&gt;Ivanti - Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887,
CVE:CVE-2024-22024&lt;/p&gt;&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;04176552f62f4b75bf65981206d0b009 &lt;/td&gt;&lt;td&gt;100536C&lt;/td&gt;&lt;td&gt;GraphQL Command Injection&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;25883bf28575433c952b830c1651d0c8 &lt;/td&gt;&lt;td&gt;100536&lt;/td&gt;&lt;td&gt;GraphQL Injection&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;7b70da1bb8d243bd80cd7a73af00f61d &lt;/td&gt;&lt;td&gt;100536A&lt;/td&gt;&lt;td&gt;GraphQL Introspection&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;58c4853c250946359472b7eaa41e5b67 &lt;/td&gt;&lt;td&gt;100536B&lt;/td&gt;&lt;td&gt;GraphQL SSRF&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;1c241ed5f5bd44b19e17476b433e5b3d &lt;/td&gt;&lt;td&gt;100559A&lt;/td&gt;&lt;td&gt;Prototype Pollution - Common Payloads&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;af748489e1c2411d80d855954816b26f &lt;/td&gt;&lt;td&gt;100559A&lt;/td&gt;&lt;td&gt;Prototype Pollution - Common Payloads - Base64&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;ccc47ab7e34248c09546c284fcea5ed2 &lt;/td&gt;&lt;td&gt;100734&lt;/td&gt;&lt;td&gt;Apache Camel - Remote Code Execution - CVE:CVE-2025-29891&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Wed, 02 Apr 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Email security - CASB and Email security</title><link>https://developers.cloudflare.com/changelog/post/2025-04-01-casb-email-security/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-04-01-casb-email-security/</guid><description>&lt;p&gt;With Email security, you get two free CASB integrations.&lt;/p&gt;
&lt;p&gt;Use one SaaS integration for Email security to sync with your directory of users, take actions on delivered emails, automatically provide EMLs for reclassification requests for clean emails, discover CASB findings and more.&lt;/p&gt;
&lt;p&gt;With the other integration, you can have a separate SaaS integration for CASB findings for another SaaS provider.&lt;/p&gt;
&lt;p&gt;Refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/integrations/cloud-and-saas/&quot;&gt;Add an integration&lt;/a&gt; to learn more about this feature.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/CASB-EmailSecurity.B1wd9be2_PR5LD.webp&quot; alt=&quot;CASB-EmailSecurity&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;This feature is available across these Email security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 01 Apr 2025 23:22:49 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>Queues - New Pause &amp; Purge APIs for Queues</title><link>https://developers.cloudflare.com/changelog/post/2025-03-25-pause-purge-queues/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-25-pause-purge-queues/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/queues/&quot;&gt;Queues&lt;/a&gt; now supports the ability to pause message delivery and/or purge (delete) messages on a queue. These operations can be useful when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Your consumer has a bug or downtime, and you want to temporarily stop messages from being processed while you fix the bug&lt;/li&gt;
&lt;li&gt;You have pushed invalid messages to a queue due to a code change during development, and you want to clean up the backlog&lt;/li&gt;
&lt;li&gt;Your queue has a backlog that is stale and you want to clean it up to allow new messages to be consumed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To pause a queue using &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt;, run the &lt;code&gt;pause-delivery&lt;/code&gt; command. Paused queues continue to receive messages. And you can easily unpause a queue using the &lt;code&gt;resume-delivery&lt;/code&gt; 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;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queues&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pause-delivery&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-queue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Pausing&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delivery&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-queue.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Paused&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delivery&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-queue.&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;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queues&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;resume-delivery&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-queue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Resuming&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delivery&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-queue.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Resumed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delivery&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-queue.&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;Purging a queue permanently deletes all messages in the queue. Unlike pausing, purging is an irreversible operation:&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;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queues&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;purge&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-queue&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;This&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;operation&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;will&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;permanently&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;delete&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;all&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-queue.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Type&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-queue&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;proceed.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;…&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-queue&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Purged&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;my-queue&apos;&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;You can also do these operations using the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/queues/&quot;&gt;Queues REST API&lt;/a&gt;, or the dashboard page for a queue.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/pause-purge.SQ7B3RCF_2dqU5K.webp&quot; alt=&quot;Pause and purge using the dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;This feature is available on all new and existing queues. Head over to the &lt;a href=&quot;https://developers.cloudflare.com/queues/configuration/pause-purge&quot;&gt;pause and purge documentation&lt;/a&gt; to learn more. And if you haven&apos;t used Cloudflare Queues before, &lt;a href=&quot;https://developers.cloudflare.com/queues/get-started&quot;&gt;get started with the Cloudflare Queues guide&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 27 Mar 2025 12:00:00 GMT</pubDate><product>Queues</product><category>Queues</category></item><item><title>Registrar - Register and renew .ai and .shop domains at cost</title><link>https://developers.cloudflare.com/changelog/post/2025-03-27-ai-domains-available/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-27-ai-domains-available/</guid><description>&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-03-27-ai-domains-available.D96eztke_Z1gk2MU.webp&quot; alt=&quot;Example search for .ai domains&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Cloudflare Registrar now supports &lt;code&gt;.ai&lt;/code&gt; and &lt;code&gt;.shop&lt;/code&gt; domains. These are two of our most highly-requested top-level domains (TLDs) and are great additions to the &lt;a href=&quot;https://domains.cloudflare.com/tlds&quot; target=&quot;_blank&quot;&gt;300+ other TLDs we support&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Starting today, customers can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Register and renew these domains &lt;em&gt;at cost&lt;/em&gt; without any markups or add-on fees&lt;/li&gt;
&lt;li&gt;Enjoy best-in-class security and performance with native integrations with Cloudflare DNS, CDN, and SSL services like one-click DNSSEC&lt;/li&gt;
&lt;li&gt;Combat domain hijacking with &lt;a href=&quot;https://www.cloudflare.com/products/registrar/custom-domain-protection/&quot; target=&quot;_blank&quot;&gt;Custom Domain Protection&lt;/a&gt; (available on enterprise plans)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We can&apos;t wait to see what AI and e-commerce projects you deploy on Cloudflare. To get started, transfer your domains to Cloudflare or &lt;a href=&quot;https://domains.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;search for new ones to register&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 27 Mar 2025 10:00:00 GMT</pubDate><product>Registrar</product><category>Registrar</category></item><item><title>Audit Logs - Audit logs (version 2) - Beta Release</title><link>https://developers.cloudflare.com/changelog/post/2025-03-27-automatic-audit-logs-beta-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-27-automatic-audit-logs-beta-release/</guid><description>&lt;p&gt;The latest version of audit logs streamlines audit logging by automatically capturing all user and system actions performed through the Cloudflare Dashboard or public APIs. This update leverages Cloudflare’s existing API Shield to generate audit logs based on OpenAPI schemas, ensuring a more consistent and automated logging process.&lt;/p&gt;
&lt;p&gt;Availability: Audit logs (version 2) is now in Beta, with support limited to &lt;strong&gt;API access&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Use the following API endpoint to retrieve audit logs:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;GET&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;//api.cloudflare.com/client/v4/accounts/&amp;#x3C;account_id&gt;/logs/audit?since=&amp;#x3C;date&gt;&amp;#x26;before=&amp;#x3C;date&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;You can access detailed documentation for audit logs (version 2) Beta API release &lt;a href=&quot;https://developers.cloudflare.com/api/resources/accounts/subresources/logs/subresources/audit/methods/list/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Key Improvements in the Beta Release:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Automated &amp;#x26; standardized logging&lt;/strong&gt;: Logs are now generated automatically using a standardized system, replacing manual, team-dependent logging. This ensures consistency across all Cloudflare services.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Expanded product coverage&lt;/strong&gt;: Increased audit log coverage from 75% to 95%. Key API endpoints such as &lt;code&gt;/accounts&lt;/code&gt;, &lt;code&gt;/zones&lt;/code&gt;, and &lt;code&gt;/organizations&lt;/code&gt; are now included.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Granular filtering&lt;/strong&gt;: Logs now follow a uniform format, enabling precise filtering by actions, users, methods, and resources—allowing for faster and more efficient investigations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Enhanced context and traceability&lt;/strong&gt;: Each log entry now includes detailed context, such as the authentication method used, the interface (API or Dashboard) through which the action was performed, and mappings to Cloudflare Ray IDs for better traceability.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Comprehensive activity capture&lt;/strong&gt;: Expanded logging to include GET requests and failed attempts, ensuring that all critical activities are recorded.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Known Limitations in Beta&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Error handling for the API is not implemented.&lt;/li&gt;
&lt;li&gt;There may be gaps or missing entries in the available audit logs.&lt;/li&gt;
&lt;li&gt;UI is unavailable in this Beta release.&lt;/li&gt;
&lt;li&gt;System-level logs and User-Activity logs are not included.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Support for these features is coming as part of the GA release later this year. For more details, including a sample audit log, check out our blog post: &lt;a href=&quot;https://blog.cloudflare.com/introducing-automatic-audit-logs/&quot; target=&quot;_blank&quot;&gt;Introducing Automatic Audit Logs&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 27 Mar 2025 00:00:00 GMT</pubDate><product>Audit Logs</product><category>Audit Logs</category></item><item><title>Cloudflare Fundamentals - Updates to Account Home - Quick actions, traffic insights, Workers projects, and more</title><link>https://developers.cloudflare.com/changelog/post/2025-03-26-account-home-updates/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-26-account-home-updates/</guid><description>&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-03-26-account-home-updates.CcOsD1dD_1WmntK.webp&quot; alt=&quot;Updated Account Home&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Recently, Account Home has been updated to streamline your workflows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Recent Workers projects&lt;/strong&gt;: You&apos;ll now find your projects readily accessible from a new &lt;code&gt;Developer Platform&lt;/code&gt; tab on Account Home. See recently-modified projects and explore what you can work our developer-focused products.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Traffic and security insights&lt;/strong&gt;: Get a snapshot of domain performance at a glance with key metrics and trends.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Quick actions&lt;/strong&gt;: You can now perform common actions for your account, domains, and even Workers in just 1-2 clicks from the 3-dot menu.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Keep starred domains front and center&lt;/strong&gt;: Now, when you filter for starred domains on Account Home, we&apos;ll save your preference so you&apos;ll continue to only see starred domains by default.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We can&apos;t wait for you to take the new Account Home for a spin.&lt;/p&gt;
&lt;p&gt;For more info:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Try the updated Account Home&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/fundamentals/manage-domains/star-zones/&quot;&gt;Documentation on starred domains&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 26 Mar 2025 06:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category></item><item><title>Workers - Run Workers for up to 5 minutes of CPU-time</title><link>https://developers.cloudflare.com/changelog/post/2025-03-25-higher-cpu-limits/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-25-higher-cpu-limits/</guid><description>&lt;p&gt;You can now run a Worker for up to 5 minutes of CPU time for each request.&lt;/p&gt;
&lt;p&gt;Previously, each Workers request ran for a maximum of 30 seconds of CPU time — that is the time that a Worker is actually performing a task (we still allowed unlimited wall-clock time, in case you were waiting on slow resources). This
meant that some compute-intensive tasks were impossible to do with a Worker. For instance,
you might want to take the cryptographic hash of a large file from R2. If
this computation ran for over 30 seconds, the Worker request would have timed out.&lt;/p&gt;
&lt;p&gt;By default, Workers are still limited to 30 seconds of CPU time. This protects developers
from incurring accidental cost due to buggy code.&lt;/p&gt;
&lt;p&gt;By changing the &lt;code&gt;cpu_ms&lt;/code&gt; value in your Wrangler configuration, you can opt in to
any value up to 300,000 (5 minutes).&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;// ...rest of your configuration...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;limits&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;cpu_ms&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;300000&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;// ...rest of your configuration...&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;limits&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cpu_ms&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;300_000&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;CPU time is the amount of time the CPU actually spends doing work during a given request.
If a Worker&apos;s request makes a sub-request and waits for that request to come back before
doing additional work, this time spent waiting &lt;strong&gt;is not&lt;/strong&gt; counted towards CPU time.&lt;/p&gt;&lt;p&gt;Worker requests could run for more than 30 seconds of total time prior to this change — only
CPU time was limited.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;For more information on the updates limits, see the documentation on &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/configuration/#limits&quot;&gt;Wrangler configuration for &lt;code&gt;cpu_ms&lt;/code&gt;&lt;/a&gt;
and on &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/limits/#cpu-time&quot;&gt;Workers CPU time limits&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For building long-running tasks on Cloudflare, we also recommend checking out &lt;a href=&quot;https://developers.cloudflare.com/workflows/&quot;&gt;Workflows&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/queues/&quot;&gt;Queues&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 26 Mar 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Source Maps are Generally Available</title><link>https://developers.cloudflare.com/changelog/post/2025-03-25-gzip-source-maps/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-25-gzip-source-maps/</guid><description>&lt;p&gt;Source maps are now Generally Available (GA). You can now be uploaded with a maximum gzipped size of 15 MB.
Previously, the maximum size limit was 15 MB uncompressed.&lt;/p&gt;
&lt;p&gt;Source maps help map between the original source code and the transformed/minified code that gets deployed
to production. By uploading your source map, you allow Cloudflare to map the stack trace from exceptions
onto the original source code making it easier to debug.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/without-source-map.ByYR83oU_Z1q7wOD.webp&quot; alt=&quot;Stack Trace without Source Map remapping&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;With &lt;strong&gt;no source maps uploaded&lt;/strong&gt;: notice how all the Javascript has been minified to one file, so the stack trace is missing information on file name, shows incorrect line numbers, and incorrectly references &lt;code&gt;js&lt;/code&gt; instead of &lt;code&gt;ts&lt;/code&gt;.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/with-source-map.PipytmVe_2dYiLI.webp&quot; alt=&quot;Stack Trace with Source Map remapping&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;With &lt;strong&gt;source maps uploaded&lt;/strong&gt;: all methods reference the correct files and line numbers.&lt;/p&gt;
&lt;p&gt;Uploading source maps and stack trace remapping happens out of band from the Worker execution,
so source maps do not affect upload speed, bundle size, or cold starts. The remapped stack
traces are accessible through Tail Workers, Workers Logs, and Workers Logpush.&lt;/p&gt;
&lt;p&gt;To enable source maps, add the following to your
&lt;a href=&quot;https://developers.cloudflare.com/pages/functions/source-maps/&quot;&gt;Pages Function&apos;s&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/source-maps/&quot;&gt;Worker&apos;s&lt;/a&gt; wrangler configuration:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;upload_source_maps&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;upload_source_maps&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;</description><pubDate>Tue, 25 Mar 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>WAF - WAF Release - 2025-03-22 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-03-22-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-22-emergency-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;34583778093748cc83ff7b38f472013e &lt;/td&gt;&lt;td&gt;100739&lt;/td&gt;&lt;td&gt;Next.js - Auth Bypass - CVE:CVE-2025-29927&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Sat, 22 Mar 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers, Pages, WAF - New Managed WAF rule for Next.js CVE-2025-29927.</title><link>https://developers.cloudflare.com/changelog/post/2025-03-22-next-js-vulnerability-waf/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-22-next-js-vulnerability-waf/</guid><description>&lt;p&gt;&lt;strong&gt;Update: Mon Mar 24th, 11PM UTC&lt;/strong&gt;: Next.js has made further changes to address a smaller vulnerability introduced in the patches made to its middleware handling. Users should upgrade to Next.js versions &lt;code&gt;15.2.4&lt;/code&gt;, &lt;code&gt;14.2.26&lt;/code&gt;, &lt;code&gt;13.5.10&lt;/code&gt; or &lt;code&gt;12.3.6&lt;/code&gt;. &lt;strong&gt;If you are unable to immediately upgrade or are running an older version of Next.js, you can enable the WAF rule described in this changelog as a mitigation&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update: Mon Mar 24th, 8PM UTC&lt;/strong&gt;: Next.js has now &lt;a href=&quot;https://github.com/advisories/GHSA-f82v-jwr5-mffw&quot; target=&quot;_blank&quot;&gt;backported the patch for this vulnerability&lt;/a&gt; to cover Next.js v12 and v13. Users on those versions will need to patch to &lt;code&gt;13.5.9&lt;/code&gt; and &lt;code&gt;12.3.5&lt;/code&gt; (respectively) to mitigate the vulnerability.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update: Sat Mar 22nd, 4PM UTC&lt;/strong&gt;: We have changed this WAF rule to opt-in only, as sites that use auth middleware with third-party auth vendors were observing failing requests.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We strongly recommend updating your version of Next.js (if eligible)&lt;/strong&gt; to the patched versions, as your app will otherwise be vulnerable to an authentication bypass attack regardless of auth provider.&lt;/p&gt;
&lt;h4&gt;Enable the Managed Rule (strongly recommended)&lt;/h4&gt;
&lt;p&gt;This rule is opt-in only for sites on the Pro plan or above in the &lt;a href=&quot;https://developers.cloudflare.com/waf/managed-rules/&quot;&gt;WAF managed ruleset&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To enable the rule:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Head to Security &gt; WAF &gt; Managed rules in the Cloudflare dashboard for the zone (website) you want to protect.&lt;/li&gt;
&lt;li&gt;Click the three dots next to &lt;strong&gt;Cloudflare Managed Ruleset&lt;/strong&gt; and choose &lt;strong&gt;Edit&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Scroll down and choose &lt;strong&gt;Browse Rules&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;CVE-2025-29927&lt;/strong&gt; (ruleId: &lt;code&gt;34583778093748cc83ff7b38f472013e&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Change the &lt;strong&gt;Status&lt;/strong&gt; to &lt;strong&gt;Enabled&lt;/strong&gt; and the &lt;strong&gt;Action&lt;/strong&gt; to &lt;strong&gt;Block&lt;/strong&gt;. You can optionally set the rule to Log, to validate potential impact before enabling it. Log will not block requests.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Scroll down and choose &lt;strong&gt;Save&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This will enable the WAF rule and block requests with the &lt;code&gt;x-middleware-subrequest&lt;/code&gt; header regardless of Next.js version.&lt;/p&gt;
&lt;h4&gt;Create a WAF rule (manual)&lt;/h4&gt;
&lt;p&gt;For users on the Free plan, or who want to define a more specific rule, you can create a &lt;a href=&quot;https://developers.cloudflare.com/waf/custom-rules/create-dashboard/&quot;&gt;Custom WAF rule&lt;/a&gt; to block requests with the &lt;code&gt;x-middleware-subrequest&lt;/code&gt; header regardless of Next.js version.&lt;/p&gt;
&lt;p&gt;To create a custom rule:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Head to Security &gt; WAF &gt; Custom rules in the Cloudflare dashboard for the zone (website) you want to protect.&lt;/li&gt;
&lt;li&gt;Give the rule a name - e.g. &lt;code&gt;next-js-CVE-2025-29927&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Set the matching parameters for the rule match any request where the &lt;code&gt;x-middleware-subrequest&lt;/code&gt; header &lt;code&gt;exists&lt;/code&gt; per the rule expression below.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;len(http.request.headers[&lt;/span&gt;&lt;span&gt;&quot;x-middleware-subrequest&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&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;ol&gt;
&lt;li&gt;Set the action to &apos;block&apos;. If you want to observe the impact before blocking requests, set the action to &apos;log&apos; (and edit the rule later).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deploy&lt;/strong&gt; the rule.&lt;/li&gt;
&lt;/ol&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/waf-rule-cve-2025-29927.0i0XiweZ_Z8mlyw.webp&quot; alt=&quot;Next.js CVE-2025-29927 WAF rule&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;Next.js CVE-2025-29927&lt;/h4&gt;
&lt;p&gt;We&apos;ve made a WAF (Web Application Firewall) rule available to all sites on Cloudflare to protect against the &lt;a href=&quot;https://github.com/advisories/GHSA-f82v-jwr5-mffw&quot; target=&quot;_blank&quot;&gt;Next.js authentication bypass vulnerability&lt;/a&gt; (&lt;code&gt;CVE-2025-29927&lt;/code&gt;) published on March 21st, 2025.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This rule is not enabled by default as it blocked requests across sites for specific authentication middleware.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;This managed rule protects sites using Next.js on Workers and Pages, as well as sites using Cloudflare to protect Next.js applications hosted elsewhere.&lt;/li&gt;
&lt;li&gt;This rule has been made available (but not enabled by default) to all sites as part of our &lt;a href=&quot;https://developers.cloudflare.com/waf/managed-rules/reference/cloudflare-managed-ruleset/&quot;&gt;WAF Managed Ruleset&lt;/a&gt; and blocks requests that attempt to bypass authentication in Next.js applications.&lt;/li&gt;
&lt;li&gt;The vulnerability affects almost all Next.js versions, and has been fully patched in Next.js &lt;code&gt;14.2.26&lt;/code&gt; and &lt;code&gt;15.2.4&lt;/code&gt;. Earlier, interim releases did not fully patch this vulnerability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Users on older versions of Next.js (&lt;code&gt;11.1.4&lt;/code&gt; to &lt;code&gt;13.5.6&lt;/code&gt;) did not originally have a patch available&lt;/strong&gt;, but this the patch for this vulnerability and a subsequent additional patch have been backported to Next.js versions &lt;code&gt;12.3.6&lt;/code&gt; and &lt;code&gt;13.5.10&lt;/code&gt; as of Monday, March 24th. Users on Next.js v11 will need to deploy the stated workaround or enable the WAF rule.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The managed WAF rule mitigates this by blocking &lt;em&gt;external&lt;/em&gt; user requests with the &lt;code&gt;x-middleware-subrequest&lt;/code&gt; header regardless of Next.js version, but we recommend users using Next.js 14 and 15 upgrade to the patched versions of Next.js as an additional mitigation.&lt;/p&gt;</description><pubDate>Sat, 22 Mar 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category><category>Pages</category><category>WAF</category></item><item><title>Workers, Pages - Smart Placement is smarter about running Workers and Pages Functions in the best locations</title><link>https://developers.cloudflare.com/changelog/post/2025-03-22-smart-placement-stablization/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-22-smart-placement-stablization/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/placement/&quot;&gt;Smart Placement&lt;/a&gt; is a unique Cloudflare feature that can make decisions to move your Worker to run in a more optimal location (such as closer to a database). Instead of always running in the default location (the one closest to where the request is received), Smart Placement uses certain “heuristics” (rules and thresholds) to decide if a different location might be faster or more efficient.&lt;/p&gt;
&lt;p&gt;Previously, if these heuristics weren&apos;t consistently met, your Worker would revert to running in the default location—even after it had been optimally placed. This meant that if your Worker received minimal traffic for a period of time, the system would reset to the default location, rather than remaining in the optimal one.&lt;/p&gt;
&lt;p&gt;Now, once Smart Placement has identified and assigned an optimal location, temporarily dropping below the heuristic thresholds will not force a return to default locations. For example in the previous algorithm, a drop in requests for a few days might return to default locations and heuristics would have to be met again. This was problematic for workloads that made requests to a geographically located resource every few days or longer. In this scenario, your Worker would never get placed optimally. This is no longer the case.&lt;/p&gt;</description><pubDate>Sat, 22 Mar 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category><category>Pages</category></item><item><title>AI Gateway - AI Gateway launches Realtime WebSockets API</title><link>https://developers.cloudflare.com/changelog/post/2025-03-20-websockets/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-20-websockets/</guid><description>&lt;p&gt;We are excited to announce that &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot;&gt;AI Gateway&lt;/a&gt; now supports real-time AI interactions with the new &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/websockets-api/realtime-api/&quot;&gt;Realtime WebSockets API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This new capability allows developers to establish persistent, low-latency connections between their applications and AI models, enabling natural, real-time conversational AI experiences, including speech-to-speech interactions.&lt;/p&gt;
&lt;p&gt;The Realtime WebSockets API works with the &lt;a href=&quot;https://platform.openai.com/docs/guides/realtime#connect-with-websockets&quot; target=&quot;_blank&quot;&gt;OpenAI Realtime API&lt;/a&gt;, &lt;a href=&quot;https://ai.google.dev/gemini-api/docs/multimodal-live&quot; target=&quot;_blank&quot;&gt;Google Gemini Live API&lt;/a&gt;, and supports real-time text and speech interactions with models from &lt;a href=&quot;https://docs.cartesia.ai/api-reference/tts/tts&quot; target=&quot;_blank&quot;&gt;Cartesia&lt;/a&gt;, and &lt;a href=&quot;https://elevenlabs.io/docs/conversational-ai/api-reference/conversational-ai/websocket&quot; target=&quot;_blank&quot;&gt;ElevenLabs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here&apos;s how you can connect AI Gateway to &lt;a href=&quot;https://platform.openai.com/docs/guides/realtime#connect-with-websockets&quot; target=&quot;_blank&quot;&gt;OpenAI&apos;s Realtime API&lt;/a&gt; using WebSockets:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;javascript&quot;&gt;&lt;code class=&quot;language-javascript&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;WebSocket&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;ws&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&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;&quot;wss://gateway.ai.cloudflare.com/v1/&amp;#x3C;account_id&gt;/&amp;#x3C;gateway&gt;/openai?model=gpt-4o-realtime-preview-2024-12-17&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ws&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;WebSocket&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;url&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;headers&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;&quot;cf-aig-authorization&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;process&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;CLOUDFLARE_API_KEY&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;Authorization&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Bearer &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;process&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;OPENAI_API_KEY&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;&quot;OpenAI-Beta&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;realtime=v1&quot;&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;;&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;ws&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;open&quot;&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;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Connected to server.&quot;&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;ws&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;message&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toString&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ws&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;send&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;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;response.create&quot;&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;response&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; modalities&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;text&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; instructions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Tell me a joke&quot;&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;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;/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 checking out the &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/websockets-api/realtime-api/&quot;&gt;Realtime WebSockets API&lt;/a&gt; documentation.&lt;/p&gt;</description><pubDate>Fri, 21 Mar 2025 00:00:00 GMT</pubDate><product>AI Gateway</product><category>AI Gateway</category></item><item><title>Gateway - Secure DNS Locations Management User Role</title><link>https://developers.cloudflare.com/changelog/post/2025-03-21-pdns-user-locations-role/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-21-pdns-user-locations-role/</guid><description>&lt;p&gt;We&apos;re excited to introduce the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/resolvers-and-proxies/dns/locations/#secure-dns-locations&quot;&gt;&lt;strong&gt;Cloudflare Zero Trust Secure DNS Locations Write role&lt;/strong&gt;&lt;/a&gt;, designed to provide DNS filtering customers with granular control over third-party access when configuring their Protective DNS (PDNS) solutions.&lt;/p&gt;
&lt;p&gt;Many DNS filtering customers rely on external service partners to manage their DNS location endpoints. This role allows you to grant access to external parties to administer DNS locations without overprovisioning their permissions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Secure DNS Location Requirements:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Mandate usage of &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/resolvers-and-proxies/dns/locations/dns-resolver-ips/#bring-your-own-dns-resolver-ip&quot; target=&quot;_blank&quot;&gt;Bring your own DNS resolver IP addresses&lt;/a&gt; if available on the account.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Require source network filtering for IPv4/IPv6/DoT endpoints; token authentication or source network filtering for the DoH endpoint.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can assign the new role via Cloudflare Dashboard (&lt;code&gt;Manage Accounts &gt; Members&lt;/code&gt;) or via API. For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/resolvers-and-proxies/dns/locations/#secure-dns-locations&quot; target=&quot;_blank&quot;&gt;Secure DNS Locations documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 21 Mar 2025 00:00:00 GMT</pubDate><product>Gateway</product><category>Gateway</category></item><item><title>Cloudflare Fundamentals, Terraform - Dozens of Cloudflare Terraform Provider resources now have proper drift detection</title><link>https://developers.cloudflare.com/changelog/post/2025-03-21-resource-force-replacement-bug/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-21-resource-force-replacement-bug/</guid><description>&lt;p&gt;In &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;Cloudflare Terraform Provider&lt;/a&gt; versions 5.2.0 and above, dozens of resources now have proper drift detection. Before this fix, these resources would indicate they needed to be updated or replaced — even if there was no real change. Now, you can rely on your &lt;code&gt;terraform plan&lt;/code&gt; to only show what resources are expected to change.&lt;/p&gt;
&lt;p&gt;This issue affected &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;resources&lt;/a&gt; related to these products and features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API Shield&lt;/li&gt;
&lt;li&gt;Argo Smart Routing&lt;/li&gt;
&lt;li&gt;Argo Tiered Caching&lt;/li&gt;
&lt;li&gt;Bot Management&lt;/li&gt;
&lt;li&gt;BYOIP&lt;/li&gt;
&lt;li&gt;D1&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;Email Routing&lt;/li&gt;
&lt;li&gt;Hyperdrive&lt;/li&gt;
&lt;li&gt;Observatory&lt;/li&gt;
&lt;li&gt;Pages&lt;/li&gt;
&lt;li&gt;R2&lt;/li&gt;
&lt;li&gt;Rules&lt;/li&gt;
&lt;li&gt;SSL/TLS&lt;/li&gt;
&lt;li&gt;Waiting Room&lt;/li&gt;
&lt;li&gt;Workers&lt;/li&gt;
&lt;li&gt;Zero Trust&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 21 Mar 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Terraform</category></item><item><title>Cloudflare Fundamentals, Terraform - Cloudflare Terraform Provider now properly redacts sensitive values</title><link>https://developers.cloudflare.com/changelog/post/2025-03-21-sensitive-values-redacted/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-21-sensitive-values-redacted/</guid><description>&lt;p&gt;In the &lt;a href=&quot;https://github.com/cloudflare/terraform-provider-cloudflare&quot; target=&quot;_blank&quot;&gt;Cloudflare Terraform Provider&lt;/a&gt; versions 5.2.0 and above, sensitive properties of resources are redacted in logs. Sensitive properties in &lt;a href=&quot;https://raw.githubusercontent.com/cloudflare/api-schemas/refs/heads/main/openapi.yaml&quot; target=&quot;_blank&quot;&gt;Cloudflare&apos;s OpenAPI Schema&lt;/a&gt; are now annotated with &lt;code&gt;x-sensitive: true&lt;/code&gt;. This results in proper auto-generation of the corresponding Terraform resources, and prevents sensitive values from being shown when you run Terraform commands.&lt;/p&gt;
&lt;p&gt;This issue affected &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;resources&lt;/a&gt; related to these products and features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Alerts and Audit Logs&lt;/li&gt;
&lt;li&gt;Device API&lt;/li&gt;
&lt;li&gt;DLP&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;Magic Visibility&lt;/li&gt;
&lt;li&gt;Magic WAN&lt;/li&gt;
&lt;li&gt;TLS Certs and Hostnames&lt;/li&gt;
&lt;li&gt;Tunnels&lt;/li&gt;
&lt;li&gt;Turnstile&lt;/li&gt;
&lt;li&gt;Workers&lt;/li&gt;
&lt;li&gt;Zaraz&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 21 Mar 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Terraform</category></item><item><title>Workers AI - Markdown conversion in Workers AI</title><link>https://developers.cloudflare.com/changelog/post/2025-03-20-markdown-conversion/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-20-markdown-conversion/</guid><description>&lt;p&gt;Document conversion plays an important role when designing and developing AI applications and agents. Workers AI now provides the &lt;code&gt;toMarkdown&lt;/code&gt; utility method that developers can use to for quick, easy, and convenient conversion and summary of documents in multiple formats to Markdown language.&lt;/p&gt;
&lt;p&gt;You can call this new tool using a binding by calling &lt;code&gt;env.AI.toMarkdown()&lt;/code&gt; or the using the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/ai/&quot;&gt;REST API&lt;/a&gt; endpoint.&lt;/p&gt;
&lt;p&gt;In this example, we fetch a PDF document and an image from R2 and feed them both to &lt;code&gt;env.AI.toMarkdown()&lt;/code&gt;. The result is a list of converted documents. Workers AI models are used automatically to detect and summarize the image.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;typescript&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&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;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;./env&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;,&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;span&gt;Env&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ctx&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ExecutionContext&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;// https://pub-979cb28270cc461d94bc8a169d8f389d.r2.dev/somatosensory.pdf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pdf&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;R2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;somatosensory.pdf&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// https://pub-979cb28270cc461d94bc8a169d8f389d.r2.dev/cat.jpeg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cat&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;R2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;cat.jpeg&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;json&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;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;toMarkdown&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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;somatosensory.pdf&quot;&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;blob&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Blob&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pdf&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;arrayBuffer&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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/octet-stream&quot;&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;/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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cat.jpeg&quot;&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;blob&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Blob&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cat&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;arrayBuffer&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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/octet-stream&quot;&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;/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;)&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;This is the result:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;somatosensory.pdf&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;mimeType&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;application/pdf&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;markdown&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;tokens&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&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;&quot;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;# somatosensory.pdf&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;## Metadata&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;- PDFFormatVersion=1.4&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;- IsLinearized=false&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;- IsAcroFormPresent=false&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;- IsXFAPresent=false&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;- IsCollectionPresent=false&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;- IsSignaturesPresent=false&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;- Producer=Prince 20150210 (www.princexml.com)&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;- Title=Anatomy of the Somatosensory System&lt;/span&gt;&lt;span&gt;\n\n&lt;/span&gt;&lt;span&gt;## Contents&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;### Page 1&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;This is a sample document to showcase...&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;/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;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cat.jpeg&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;mimeType&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;image/jpeg&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;format&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;markdown&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;tokens&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&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;&quot;&lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;The image is a close-up photograph of Grumpy Cat, a cat with a distinctive grumpy expression and piercing blue eyes. The cat has a brown face with a white stripe down its nose, and its ears are pointed upright. Its fur is light brown and darker around the face, with a pink nose and mouth. The cat&apos;s eyes are blue and slanted downward, giving it a perpetually grumpy appearance. The background is blurred, but it appears to be a dark brown color. Overall, the image is a humorous and iconic representation of the popular internet meme character, Grumpy Cat. The cat&apos;s facial expression and posture convey a sense of displeasure or annoyance, making it a relatable and entertaining image for many people.&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;/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;See &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/features/markdown-conversion/&quot;&gt;Markdown Conversion&lt;/a&gt; for more information on supported formats, REST API and pricing.&lt;/p&gt;</description><pubDate>Thu, 20 Mar 2025 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>WAF - WAF Release - 2025-03-19 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-03-19-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-19-emergency-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;470b477e27244fddb479c4c7a2cafae7 &lt;/td&gt;&lt;td&gt;100736&lt;/td&gt;&lt;td&gt;Generic HTTP Request Smuggling&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Wed, 19 Mar 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Agents, Workers - npm i agents</title><link>https://developers.cloudflare.com/changelog/post/2025-03-18-npm-i-agents/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-18-npm-i-agents/</guid><description>&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/npm-i-agents.CXCpJ1-7.apng&quot; alt=&quot;npm i agents&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;h4&gt;&lt;code&gt;agents-sdk&lt;/code&gt; -&gt; &lt;code&gt;agents&lt;/code&gt; &lt;span&gt;Updated&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;📝 &lt;strong&gt;We&apos;ve renamed the Agents package to &lt;code&gt;agents&lt;/code&gt;&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;If you&apos;ve already been building with the Agents SDK, you can update your dependencies to use the new package name, and replace references to &lt;code&gt;agents-sdk&lt;/code&gt; with &lt;code&gt;agents&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Install the new package&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agents&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;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Remove the old (deprecated) package&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;uninstall&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agents-sdk&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;# Find instances of the old package name in your codebase&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;grep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;agents-sdk&apos;&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;# Replace instances of the old package name with the new one&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# (or use find-replace in your editor)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;sed&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;s/agents-sdk/agents/g&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;$(&lt;/span&gt;&lt;span&gt;grep&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-rl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;agents-sdk&apos;&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;/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;All future updates will be pushed to the new &lt;code&gt;agents&lt;/code&gt; package, and the older package has been marked as deprecated.&lt;/p&gt;
&lt;h4&gt;Agents SDK updates &lt;span&gt;New&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;We&apos;ve added a number of big new features to the Agents SDK over the past few weeks, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now set &lt;code&gt;cors: true&lt;/code&gt; when using &lt;code&gt;routeAgentRequest&lt;/code&gt; to return permissive default CORS headers to Agent responses.&lt;/li&gt;
&lt;li&gt;The regular client now syncs state on the agent (just like the React version).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;useAgentChat&lt;/code&gt; bug fixes for passing headers/credentials, including properly clearing cache on unmount.&lt;/li&gt;
&lt;li&gt;Experimental &lt;code&gt;/schedule&lt;/code&gt; module with a prompt/schema for adding scheduling to your app (with evals!).&lt;/li&gt;
&lt;li&gt;Changed the internal &lt;code&gt;zod&lt;/code&gt; schema to be compatible with the limitations of Google&apos;s Gemini models by removing the discriminated union, allowing you to use Gemini models with the scheduling API.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&apos;ve also fixed a number of bugs with state synchronization and the React hooks.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// via https://github.com/cloudflare/agents/tree/main/examples/cross-domain&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;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;return&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;// Set { cors: true } to enable CORS headers.&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;routeAgentRequest&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;{&lt;/span&gt;&lt;span&gt; cors&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Not found&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;404&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;)&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;// via https://github.com/cloudflare/agents/tree/main/examples/cross-domain&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;,&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;span&gt;Env&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;return&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;// Set { cors: true } to enable CORS headers.&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;routeAgentRequest&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;{&lt;/span&gt;&lt;span&gt; cors&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Not found&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;404&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;)&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;satisfies&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ExportedHandler&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Env&lt;/span&gt;&lt;span&gt;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;Call Agent methods from your client code &lt;span&gt;New&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;We&apos;ve added a new &lt;a href=&quot;https://developers.cloudflare.com/agents/api-reference/agents-api/&quot;&gt;&lt;code&gt;@unstable_callable()&lt;/code&gt;&lt;/a&gt; decorator for defining methods that can be called directly from clients. This allows you call methods from within your client code: you can call methods (with arguments) and get native JavaScript objects back.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// server.ts&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;unstable_callable&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;agents&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Rpc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&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;// Use the decorator to define a callable method&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;unstable_callable&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;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;rpc test&quot;&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;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getHistory&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sql&lt;/span&gt;&lt;span&gt;`SELECT * FROM history ORDER BY created_at DESC LIMIT 10`&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;// server.ts&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;unstable_callable&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&lt;/span&gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&lt;span&gt; type &lt;/span&gt;&lt;span&gt;StreamingResponse&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;agents&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import type &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&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;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;../server&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Rpc&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Env&lt;/span&gt;&lt;span&gt;&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;// Use the decorator to define a callable method&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;unstable_callable&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;description&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;rpc test&quot;&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;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getHistory&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;this&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sql&lt;/span&gt;&lt;span&gt;`SELECT * FROM history ORDER BY created_at DESC LIMIT 10`&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;h4&gt;agents-starter &lt;span&gt;Updated&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;We&apos;ve fixed a number of small bugs in the &lt;a href=&quot;https://github.com/cloudflare/agents-starter&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;agents-starter&lt;/code&gt;&lt;/a&gt; project — a real-time, chat-based example application with tool-calling &amp;#x26; human-in-the-loop built using the Agents SDK. The starter has also been upgraded to use the latest &lt;a href=&quot;https://developers.cloudflare.com/changelog/2025-03-13-wrangler-v4/&quot;&gt;wrangler v4&lt;/a&gt; release.&lt;/p&gt;
&lt;p&gt;If you&apos;re new to Agents, you can install and run the &lt;code&gt;agents-starter&lt;/code&gt; project in two commands:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Install it&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;npm&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;cloudflare@latest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agents-starter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--template=&quot;cloudflare/agents-starter&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# Run it&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;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;start&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;You can use the starter as a template for your own Agents projects: open up &lt;code&gt;src/server.ts&lt;/code&gt; and &lt;code&gt;src/client.tsx&lt;/code&gt; to see how the Agents SDK is used.&lt;/p&gt;
&lt;h4&gt;More documentation &lt;span&gt;Updated&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;We&apos;ve heard your feedback on the Agents SDK documentation, and we&apos;re shipping more API reference material and usage examples, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Expanded &lt;a href=&quot;https://developers.cloudflare.com/agents/api-reference/&quot;&gt;API reference documentation&lt;/a&gt;, covering the methods and properties exposed by the Agents SDK, as well as more usage examples.&lt;/li&gt;
&lt;li&gt;More &lt;a href=&quot;https://developers.cloudflare.com/agents/api-reference/agents-api/#client-api&quot;&gt;Client API&lt;/a&gt; documentation that documents &lt;code&gt;useAgent&lt;/code&gt;, &lt;code&gt;useAgentChat&lt;/code&gt; and the new &lt;code&gt;@unstable_callable&lt;/code&gt; RPC decorator exposed by the SDK.&lt;/li&gt;
&lt;li&gt;New documentation on how to &lt;a href=&quot;https://developers.cloudflare.com/agents/api-reference/routing/&quot;&gt;route requests to agents&lt;/a&gt; and (optionally) authenticate clients before they connect to your Agents.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Note that the Agents SDK is continually growing: the type definitions included in the SDK will always include the latest APIs exposed by the &lt;code&gt;agents&lt;/code&gt; package.&lt;/p&gt;
&lt;p&gt;If you&apos;re still wondering what Agents are, &lt;a href=&quot;https://blog.cloudflare.com/build-ai-agents-on-cloudflare/&quot; target=&quot;_blank&quot;&gt;read our blog on building AI Agents on Cloudflare&lt;/a&gt; and/or visit the &lt;a href=&quot;https://developers.cloudflare.com/agents/&quot;&gt;Agents documentation&lt;/a&gt; to learn more.&lt;/p&gt;</description><pubDate>Tue, 18 Mar 2025 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>API Shield - New API Posture Management for API Shield</title><link>https://developers.cloudflare.com/changelog/post/2025-03-18-api-posture-management/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-18-api-posture-management/</guid><description>&lt;p&gt;Now, API Shield &lt;strong&gt;automatically&lt;/strong&gt; labels your API inventory with API-specific risks so that you can track and manage risks to your APIs.&lt;/p&gt;
&lt;p&gt;View these risks in &lt;a href=&quot;https://developers.cloudflare.com/api-shield/management-and-monitoring/&quot;&gt;Endpoint Management&lt;/a&gt; by label:&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/endpoint-management-label.BDmf8Ai1_ZM5mgU.webp&quot; alt=&quot;A list of endpoint management labels&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;...or in &lt;a href=&quot;https://developers.cloudflare.com/security-center/security-insights/&quot;&gt;Security Center Insights&lt;/a&gt;:&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/posture-management-insight.7vB7mzGI_Z1HKoUN.webp&quot; alt=&quot;An example security center insight&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;API Shield will scan for risks on your API inventory daily. Here are the new risks we&apos;re scanning for and automatically labelling:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;cf-risk-sensitive&lt;/strong&gt;: applied if the customer is subscribed to the &lt;a href=&quot;https://developers.cloudflare.com/waf/managed-rules/reference/sensitive-data-detection/&quot;&gt;sensitive data detection ruleset&lt;/a&gt; and the WAF detects sensitive data returned on an endpoint in the last seven days.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cf-risk-missing-auth&lt;/strong&gt;: applied if the customer has configured a session ID and no successful requests to the endpoint contain the session ID.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cf-risk-mixed-auth&lt;/strong&gt;: applied if the customer has configured a session ID and some successful requests to the endpoint contain the session ID while some lack the session ID.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cf-risk-missing-schema&lt;/strong&gt;: added when a learned schema is available for an endpoint that has no active schema.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cf-risk-error-anomaly&lt;/strong&gt;: added when an endpoint experiences a recent increase in response errors over the last 24 hours.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cf-risk-latency-anomaly&lt;/strong&gt;: added when an endpoint experiences a recent increase in response latency over the last 24 hours.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cf-risk-size-anomaly&lt;/strong&gt;: added when an endpoint experiences a spike in response body size over the last 24 hours.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition, API Shield has two new &apos;beta&apos; scans for &lt;strong&gt;Broken Object Level Authorization (BOLA) attacks&lt;/strong&gt;. If you&apos;re in the beta, you will see the following two labels when API Shield suspects an endpoint is suffering from a BOLA vulnerability:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;cf-risk-bola-enumeration&lt;/strong&gt;: added when an endpoint experiences successful responses with drastic differences in the number of unique elements requested by different user sessions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cf-risk-bola-pollution&lt;/strong&gt;: added when an endpoint experiences successful responses where parameters are found in multiple places in the request.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We are currently accepting more customers into our beta. Contact your account team if you are interested in BOLA attack detection for your API.&lt;/p&gt;
&lt;p&gt;Refer to the &lt;a href=&quot;https://blog.cloudflare.com/cloudflare-security-posture-management/&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt; for more information about Cloudflare&apos;s expanded posture management capabilities.&lt;/p&gt;</description><pubDate>Tue, 18 Mar 2025 00:00:00 GMT</pubDate><product>API Shield</product><category>API Shield</category></item><item><title>Radar - Leaked Credentials Insights in Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2025-03-18-radar-leaked-credentials-insights/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-18-radar-leaked-credentials-insights/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; has expanded its security insights, providing visibility into aggregate trends in authentication requests,
including the detection of leaked credentials through &lt;a href=&quot;https://developers.cloudflare.com/waf/detections/leaked-credentials/&quot;&gt;leaked credentials detection&lt;/a&gt; scans.&lt;/p&gt;
&lt;p&gt;We have now introduced the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/leaked_credentials/subresources/summary/&quot;&gt;&lt;code&gt;/leaked_credential_checks/summary/{dimension}&lt;/code&gt;&lt;/a&gt;: Retrieves summaries of HTTP authentication requests distribution across two different dimensions.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/leaked_credentials/subresources/timeseries_groups/&quot;&gt;&lt;code&gt;/leaked_credential_checks/timeseries_groups/{dimension}&lt;/code&gt;&lt;/a&gt;: Retrieves timeseries data for HTTP authentication requests distribution across two different dimensions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The following dimensions are available, displaying the distribution of HTTP authentication requests based on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;compromised&lt;/code&gt;: Credential status (clean vs. compromised).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bot_class&lt;/code&gt;: &lt;a href=&quot;https://developers.cloudflare.com/radar/concepts/bot-classes&quot;&gt;Bot class&lt;/a&gt; (human vs. bot).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dive deeper into leaked credential detection in this &lt;a href=&quot;https://blog.cloudflare.com/password-reuse-rampant-half-user-logins-compromised/&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt; and learn more about the expanded Radar security insights in our &lt;a href=&quot;https://blog.cloudflare.com/cloudflare-radar-ddos-leaked-credentials-bots&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 18 Mar 2025 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>Cloudflare One Client - Cloudflare One Agent for Android (version 2.4)</title><link>https://developers.cloudflare.com/changelog/post/2025-03-17-warp-ga-android/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-17-warp-ga-android/</guid><description>&lt;p&gt;A new GA release for the Android Cloudflare One Agent is now available in the &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.cloudflare.cloudflareoneagent&quot; target=&quot;_blank&quot;&gt;Google Play Store&lt;/a&gt;. This release includes a new feature allowing &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/manual-deployment/#enroll-using-a-url&quot;&gt;team name insertion by URL&lt;/a&gt; during enrollment, as well as fixes and minor improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improved in-app error messages.&lt;/li&gt;
&lt;li&gt;Improved mobile client login with support for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/manual-deployment/#enroll-using-a-url&quot;&gt;team name insertion by URL&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Fixed an issue preventing admin split tunnel settings taking priority for traffic from certain applications.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 17 Mar 2025 00:00:00 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>Cloudflare One Client - Cloudflare One Agent for iOS (version 1.10)</title><link>https://developers.cloudflare.com/changelog/post/2025-03-17-warp-ga-ios/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-17-warp-ga-ios/</guid><description>&lt;p&gt;A new GA release for the iOS Cloudflare One Agent is now available in the &lt;a href=&quot;https://apps.apple.com/us/app/cloudflare-one-agent/id6443476492&quot; target=&quot;_blank&quot;&gt;iOS App Store&lt;/a&gt;. This release includes a new feature allowing &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/manual-deployment/#enroll-using-a-url&quot;&gt;team name insertion by URL&lt;/a&gt; during enrollment, as well as fixes and minor improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changes and improvements&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Improved in-app error messages.&lt;/li&gt;
&lt;li&gt;Improved mobile client login with support for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/manual-deployment/#enroll-using-a-url&quot;&gt;team name insertion by URL&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Bug fixes and performance improvements.&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 17 Mar 2025 00:00:00 GMT</pubDate><product>Cloudflare One Client</product><category>Cloudflare One Client</category></item><item><title>WAF - WAF Release - 2025-03-17</title><link>https://developers.cloudflare.com/changelog/post/2025-03-17-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-17-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;28b2a12993a04e62a98abcd9e59ec18a &lt;/td&gt;&lt;td&gt;100725&lt;/td&gt;&lt;td&gt;&lt;p&gt;Fortinet FortiManager - Remote Code Execution - CVE:CVE-2023-42791,
CVE:CVE-2024-23666&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;f253d755910e4998bd90365d1dbf58df &lt;/td&gt;&lt;td&gt;100726&lt;/td&gt;&lt;td&gt;Ivanti - Remote Code Execution - CVE:CVE-2024-8190&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;19ae0094a8d845a1bb1997af0ad61fa7 &lt;/td&gt;&lt;td&gt;100727&lt;/td&gt;&lt;td&gt;Cisco IOS XE - Remote Code Execution - CVE:CVE-2023-20198&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;Fixed action value in changelog; no rule changes.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;83a677f082264693ad64a2827ee56b66 &lt;/td&gt;&lt;td&gt;100728&lt;/td&gt;&lt;td&gt;Sitecore - Remote Code Execution - CVE:CVE-2024-46938&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;166b7ce85ce443538f021228a6752a38 &lt;/td&gt;&lt;td&gt;100729&lt;/td&gt;&lt;td&gt;Microsoft SharePoint - Remote Code Execution - CVE:CVE-2023-33160&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;35fe23e7bd324d00816c82d098d47b69 &lt;/td&gt;&lt;td&gt;100730&lt;/td&gt;&lt;td&gt;&lt;p&gt;Pentaho - Template Injection - CVE:CVE-2022-43769, CVE:CVE-2022-43939&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;2ce80fe815254f25b3c8f47569fe1e0d &lt;/td&gt;&lt;td&gt;100700&lt;/td&gt;&lt;td&gt;Apache SSRF vulnerability CVE-2021-40438&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 17 Mar 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers AI - New models in Workers AI</title><link>https://developers.cloudflare.com/changelog/post/2025-03-17-new-workers-ai-models/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-17-new-workers-ai-models/</guid><description>&lt;p&gt;Workers AI is excited to add 4 new models to the catalog, including 2 brand new classes of models with a text-to-speech and reranker model. Introducing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/bge-m3/&quot;&gt;@cf/baai/bge-m3&lt;/a&gt; - a multi-lingual embeddings model that supports over 100 languages. It can also simultaneously perform dense retrieval, multi-vector retrieval, and sparse retrieval, with the ability to process inputs of different granularities.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/bge-reranker-base/&quot;&gt;@cf/baai/bge-reranker-base&lt;/a&gt; - our first reranker model! Rerankers are a type of text classification model that takes a query and context, and outputs a similarity score between the two. When used in RAG systems, you can use a reranker after the initial vector search to find the most relevant documents to return to a user by reranking the outputs.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/whisper-large-v3-turbo/&quot;&gt;@cf/openai/whisper-large-v3-turbo&lt;/a&gt; - a faster, more accurate speech-to-text model. This model was added earlier but is graduating out of beta with pricing included today.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/melotts/&quot;&gt;@cf/myshell-ai/melotts&lt;/a&gt; - our first text-to-speech model that allows users to generate an MP3 with voice audio from inputted text.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pricing is available for each of these models on the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/platform/pricing/&quot;&gt;Workers AI pricing page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This docs update includes a few minor bug fixes to the model schema for llama-guard, llama-3.2-1b, which you can review on the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/changelog/&quot;&gt;product changelog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Try it out and let us know what you think! Stay tuned for more models in the coming days.&lt;/p&gt;</description><pubDate>Mon, 17 Mar 2025 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>Workers - Import `env` to access bindings in your Worker&apos;s global scope</title><link>https://developers.cloudflare.com/changelog/post/2025-03-17-importable-env/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-17-importable-env/</guid><description>&lt;p&gt;You can now access &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/&quot;&gt;bindings&lt;/a&gt;
from anywhere in your Worker by importing the &lt;code&gt;env&lt;/code&gt; object from &lt;code&gt;cloudflare:workers&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Previously, &lt;code&gt;env&lt;/code&gt; could only be accessed during a request. This meant that
bindings could not be used in the top-level context of a Worker.&lt;/p&gt;
&lt;p&gt;Now, you can import &lt;code&gt;env&lt;/code&gt; and access bindings such as &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/secrets/&quot;&gt;secrets&lt;/a&gt;
or &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/environment-variables/&quot;&gt;environment variables&lt;/a&gt; in the
initial setup for your Worker:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&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;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;cloudflare:workers&quot;&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;import &lt;/span&gt;&lt;span&gt;ApiClient&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;example-api-client&quot;&lt;/span&gt;&lt;span&gt;;&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;// API_KEY and LOG_LEVEL now usable in top-level scope&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiClient&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ApiClient&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; apiKey&lt;/span&gt;&lt;span&gt;:&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;API_KEY&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;LOG_LEVEL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;LOG_LEVEL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;||&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;info&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&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;// you can use apiClient or LOG_LEVEL, configured before any request is handled&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;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;Workers do not allow I/O from outside a request context. This means that even
though &lt;code&gt;env&lt;/code&gt; is accessible from the top-level scope, you will not be able to access
every binding&apos;s methods.&lt;/p&gt;&lt;p&gt;For instance, environment variables and secrets are accessible, and you are able to
call &lt;code&gt;env.NAMESPACE.get&lt;/code&gt; to get a &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/api/stub/&quot;&gt;Durable Object stub&lt;/a&gt; in the
top-level context. However, calling methods on the Durable Object stub, making &lt;a href=&quot;https://developers.cloudflare.com/kv/api/&quot;&gt;calls to a KV store&lt;/a&gt;,
and &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings&quot;&gt;calling to other Workers&lt;/a&gt; will not work.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;Additionally, &lt;code&gt;env&lt;/code&gt; was normally accessed as a argument to a Worker&apos;s entrypoint handler,
such as &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/fetch/&quot;&gt;&lt;code&gt;fetch&lt;/code&gt;&lt;/a&gt;.
This meant that if you needed to access a binding from a deeply nested function,
you had to pass &lt;code&gt;env&lt;/code&gt; as an argument through many functions to get it to the
right spot. This could be cumbersome in complex codebases.&lt;/p&gt;
&lt;p&gt;Now, you can access the bindings from anywhere in your codebase
without passing &lt;code&gt;env&lt;/code&gt; as an argument:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// helpers.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&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;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;cloudflare:workers&quot;&lt;/span&gt;&lt;span&gt;;&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;// env is *not* an argument to this function&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getValue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;key&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;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prefix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;KV_PREFIX&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;KV&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;prefix&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;key&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;/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, see &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings#how-to-access-env&quot;&gt;documentation on accessing &lt;code&gt;env&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 17 Mar 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers, Pages - Retry Pages &amp; Workers Builds Directly from GitHub</title><link>https://developers.cloudflare.com/changelog/post/2025-03-17-rerun-build/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-17-rerun-build/</guid><description>&lt;p&gt;You can now retry your Cloudflare Pages and Workers builds directly from GitHub. No need to switch to the Cloudflare Dashboard for a simple retry!&lt;/p&gt;
&lt;p&gt;Let\u2019s say you push a commit, but your build fails due to a spurious error like a network timeout. Instead of going to the Cloudflare Dashboard to manually retry, you can now rerun the build with just a few clicks inside GitHub, keeping you inside your workflow.&lt;/p&gt;
&lt;p&gt;For Pages and Workers projects connected to a GitHub repository:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;When a build fails, go to your GitHub repository or pull request&lt;/li&gt;
&lt;li&gt;Select the failed Check Run for the build&lt;/li&gt;
&lt;li&gt;Select &quot;Details&quot; on the Check Run&lt;/li&gt;
&lt;li&gt;Select &quot;Rerun&quot; to trigger a retry build for that commit&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Learn more about &lt;a href=&quot;https://developers.cloudflare.com/pages/configuration/git-integration/github-integration/&quot;&gt;Pages Builds&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/git-integration/github-integration/&quot;&gt;Workers Builds&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 17 Mar 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category><category>Pages</category></item><item><title>Cloudflare Network Firewall - Cloudflare IP Ranges List</title><link>https://developers.cloudflare.com/changelog/post/2025-03-13-new-managed-iplist/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-13-new-managed-iplist/</guid><description>&lt;p&gt;Magic Firewall now supports a new managed list of Cloudflare IP ranges. This list is available as an option when creating a Magic Firewall policy based on IP source/destination addresses. When selecting &quot;is in list&quot; or &quot;is not in list&quot;, the option &quot;&lt;strong&gt;Cloudflare IP Ranges&lt;/strong&gt;&quot; will appear in the dropdown menu.&lt;/p&gt;
&lt;p&gt;This list is based on the IPs listed in the Cloudflare &lt;a href=&quot;https://www.cloudflare.com/en-gb/ips/&quot; target=&quot;_blank&quot;&gt;IP ranges&lt;/a&gt;.
Updates to this managed list are applied automatically.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/cloudflare-ips.DetyOndL_10JG5B.webp&quot; alt=&quot;Cloudflare IPs Managed List&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Note: IP Lists require a Cloudflare Advanced Network Firewall subscription. For more details about Cloudflare Network Firewall plans, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-network-firewall/plans&quot;&gt;Plans&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 13 Mar 2025 00:00:00 GMT</pubDate><product>Cloudflare Network Firewall</product><category>Cloudflare Network Firewall</category></item><item><title>Workers - Use the latest JavaScript features with Wrangler CLI v4</title><link>https://developers.cloudflare.com/changelog/post/2025-03-13-wrangler-v4/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-13-wrangler-v4/</guid><description>&lt;p&gt;We&apos;ve released the next major version of &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt;, the CLI for Cloudflare Workers — &lt;code&gt;wrangler@4.0.0&lt;/code&gt;. Wrangler v4 is a major release focused on updates to underlying systems and dependencies, along with improvements to keep Wrangler commands consistent and clear.&lt;/p&gt;
&lt;p&gt;You can run the following command to install it in your projects:&lt;/p&gt;
 &lt;div&gt; &lt;div&gt;  &lt;/div&gt; &lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; i wrangler@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;&lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; add wrangler@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;&lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; add wrangler@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;&lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;bun&lt;/span&gt;&lt;span&gt; add wrangler@latest&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt;  
&lt;p&gt;Unlike previous major versions of Wrangler, which were &lt;a href=&quot;https://blog.cloudflare.com/wrangler-v2-beta/&quot; target=&quot;_blank&quot;&gt;foundational rewrites&lt;/a&gt; and &lt;a href=&quot;https://blog.cloudflare.com/wrangler3/&quot; target=&quot;_blank&quot;&gt;rearchitectures&lt;/a&gt; — Version 4 of Wrangler includes a much smaller set of changes. If you use Wrangler today, your workflow is very unlikely to change.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/migration/update-v3-to-v4&quot;&gt;detailed migration guide&lt;/a&gt; is available and if you find a bug or hit a roadblock when upgrading to Wrangler v4, &lt;a href=&quot;https://github.com/cloudflare/workers-sdk/issues/new?template=bug-template.yaml&quot; target=&quot;_blank&quot;&gt;open an issue on the &lt;code&gt;cloudflare/workers-sdk&lt;/code&gt; repository on GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Going forward, we&apos;ll continue supporting Wrangler v3 with bug fixes and security updates until Q1 2026, and with critical security updates until Q1 2027, at which point it will be out of support.&lt;/p&gt;</description><pubDate>Thu, 13 Mar 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Workers - Set breakpoints and debug your Workers tests with @cloudflare/vitest-pool-workers</title><link>https://developers.cloudflare.com/changelog/post/2025-03-14-breakpoint-debugging-with-vitest/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-14-breakpoint-debugging-with-vitest/</guid><description>&lt;p&gt;You can now debug your Workers tests with our &lt;a href=&quot;https://developers.cloudflare.com/workers/testing/vitest-integration/&quot;&gt;Vitest integration&lt;/a&gt; by running the following command:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;vitest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--inspect&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--no-file-parallelism&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;Attach a debugger to the port 9229 and you can start stepping through your Workers tests. This is available with &lt;code&gt;@cloudflare/vitest-pool-workers&lt;/code&gt; v0.7.5 or later.&lt;/p&gt;
&lt;p&gt;Learn more in our &lt;a href=&quot;https://developers.cloudflare.com/workers/testing/vitest-integration/debugging/&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 13 Mar 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Email Routing - Threaded replies now possible in Email Workers</title><link>https://developers.cloudflare.com/changelog/post/2025-03-12-reply-limits/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-12-reply-limits/</guid><description>&lt;p&gt;We’re removing some of the restrictions in Email Routing so that AI Agents and task automation can better handle email workflows, including how Workers can &lt;a href=&quot;https://developers.cloudflare.com/email-routing/email-workers/reply-email-workers/&quot;&gt;reply&lt;/a&gt; to incoming emails.&lt;/p&gt;
&lt;p&gt;It&apos;s now possible to keep a threaded email conversation with an &lt;a href=&quot;https://developers.cloudflare.com/email-routing/email-workers/&quot;&gt;Email Worker&lt;/a&gt; script as long as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The incoming email has to have valid &lt;a href=&quot;https://www.cloudflare.com/learning/dns/dns-records/dns-dmarc-record/&quot; target=&quot;_blank&quot;&gt;DMARC&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The email can only be replied to once in the same &lt;code&gt;EmailMessage&lt;/code&gt; event.&lt;/li&gt;
&lt;li&gt;The recipient in the reply must match the incoming sender.&lt;/li&gt;
&lt;li&gt;The outgoing sender domain must match the same domain that received the email.&lt;/li&gt;
&lt;li&gt;Every time an email passes through Email Routing or another MTA, an entry is added to the &lt;code&gt;References&lt;/code&gt; list. We stop accepting replies to emails with more than 100 &lt;code&gt;References&lt;/code&gt; entries to prevent abuse or accidental loops.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here&apos;s an example of a Worker responding to Emails using a Workers AI model:&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;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;PostalMime&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;postal-mime&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createMimeMessage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;mimetext&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;EmailMessage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;cloudflare:email&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;email&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;email&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PostalMime&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parse&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;raw&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;AI&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;@cf/meta/llama-2-7b-chat-fp16&quot;&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;messages&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;/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;role&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&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;content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;email&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;??&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&quot;&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;]&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// message-id is generated by mimetext&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;createMimeMessage&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;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setHeader&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;In-Reply-To&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;headers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Message-ID&quot;&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;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setSender&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;agent@example.com&quot;&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;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setRecipient&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;from&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;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setSubject&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Llama response&quot;&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;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;addMessage&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;contentType&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;text/plain&quot;&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;data&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;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;instanceof&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReadableStream&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;text&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;res&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;response&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;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;replyMessage&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;EmailMessage&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;&quot;&amp;#x3C;email&gt;&quot;&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;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;from&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;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;asRaw&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;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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;reply&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;replyMessage&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;/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;satisfies&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ExportedHandler&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Env&lt;/span&gt;&lt;span&gt;&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;See &lt;a href=&quot;https://developers.cloudflare.com/email-routing/email-workers/reply-email-workers/&quot;&gt;Reply to emails from Workers&lt;/a&gt; for more information.&lt;/p&gt;</description><pubDate>Wed, 12 Mar 2025 00:00:00 GMT</pubDate><product>Email Routing</product><category>Email Routing</category></item><item><title>WAF - WAF Release - 2025-03-11 - Emergency</title><link>https://developers.cloudflare.com/changelog/post/2025-03-11-emergency-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-11-emergency-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;0823d16dd8b94cc6b27a9ab173febb31 &lt;/td&gt;&lt;td&gt;100731&lt;/td&gt;&lt;td&gt;Apache Camel - Code Injection - CVE:CVE-2025-27636&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Tue, 11 Mar 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers - Access your Worker&apos;s environment variables from process.env</title><link>https://developers.cloudflare.com/changelog/post/2025-03-11-process-env-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-11-process-env-support/</guid><description>&lt;p&gt;You can now access &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/environment-variables/&quot;&gt;environment variables&lt;/a&gt; and
&lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/secrets/&quot;&gt;secrets&lt;/a&gt; on &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/nodejs/process/#processenv&quot;&gt;&lt;code&gt;process.env&lt;/code&gt;&lt;/a&gt;
when using the &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/compatibility-flags/#nodejs-compatibility-flag&quot;&gt;&lt;code&gt;nodejs_compat&lt;/code&gt; compatibility flag&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apiClient&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ApiClient&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; apiKey&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;process&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;API_KEY&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;LOG_LEVEL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;process&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;LOG_LEVEL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;||&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;info&quot;&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;In Node.js, environment variables are exposed via the global &lt;code&gt;process.env&lt;/code&gt; object. Some libraries
assume that this object will be populated, and many developers may be used to accessing variables
in this way.&lt;/p&gt;
&lt;p&gt;Previously, the &lt;code&gt;process.env&lt;/code&gt; object was always empty unless written to in Worker code. This could
cause unexpected errors or friction when developing Workers using code previously written for Node.js.&lt;/p&gt;
&lt;p&gt;Now, &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/environment-variables/&quot;&gt;environment variables&lt;/a&gt;,
&lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/secrets/&quot;&gt;secrets&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/version-metadata/&quot;&gt;version metadata&lt;/a&gt;
can all be accessed on &lt;code&gt;process.env&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To opt-in to the new &lt;code&gt;process.env&lt;/code&gt; behaviour now, add the &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/compatibility-flags/#enable-auto-populating-processenv&quot;&gt;&lt;code&gt;nodejs_compat_populate_process_env&lt;/code&gt;&lt;/a&gt; compatibility flag to your
&lt;code&gt;wrangler.json&lt;/code&gt; configuration:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;// Rest of your configuration&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Add &quot;nodejs_compat_populate_process_env&quot; to your compatibility_flags array&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;compatibility_flags&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;nodejs_compat&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;nodejs_compat_populate_process_env&quot;&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;// Rest of your configuration&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;compatibility_flags&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;span&gt; &lt;/span&gt;&lt;span&gt;&quot;nodejs_compat&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;nodejs_compat_populate_process_env&quot;&lt;/span&gt;&lt;span&gt; &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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;After April 1, 2025, populating &lt;code&gt;process.env&lt;/code&gt; will become the default behavior when both &lt;code&gt;nodejs_compat&lt;/code&gt; is enabled and
your Worker&apos;s &lt;code&gt;compatibility_date&lt;/code&gt; is after &quot;2025-04-01&quot;.&lt;/p&gt;</description><pubDate>Tue, 11 Mar 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>WAF - WAF Release - 2025-03-10</title><link>https://developers.cloudflare.com/changelog/post/2025-03-10-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-10-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;d4f68c1c65c448e58fe4830eb2a51e3d &lt;/td&gt;&lt;td&gt;100722&lt;/td&gt;&lt;td&gt;Ivanti - Information Disclosure - CVE:CVE-2025-0282&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;fda130e396224ffc9f0a9e72259073d5 &lt;/td&gt;&lt;td&gt;100723&lt;/td&gt;&lt;td&gt;Cisco IOS XE - Information Disclosure - CVE:CVE-2023-20198&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 10 Mar 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Digital Experience Monitoring - Cloudflare One Agent now supports Endpoint Monitoring</title><link>https://developers.cloudflare.com/changelog/post/2025-03-07-cloudflare-one-device-health-monitoring/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-07-cloudflare-one-device-health-monitoring/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/dex/&quot;&gt;Digital Experience Monitoring (DEX)&lt;/a&gt; provides visibility into device, network, and application performance across your Cloudflare SASE deployment. The latest release of the Cloudflare One agent (v2025.1.861) now includes device endpoint monitoring capabilities
to provide deeper visibility into end-user device performance which can be analyzed directly from the dashboard.&lt;/p&gt;
&lt;p&gt;Device health metrics are now automatically collected, allowing administrators to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;View the last network a user was connected to&lt;/li&gt;
&lt;li&gt;Monitor CPU and RAM utilization on devices&lt;/li&gt;
&lt;li&gt;Identify resource-intensive processes running on endpoints&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/cloudflare-one-agent-health-monitoring.XXtiRuOp_Z25TN9Q.webp&quot; alt=&quot;Device endpoint monitoring dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;This feature complements existing DEX features like &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/dex/tests/&quot;&gt;synthetic application monitoring&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/dex/tests/traceroute/&quot;&gt;network path visualization&lt;/a&gt;, creating a comprehensive troubleshooting workflow that connects application performance with device state.&lt;/p&gt;
&lt;p&gt;For more details refer to our &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/dex/&quot;&gt;DEX&lt;/a&gt; documentation.&lt;/p&gt;</description><pubDate>Fri, 07 Mar 2025 00:00:00 GMT</pubDate><product>Digital Experience Monitoring</product><category>Digital Experience Monitoring</category></item><item><title>Hyperdrive - Hyperdrive reduces query latency by up to 90% and now supports IP access control lists</title><link>https://developers.cloudflare.com/changelog/post/2025-03-04-hyperdrive-pooling-near-database-and-ip-range-egress/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-04-hyperdrive-pooling-near-database-and-ip-range-egress/</guid><description>&lt;p&gt;Hyperdrive now pools database connections in one or more regions close to your database. This means that your uncached queries and new database connections have up to 90% less latency as measured from connection pools.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/hyperdrive-regional-pooling-query-latency-improvement.Bzz_xvHZ_rlYbl.webp&quot; alt=&quot;Hyperdrive query latency decreases by 90% during Hyperdrive&amp;#x27;s gradual rollout of regional pooling.&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;By improving placement of Hyperdrive database connection pools, Workers&apos; Smart Placement is now more effective when used with Hyperdrive, ensuring that your Worker can be placed as close to your database as possible.&lt;/p&gt;
&lt;p&gt;With this update, Hyperdrive also uses &lt;a href=&quot;https://www.cloudflare.com/ips/&quot; target=&quot;_blank&quot;&gt;Cloudflare&apos;s standard IP address ranges&lt;/a&gt; to connect to your database. This enables you to configure the firewall policies (IP access control lists) of your database to only allow access from Cloudflare and Hyperdrive.&lt;/p&gt;
&lt;p&gt;Refer to &lt;a href=&quot;https://developers.cloudflare.com/hyperdrive/concepts/how-hyperdrive-works/&quot;&gt;documentation on how Hyperdrive makes connecting to regional databases from Cloudflare Workers fast&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This improvement is enabled on all Hyperdrive configurations.&lt;/p&gt;</description><pubDate>Fri, 07 Mar 2025 00:00:00 GMT</pubDate><product>Hyperdrive</product><category>Hyperdrive</category></item><item><title>WAF - Updated leaked credentials database</title><link>https://developers.cloudflare.com/changelog/post/2025-03-07-updated-leaked-credentials-database/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-07-updated-leaked-credentials-database/</guid><description>&lt;p&gt;Added new records to the leaked credentials database. The record sources are: Have I Been Pwned (HIBP) database, RockYou 2024 dataset, and another third-party database.&lt;/p&gt;</description><pubDate>Fri, 07 Mar 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Logs - One-click Logpush Setup with R2 Object Storage</title><link>https://developers.cloudflare.com/changelog/post/2025-03-06-oneclick-logpush/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-06-oneclick-logpush/</guid><description>&lt;p&gt;We’ve streamlined the &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/&quot;&gt;Logpush&lt;/a&gt; setup process by integrating R2 bucket creation directly into the Logpush workflow!&lt;/p&gt;
&lt;p&gt;Now, you no longer need to navigate multiple pages to manually create an R2 bucket or copy credentials. With this update, you can seamlessly &lt;strong&gt;configure a Logpush job to R2 in just one click&lt;/strong&gt;, reducing friction and making setup faster and easier.&lt;/p&gt;
&lt;p&gt;This enhancement makes it easier for customers to adopt Logpush and R2.&lt;/p&gt;
&lt;p&gt;For more details refer to our &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/enable-destinations/r2/&quot;&gt;Logs&lt;/a&gt; documentation.&lt;/p&gt;</description><pubDate>Thu, 06 Mar 2025 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>R2 - Set retention polices for your R2 bucket with bucket locks</title><link>https://developers.cloudflare.com/changelog/post/2025-03-06-r2-bucket-locks/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-06-r2-bucket-locks/</guid><description>&lt;p&gt;You can now use &lt;a href=&quot;https://developers.cloudflare.com/r2/buckets/bucket-locks/&quot;&gt;bucket locks&lt;/a&gt; to set retention policies on your &lt;a href=&quot;https://developers.cloudflare.com/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.cloudflare.com/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.cloudflare.com/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt;:&lt;/p&gt;
&lt;h4&gt;Ensure all objects in a bucket are retained for at least 180 days&lt;/h4&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&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;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;lock&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;bucket&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;180-days-all&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--retention-days&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;180&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;h4&gt;Prevent deletion or overwriting of all logs indefinitely (via prefix)&lt;/h4&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&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;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;lock&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#x3C;bucket&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;indefinite-logs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--prefix&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;logs/&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--retention-indefinite&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 on bucket locks and how to set retention policies for objects in your R2 buckets, refer to our &lt;a href=&quot;https://developers.cloudflare.com/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>Stream - Introducing Media Transformations from Cloudflare Stream</title><link>https://developers.cloudflare.com/changelog/post/2025-03-06-media-transformations/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-06-media-transformations/</guid><description>&lt;p&gt;Today, we are thrilled to announce Media Transformations, a new service that
brings the magic of &lt;a href=&quot;https://developers.cloudflare.com/images/transform-images/&quot;&gt;Image Transformations&lt;/a&gt; to
&lt;em&gt;short-form video files,&lt;/em&gt; wherever they are stored!&lt;/p&gt;
&lt;p&gt;For customers with a huge volume of short video — generative AI output,
e-commerce product videos, social media clips, or short marketing content —
uploading those assets to Stream is not always practical. Sometimes, the
greatest friction to getting started was the thought of all that migrating.
Customers want a simpler solution that retains their current storage strategy to
deliver small, optimized MP4 files. Now you can do that with Media
Transformations.&lt;/p&gt;
&lt;p&gt;To transform a video or image,
&lt;a href=&quot;https://developers.cloudflare.com/stream/transform-videos/#getting-started&quot;&gt;enable transformations&lt;/a&gt; for your
zone, then make a simple request with a specially formatted URL. The result is
an MP4 that can be used in an HTML video element without a player library.
If your zone already has Image Transformations enabled, then it is ready to
optimize videos with Media Transformations, too.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;https://example.com/cdn-cgi/media/&amp;#x3C;OPTIONS&gt;/&amp;#x3C;SOURCE-VIDEO&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 example, we have a short video of the mobile in Austin&apos;s office. The
original is nearly 30 megabytes and wider than necessary for this layout.
Consider a simple width adjustment:&lt;/p&gt;

&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;text&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;https://example.com/cdn-cgi/media/width=640/&amp;#x3C;SOURCE-VIDEO&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;https://developers.cloudflare.com/cdn-cgi/media/width=640/https://pub-d9fcbc1abcd244c1821f38b99017347f.r2.dev/aus-mobile.mp4&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;The result is less than 3 megabytes, properly sized, and delivered dynamically
so that customers do not have to manage the creation and storage of these
transformed assets.&lt;/p&gt;
&lt;p&gt;For more information, learn about &lt;a href=&quot;https://developers.cloudflare.com/stream/transform-videos/&quot;&gt;Transforming Videos&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 06 Mar 2025 00:00:00 GMT</pubDate><product>Stream</product><category>Stream</category></item><item><title>Browser Isolation - Gain visibility into user actions in Zero Trust Browser Isolation sessions</title><link>https://developers.cloudflare.com/changelog/post/2025-03-03-user-action-logging/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-03-user-action-logging/</guid><description>&lt;p&gt;We&apos;re excited to announce that new logging capabilities for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/remote-browser-isolation/&quot;&gt;Remote Browser Isolation (RBI)&lt;/a&gt; through &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/datasets/account/&quot;&gt;Logpush&lt;/a&gt; are available in Beta starting today!&lt;/p&gt;
&lt;p&gt;With these enhanced logs, administrators can gain visibility into end user behavior in the remote browser and track blocked data extraction attempts, along with the websites that triggered them, in an isolated session.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;AccountID&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;$ACCOUNT_ID&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;Decision&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;block&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;DomainName&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;www.example.com&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;Timestamp&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2025-02-27T23:15:06Z&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;Type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;copy&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;UserID&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;$USER_ID&quot;&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;User Actions available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Copy &amp;#x26; Paste&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Downloads &amp;#x26; Uploads&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Printing&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learn more about how to get started with Logpush in our &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 04 Mar 2025 00:00:00 GMT</pubDate><product>Browser Isolation</product><category>Browser Isolation</category></item><item><title>Access - New SAML and OIDC Fields and SAML transforms for Access for SaaS</title><link>https://developers.cloudflare.com/changelog/post/2025-03-03-saml-oidc-fields-saml-transformations/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-03-saml-oidc-fields-saml-transformations/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/applications/http-apps/saas-apps/&quot;&gt;Access for SaaS applications&lt;/a&gt; now include more configuration options to support a wider array of SaaS applications.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SAML and OIDC Field Additions&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;OIDC apps now include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Group Filtering via RegEx&lt;/li&gt;
&lt;li&gt;OIDC Claim mapping from an IdP&lt;/li&gt;
&lt;li&gt;OIDC token lifetime control&lt;/li&gt;
&lt;li&gt;Advanced OIDC auth flows including hybrid and implicit flows&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/oidc-claims.2di8l9Lv_ZrD1mx.webp&quot; alt=&quot;OIDC field additions&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;SAML apps now include improved SAML attribute mapping from an IdP.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/saml-attribute-statements.CW45j5Qi_1ydeSQ.webp&quot; alt=&quot;SAML field additions&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;strong&gt;SAML transformations&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;SAML identities sent to Access applications can be fully customized using JSONata expressions. This allows admins to configure the precise identity SAML statement sent to a SaaS application.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/transformation-box.DyKn-DdN_2rtirg.webp&quot; alt=&quot;Configured SAML statement sent to application&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Mon, 03 Mar 2025 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>WAF - WAF Release - 2025-03-03</title><link>https://developers.cloudflare.com/changelog/post/2025-03-03-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-03-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;90356ececae3444b9accb3d393e63099 &lt;/td&gt;&lt;td&gt;100721&lt;/td&gt;&lt;td&gt;&lt;p&gt;Ivanti - Remote Code Execution - CVE:CVE-2024-13159, CVE:CVE-2024-13160,
CVE:CVE-2024-13161&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;6cf09ce2fa73482abb7f677ecac42ce2 &lt;/td&gt;&lt;td&gt;100596&lt;/td&gt;&lt;td&gt;&lt;p&gt;Citrix Content Collaboration ShareFile - Remote Code Execution -
CVE:CVE-2023-24489&lt;/p&gt;&lt;/td&gt;&lt;td&gt;N/A&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 03 Mar 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Email security - Use Logpush for Email security detections</title><link>https://developers.cloudflare.com/changelog/post/2025-03-01-logpush-detections/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-03-01-logpush-detections/</guid><description>&lt;p&gt;You can now send detection logs to an endpoint of your choice with Cloudflare Logpush.&lt;/p&gt;
&lt;p&gt;Filter logs matching specific criteria you have set and select from over 25 fields you want to send. When creating a new Logpush job, remember to select &lt;strong&gt;Email security alerts&lt;/strong&gt; as the dataset.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/Logpush-Detections.Dc5tHta3_1PsIMk.webp&quot; alt=&quot;logpush-detections&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/logs/logpush/email-security-logs/#enable-detection-logs&quot;&gt;Enable detection logs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This feature is available across these Email security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Sat, 01 Mar 2025 23:22:49 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>Workers - Use the latest JavaScript features with Wrangler CLI v4.0.0-rc.0</title><link>https://developers.cloudflare.com/changelog/post/2025-02-28-wrangler-v4-rc/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-28-wrangler-v4-rc/</guid><description>&lt;p&gt;We&apos;ve released a release candidate of the next major version of &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/&quot;&gt;Wrangler&lt;/a&gt;, the CLI for Cloudflare Workers — &lt;code&gt;wrangler@4.0.0-rc.0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can run the following command to install it and be one of the first to try it out:&lt;/p&gt;
 &lt;div&gt; &lt;div&gt;  &lt;/div&gt; &lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; i wrangler@v4-rc&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;&lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;yarn&lt;/span&gt;&lt;span&gt; add wrangler@v4-rc&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;&lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; add wrangler@v4-rc&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;&lt;div&gt; &lt;div&gt;  &lt;pre&gt;&lt;code class=&quot;astro-qph66ij4&quot;&gt;&lt;span&gt;bun&lt;/span&gt;&lt;span&gt; add wrangler@v4-rc&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;  &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt;  
&lt;p&gt;Unlike previous major versions of Wrangler, which were &lt;a href=&quot;https://blog.cloudflare.com/wrangler-v2-beta/&quot; target=&quot;_blank&quot;&gt;foundational rewrites&lt;/a&gt; and &lt;a href=&quot;https://blog.cloudflare.com/wrangler3/&quot; target=&quot;_blank&quot;&gt;rearchitectures&lt;/a&gt; — Version 4 of Wrangler includes a much smaller set of changes. If you use Wrangler today, your workflow is very unlikely to change. Before we release Wrangler v4 and advance past the release candidate stage, we&apos;ll share a detailed migration guide in the Workers developer docs. But for the vast majority of cases, you won&apos;t need to do anything to migrate — things will just work as they do today. We are sharing this release candidate in advance of the official release of v4, so that you can try it out early and share feedback.&lt;/p&gt;
&lt;h4&gt;New JavaScript language features that you can now use with Wrangler v4&lt;/h4&gt;
&lt;p&gt;Version 4 of Wrangler updates the version of &lt;a href=&quot;https://esbuild.github.io/&quot; target=&quot;_blank&quot;&gt;esbuild&lt;/a&gt; that Wrangler uses internally, allowing you to use modern JavaScript language features, including:&lt;/p&gt;
&lt;h5&gt;The &lt;code&gt;using&lt;/code&gt; keyword from Explicit Resource Management&lt;/h5&gt;
&lt;p&gt;The &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/rpc/lifecycle/#explicit-resource-management&quot;&gt;&lt;code&gt;using&lt;/code&gt; keyword from the Explicit Resource Management standard&lt;/a&gt; makes it easier to work with the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/rpc/&quot;&gt;JavaScript-native RPC system built into Workers&lt;/a&gt;. This means that when you obtain a stub, you can ensure that it is automatically disposed when you exit scope it was created in:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;function&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sendEmail&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&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;using&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;USER_SERVICE&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;findUser&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;id&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sendEmail&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// user[Symbol.dispose]() is implicitly called at the end of the scope.&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;h5&gt;Import attributes&lt;/h5&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import/with&quot; target=&quot;_blank&quot;&gt;Import attributes&lt;/a&gt; allow you to denote the type or other attributes of the module that your code imports. For example, you can import a JSON module, using the following syntax:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;./data.json&quot;&lt;/span&gt;&lt;span&gt; with &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;json&quot;&lt;/span&gt;&lt;span&gt; &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;h4&gt;Other changes&lt;/h4&gt;
&lt;h5&gt;&lt;code&gt;--local&lt;/code&gt; is now the default for all CLI commands&lt;/h5&gt;
&lt;p&gt;All commands that access resources (for example, &lt;code&gt;wrangler kv&lt;/code&gt;, &lt;code&gt;wrangler r2&lt;/code&gt;, &lt;code&gt;wrangler d1&lt;/code&gt;) now access local datastores by default, ensuring consistent behavior.&lt;/p&gt;
&lt;h5&gt;Clearer policy for the minimum required version of Node.js required to run Wrangler&lt;/h5&gt;
&lt;p&gt;Moving forward, the &lt;a href=&quot;https://nodejs.org/en/about/previous-releases&quot; target=&quot;_blank&quot;&gt;active, maintenance, and current versions of Node.js&lt;/a&gt; will be officially supported by Wrangler. This means the minimum officially supported version of Node.js you must have installed for Wrangler v4 will be Node.js v18 or later. This policy mirrors how many other packages and CLIs support older versions of Node.js, and ensures that as long as you are using a version of Node.js that the Node.js project itself supports, this will be supported by Wrangler as well.&lt;/p&gt;
&lt;h5&gt;Features previously deprecated in Wrangler v3 are now removed in Wrangler v4&lt;/h5&gt;
&lt;p&gt;All previously deprecated features in &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/deprecations/#wrangler-v2&quot; target=&quot;_blank&quot;&gt;Wrangler v2&lt;/a&gt; and in &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/deprecations/#wrangler-v3&quot; target=&quot;_blank&quot;&gt;Wrangler v3&lt;/a&gt; have now been removed. Additionally, the following features that were deprecated during the Wrangler v3 release have been removed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Legacy Assets (using &lt;code&gt;wrangler dev/deploy --legacy-assets&lt;/code&gt; or the &lt;code&gt;legacy_assets&lt;/code&gt; config file property). Instead, we recommend you &lt;a href=&quot;https://developers.cloudflare.com/workers/static-assets/&quot; target=&quot;_blank&quot;&gt;migrate to Workers assets&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Legacy Node.js compatibility (using &lt;code&gt;wrangler dev/deploy --node-compat&lt;/code&gt; or the &lt;code&gt;node_compat&lt;/code&gt; config file property). Instead, use the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/nodejs&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;nodejs_compat&lt;/code&gt; compatibility flag&lt;/a&gt;. This includes the functionality from legacy &lt;code&gt;node_compat&lt;/code&gt; polyfills and natively implemented Node.js APIs.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;wrangler version&lt;/code&gt;. Instead, use &lt;code&gt;wrangler --version&lt;/code&gt; to check the current version of Wrangler.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;getBindingsProxy()&lt;/code&gt; (via &lt;code&gt;import { getBindingsProxy } from &quot;wrangler&quot;&lt;/code&gt;). Instead, use the &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/api/#getplatformproxy&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;getPlatformProxy()&lt;/code&gt; API&lt;/a&gt;, which takes exactly the same arguments.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;usage_model&lt;/code&gt;. This no longer has any effect, after the &lt;a href=&quot;https://blog.cloudflare.com/workers-pricing-scale-to-zero/&quot; target=&quot;_blank&quot;&gt;rollout of Workers Standard Pricing&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&apos;d love your feedback! If you find a bug or hit a roadblock when upgrading to Wrangler v4, &lt;a href=&quot;https://github.com/cloudflare/workers-sdk/issues/new?template=bug-template.yaml&quot; target=&quot;_blank&quot;&gt;open an issue on the &lt;code&gt;cloudflare/workers-sdk&lt;/code&gt; repository on GitHub&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 28 Feb 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Email security - Check status of Email security or Area 1</title><link>https://developers.cloudflare.com/changelog/post/2025-02-07-check-status/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-07-check-status/</guid><description>&lt;p&gt;Concerns about performance for Email security or Area 1? You can now check the operational status of both on the &lt;a href=&quot;https://www.cloudflarestatus.com/&quot; target=&quot;_blank&quot;&gt;Cloudflare Status page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For Email security, look under &lt;strong&gt;Cloudflare Sites and Services&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dashboard&lt;/strong&gt; is the dashboard for Cloudflare, including Email security&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email security (Zero Trust)&lt;/strong&gt; is the processing of email&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;API&lt;/strong&gt; are the Cloudflare endpoints, including the ones for Email security&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For Area 1, under &lt;strong&gt;Cloudflare Sites and Services&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Area 1 - Dash&lt;/strong&gt; is the dashboard for Cloudflare, including Email security&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email security (Area1)&lt;/strong&gt; is the processing of email&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Area 1 - API&lt;/strong&gt; are the Area 1 endpoints&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/Status-Page.DcFJ1286_2qTtkN.webp&quot; alt=&quot;Status-page&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;This feature is available across these Email security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Advantage&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 27 Feb 2025 23:22:49 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>Browser Rendering - New REST API is in open beta!</title><link>https://developers.cloudflare.com/changelog/post/2025-02-27-br-rest-api-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-27-br-rest-api-beta/</guid><description>&lt;p&gt;We&apos;ve released a new REST API for &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/&quot;&gt;Browser Rendering&lt;/a&gt; in open beta, making interacting with browsers easier than ever. This new API provides endpoints for common browser actions, with more to be added in the future.&lt;/p&gt;
&lt;p&gt;With the &lt;strong&gt;REST API&lt;/strong&gt; you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Capture screenshots&lt;/strong&gt; – Use &lt;code&gt;/screenshot&lt;/code&gt; to take a screenshot of a webpage from provided URL or HTML.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generate PDFs&lt;/strong&gt; – Use &lt;code&gt;/pdf&lt;/code&gt; to convert web pages into PDFs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extract HTML content&lt;/strong&gt; – Use &lt;code&gt;/content&lt;/code&gt; to retrieve the full HTML from a page.
&lt;strong&gt;Snapshot (HTML + Screenshot)&lt;/strong&gt; – Use &lt;code&gt;/snapshot&lt;/code&gt; to capture both the page&apos;s HTML and a screenshot in one request&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scrape Web Elements&lt;/strong&gt; – Use &lt;code&gt;/scrape&lt;/code&gt; to extract specific elements from a page.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, to capture a screenshot:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;https://api.cloudflare.com/client/v4/accounts/&amp;#x3C;accountId&gt;/browser-rendering/screenshot&apos;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Authorization: Bearer &amp;#x3C;apiToken&gt;&apos;&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;-H&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Content-Type: application/json&apos;&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;-d&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;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;html&quot;: &quot;Hello World!&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;screenshotOptions&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;type&quot;: &quot;webp&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;omitBackground&quot;: true&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;}&apos;&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;--output&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;screenshot.webp&quot;&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;Learn more in our &lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/rest-api/&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 27 Feb 2025 00:00:00 GMT</pubDate><product>Browser Rendering</product><category>Browser Rendering</category></item><item><title>Radar - DNS Insights in Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2025-02-27-radar-dns-insights/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-27-radar-dns-insights/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; has expanded its DNS insights, providing visibility into aggregated traffic and usage trends observed by our &lt;a href=&quot;https://developers.cloudflare.com/1.1.1.1/&quot;&gt;1.1.1.1&lt;/a&gt; DNS resolver.
In addition to global, location, and ASN traffic trends, we are also providing perspectives on protocol usage, query/response characteristics, and DNSSEC usage.&lt;/p&gt;
&lt;p&gt;Previously limited to the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/dns/subresources/top/&quot;&gt;&lt;code&gt;top&lt;/code&gt;&lt;/a&gt; locations and ASes endpoints, we have now introduced the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/dns/methods/timeseries/&quot;&gt;&lt;code&gt;/dns/timeseries&lt;/code&gt;&lt;/a&gt;: Retrieves DNS query volume over time.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/dns/subresources/summary/&quot;&gt;&lt;code&gt;/dns/summary/{dimension}&lt;/code&gt;&lt;/a&gt;: Retrieves summaries of DNS query distribution across ten different dimensions.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/dns/subresources/timeseries_groups/&quot;&gt;&lt;code&gt;/dns/timeseries_groups/{dimension}&lt;/code&gt;&lt;/a&gt;: Retrieves timeseries data for DNS query distribution across ten different dimensions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the &lt;code&gt;summary&lt;/code&gt; and &lt;code&gt;timeseries_groups&lt;/code&gt; endpoints, the following dimensions are available, displaying the distribution of DNS queries based on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cache_hit&lt;/code&gt;: Cache status (hit vs. miss).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dnsssec&lt;/code&gt;: DNSSEC support status (secure, insecure, invalid or other).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dnsssec_aware&lt;/code&gt;: DNSSEC client awareness (aware vs. not-aware).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dnsssec_e2e&lt;/code&gt;: End-to-end security (secure vs. insecure).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ip_version&lt;/code&gt;: IP version (IPv4 vs. IPv6).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;matching_answer&lt;/code&gt;: Matching answer status (match vs. no-match).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;protocol&lt;/code&gt;: Transport protocol (UDP, TLS, HTTPS or TCP).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;query_type&lt;/code&gt;: Query type (&lt;code&gt;A&lt;/code&gt;, &lt;code&gt;AAAA&lt;/code&gt;, &lt;code&gt;PTR&lt;/code&gt;, etc.).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;response_code&lt;/code&gt;: Response code (&lt;code&gt;NOERROR&lt;/code&gt;, &lt;code&gt;NXDOMAIN&lt;/code&gt;, &lt;code&gt;REFUSED&lt;/code&gt;, etc.).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;response_ttl&lt;/code&gt;: Response TTL.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learn more about the new Radar DNS insights in our &lt;a href=&quot;https://blog.cloudflare.com/new-dns-section-on-cloudflare-radar/&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt;, and check out the &lt;a href=&quot;https://radar.cloudflare.com/dns&quot; target=&quot;_blank&quot;&gt;new Radar page&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 27 Feb 2025 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>AI Gateway - Introducing Guardrails in AI Gateway</title><link>https://developers.cloudflare.com/changelog/post/2025-02-26-guardrails/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-26-guardrails/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot;&gt;AI Gateway&lt;/a&gt; now includes &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/features/guardrails/&quot;&gt;Guardrails&lt;/a&gt;, to help you monitor your AI apps for harmful or inappropriate content and deploy safely.&lt;/p&gt;
&lt;p&gt;Within the AI Gateway settings, you can configure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Guardrails&lt;/strong&gt;: Enable or disable content moderation as needed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evaluation scope&lt;/strong&gt;: Select whether to moderate user prompts, model responses, or both.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hazard categories&lt;/strong&gt;: Specify which categories to monitor and determine whether detected inappropriate content should be blocked or flagged.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/Guardrails.BTNc0qeC_Z1HC20z.webp&quot; alt=&quot;Guardrails in AI Gateway&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Learn more in the &lt;a href=&quot;https://blog.cloudflare.com/guardrails-in-ai-gateway/&quot; target=&quot;_blank&quot;&gt;blog&lt;/a&gt; or our &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/features/guardrails/&quot;&gt;documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 26 Feb 2025 00:00:00 GMT</pubDate><product>AI Gateway</product><category>AI Gateway</category></item><item><title>Email security - Use DLP Assist for M365</title><link>https://developers.cloudflare.com/changelog/post/2025-02-25-dlp-assist-for-m365/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-25-dlp-assist-for-m365/</guid><description>&lt;p&gt;Cloudflare Email security customers who have Microsoft 365 environments can quickly deploy an Email DLP (Data Loss Prevention) solution for free.&lt;/p&gt;
&lt;p&gt;Simply deploy our add-in, create a DLP policy in Cloudflare, and configure Outlook to trigger behaviors like displaying a banner, alerting end users before sending, or preventing delivery entirely.&lt;/p&gt;
&lt;p&gt;Refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/email-security/outbound-dlp/&quot;&gt;Outbound Data Loss Prevention&lt;/a&gt; to learn more about this feature.&lt;/p&gt;
&lt;p&gt;In GUI alert:&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/DLP-Alert.5s-fbKn3_1xfB14.webp&quot; alt=&quot;DLP-Alert&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Alert before sending:&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/DLP-Pop-up.0gkYy7o5_ZgIo8K.webp&quot; alt=&quot;DLP-Pop-up&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Prevent delivery:&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/DLP-Blocked.CmQkGrnM_ZewJi3.webp&quot; alt=&quot;DLP-Blocked&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;This feature is available across these Email security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 25 Feb 2025 23:22:49 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>Agents, Workers - Introducing the Agents SDK</title><link>https://developers.cloudflare.com/changelog/post/2025-02-25-agents-sdk/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-25-agents-sdk/</guid><description>&lt;p&gt;We&apos;ve released the &lt;a href=&quot;http://blog.cloudflare.com/build-ai-agents-on-cloudflare/&quot; target=&quot;_blank&quot;&gt;Agents SDK&lt;/a&gt;, a package and set of tools that help you build and ship AI Agents.&lt;/p&gt;
&lt;p&gt;You can get up and running with a &lt;a href=&quot;https://github.com/cloudflare/agents-starter&quot; target=&quot;_blank&quot;&gt;chat-based AI Agent&lt;/a&gt; (and deploy it to Workers) that uses the Agents SDK, tool calling, and state syncing with a React-based front-end by running the following command:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&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;cloudflare@latest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agents-starter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--template=&quot;cloudflare/agents-starter&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;# open up README.md and follow the instructions&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;You can also add an Agent to any existing Workers application by installing the &lt;code&gt;agents&lt;/code&gt; package directly&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;i&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agents&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;... and then define your first Agent:&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;agents&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;YourAgent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extends&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Agent&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Env&lt;/span&gt;&lt;span&gt;&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;// Build it out&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Access state on this.state or query the Agent&apos;s database via this.sql&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Handle WebSocket events with onConnect and onMessage&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Run tasks on a schedule with this.schedule&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;// Call AI models&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/or call other Agents.&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 the &lt;a href=&quot;https://developers.cloudflare.com/agents/&quot;&gt;Agents documentation&lt;/a&gt; to learn more about the Agents SDK, the SDK APIs, as well as how to test and deploying agents to production.&lt;/p&gt;</description><pubDate>Tue, 25 Feb 2025 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category></item><item><title>Workers AI - Workers AI now supports structured JSON outputs.</title><link>https://developers.cloudflare.com/changelog/post/2025-02-25-json-mode/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-25-json-mode/</guid><description>&lt;p&gt;Workers AI now supports structured JSON outputs with &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/features/json-mode/&quot;&gt;JSON mode&lt;/a&gt;, which allows you to request a structured output response when interacting with AI models.&lt;/p&gt;
&lt;p&gt;This makes it much easier to retrieve structured data from your AI models, and avoids the (error prone!) need to parse large unstructured text responses to extract your data.&lt;/p&gt;
&lt;p&gt;JSON mode in Workers AI is compatible with the OpenAI SDK&apos;s &lt;a href=&quot;https://platform.openai.com/docs/guides/structured-outputs&quot; target=&quot;_blank&quot;&gt;structured outputs&lt;/a&gt; &lt;code&gt;response_format&lt;/code&gt; API, which can be used directly in a Worker:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OpenAI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;openai&quot;&lt;/span&gt;&lt;span&gt;;&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;// Define your JSON schema for a calendar event&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CalendarEventSchema&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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;object&quot;&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;properties&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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;date&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;participants&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;array&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; items&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;/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;required&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;date&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;participants&quot;&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OpenAI&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;apiKey&lt;/span&gt;&lt;span&gt;:&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;OPENAI_API_KEY&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;// Optional: use AI Gateway to bring logs, evals &amp;#x26; caching to your AI requests&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// https://developers.cloudflare.com/ai-gateway/usage/providers/openai/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// baseUrl: &quot;https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/openai&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;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;chat&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;completions&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;{&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;model&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;gpt-4o-2024-08-06&quot;&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;messages&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; role&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;system&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Extract the event information.&quot;&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;/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;role&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&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;content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Alice and Bob are going to a science fair on Friday.&quot;&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;]&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;// Use the `response_format` option to request a structured JSON output&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;response_format&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;// Set json_schema and provide ra schema, or json_object and parse it yourself&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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;json_schema&quot;&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;schema&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CalendarEventSchema&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// provide a schema&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;)&lt;/span&gt;&lt;span&gt;;&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;// This will be of type CalendarEventSchema&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&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;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;choices&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parsed&lt;/span&gt;&lt;span&gt;;&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;json&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;calendar_event&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;event&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;import &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OpenAI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;span&gt;&quot;openai&quot;&lt;/span&gt;&lt;span&gt;;&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;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;OPENAI_API_KEY&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;/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;// Define your JSON schema for a calendar event&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CalendarEventSchema&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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;object&quot;&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;properties&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;name&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;date&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;participants&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;array&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; items&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;string&quot;&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;/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;required&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&quot;name&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;date&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;participants&quot;&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;,&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;span&gt;Env&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OpenAI&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;apiKey&lt;/span&gt;&lt;span&gt;:&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;OPENAI_API_KEY&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;// Optional: use AI Gateway to bring logs, evals &amp;#x26; caching to your AI requests&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// https://developers.cloudflare.com/ai-gateway/usage/providers/openai/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;// baseUrl: &quot;https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/openai&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;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;client&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;chat&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;completions&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;{&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;model&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;gpt-4o-2024-08-06&quot;&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;messages&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; role&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;system&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Extract the event information.&quot;&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;/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;role&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user&quot;&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;content&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Alice and Bob are going to a science fair on Friday.&quot;&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;]&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;// Use the `response_format` option to request a structured JSON output&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;response_format&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;// Set json_schema and provide ra schema, or json_object and parse it yourself&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;type&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;json_schema&quot;&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;schema&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CalendarEventSchema&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// provide a schema&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;)&lt;/span&gt;&lt;span&gt;;&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;// This will be of type CalendarEventSchema&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;const&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;response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;choices&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;parsed&lt;/span&gt;&lt;span&gt;;&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;json&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;calendar_event&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;event&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;/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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;To learn more about JSON mode and structured outputs, visit the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/features/json-mode/&quot;&gt;Workers AI documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 25 Feb 2025 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>Workflows - Concurrent Workflow instances limits increased.</title><link>https://developers.cloudflare.com/changelog/post/2025-02-25-workflows-concurrency-increased/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-25-workflows-concurrency-increased/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workflows/&quot;&gt;Workflows&lt;/a&gt; now supports up to 4,500 concurrent (running) instances, up from the previous limit of 100. This limit will continue to increase during the Workflows open beta. This increase applies to all users on the Workers Paid plan, and takes effect immediately.&lt;/p&gt;
&lt;p&gt;Review the Workflows &lt;a href=&quot;https://developers.cloudflare.com/workflows/reference/limits&quot;&gt;limits documentation&lt;/a&gt; and/or dive into the &lt;a href=&quot;https://developers.cloudflare.com/workflows/get-started/guide/&quot;&gt;get started guide&lt;/a&gt; to start building on Workflows.&lt;/p&gt;</description><pubDate>Tue, 25 Feb 2025 00:00:00 GMT</pubDate><product>Workflows</product><category>Workflows</category></item><item><title>Cloudflare Images - Bind the Images API to your Worker</title><link>https://developers.cloudflare.com/changelog/post/2025-02-21-images-bindings-in-workers/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-21-images-bindings-in-workers/</guid><description>&lt;p&gt;You can now &lt;a href=&quot;https://developers.cloudflare.com/images/transform-images/bindings/&quot;&gt;interact with the Images API&lt;/a&gt; directly in your Worker.&lt;/p&gt;
&lt;p&gt;This allows more fine-grained control over transformation request flows and cache behavior. For example, you can resize, manipulate, and overlay images without requiring them to be accessible through a URL.&lt;/p&gt;
&lt;p&gt;The Images binding can be configured in the Cloudflare dashboard for your Worker or in the Wrangler configuration file in your project&apos;s directory:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;wrangler.jsonc&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;jsonc&quot;&gt;&lt;code class=&quot;language-jsonc&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;images&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;IMAGES&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;// i.e. available in your Worker on env.IMAGES&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;wrangler.toml&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code class=&quot;language-toml&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;images&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;binding&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;IMAGES&quot;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Within your Worker code, you can interact with this binding by using &lt;code&gt;env.IMAGES&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Here&apos;s how you can rotate, resize, and blur an image, then output the image as AVIF:&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;info&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;IMAGES&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;info&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// stream contains a valid image, and width/height is available on the info object&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&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;await&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;IMAGES&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;stream&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;transform&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; rotate&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;90&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;transform&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; width&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;128&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;transform&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; blur&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;20&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;output&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; format&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;image/avif&quot;&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;response&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&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;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/images/transform-images/bindings/&quot;&gt;Images Bindings&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 24 Feb 2025 00:00:00 GMT</pubDate><product>Cloudflare Images</product><category>Cloudflare Images</category></item><item><title>R2 - Super Slurper now supports migrations from all S3-compatible storage providers</title><link>https://developers.cloudflare.com/changelog/post/2025-02-24-r2-super-slurper-s3-compatible-support/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-24-r2-super-slurper-s3-compatible-support/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/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.cloudflare.com/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;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/super-slurper-s3-compat-screenshot-border.D8Gd5eye_dt8CT.webp&quot; alt=&quot;Super Slurper S3-Compatible Source&quot;&gt;&lt;/starlight-image-zoom-zoomable&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.cloudflare.com/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>WAF - WAF Release - 2025-02-24</title><link>https://developers.cloudflare.com/changelog/post/2025-02-24-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-24-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;f7b9d265b86f448989fb0f054916911e &lt;/td&gt;&lt;td&gt;100718A&lt;/td&gt;&lt;td&gt;SonicWall SSLVPN 2 - Auth Bypass - CVE:CVE-2024-53704&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;77c13c611d2a4fa3a89c0fafc382fdec &lt;/td&gt;&lt;td&gt;100720&lt;/td&gt;&lt;td&gt;Palo Alto Networks - Auth Bypass - CVE:CVE-2025-0108&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 24 Feb 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Workers AI - Workers AI larger context windows</title><link>https://developers.cloudflare.com/changelog/post/2025-02-24-context-windows/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-24-context-windows/</guid><description>&lt;p&gt;We&apos;ve updated the Workers AI text generation models to include context windows and limits definitions and changed our APIs to estimate and validate the number of tokens in the input prompt, not the number of characters.&lt;/p&gt;
&lt;p&gt;This update allows developers to use larger context windows when interacting with Workers AI models, which can lead to better and more accurate results.&lt;/p&gt;
&lt;p&gt;Our &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/models/&quot;&gt;catalog page&lt;/a&gt; provides more information about each model&apos;s supported context window.&lt;/p&gt;</description><pubDate>Mon, 24 Feb 2025 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>Zaraz - Zaraz moves to the “Tag Management” category in the Cloudflare dashboard</title><link>https://developers.cloudflare.com/changelog/post/2025-02-24-zaraz-dash-placement/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-24-zaraz-dash-placement/</guid><description>&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/zaraz-account-level.L5Bz9oN0_151oOs.webp&quot; alt=&quot;Zaraz at zone level to Tag management at account level&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Previously, you could only configure Zaraz by going to each individual zone under your Cloudflare account. Now, if you’d like to get started with Zaraz or manage your existing configuration, you can navigate to the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/tag-management/zaraz&quot; target=&quot;_blank&quot;&gt;Tag Management&lt;/a&gt; section on the Cloudflare dashboard – this will make it easier to compare and configure the same settings across multiple zones.&lt;/p&gt;
&lt;p&gt;These changes will not alter any existing configuration or entitlements for zones you already have Zaraz enabled on. If you’d like to edit existing configurations, you can go to the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/tag-management/zaraz&quot; target=&quot;_blank&quot;&gt;Tag Setup&lt;/a&gt; section of the dashboard, and select the zone you&apos;d like to edit.&lt;/p&gt;</description><pubDate>Mon, 24 Feb 2025 00:00:00 GMT</pubDate><product>Zaraz</product><category>Zaraz</category></item><item><title>Workers for Platforms - Workers for Platforms - Instant dispatch for newly created User Workers</title><link>https://developers.cloudflare.com/changelog/post/2025-02-20-synchronous-uploads/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-20-synchronous-uploads/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-for-platforms/&quot; target=&quot;_blank&quot;&gt;Workers for Platforms&lt;/a&gt; is an architecture wherein a centralized &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/how-workers-for-platforms-works/#dynamic-dispatch-worker&quot;&gt;dispatch Worker&lt;/a&gt; processes incoming requests and routes them to isolated sub-Workers, called &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/how-workers-for-platforms-works/#user-workers&quot;&gt;User Workers&lt;/a&gt;.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/wfp-request.CZmZLaYf_Z2o8aKs.webp&quot; alt=&quot;Workers for Platforms Requests&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Previously, when a new User Worker was uploaded, there was a short delay before it became available for dispatch. This meant that even though an API request could return a 200 OK response, the script might not yet be ready to handle requests, causing unexpected failures for platforms that immediately dispatch to new Workers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;With this update, first-time uploads of User Workers are now deployed synchronously&lt;/strong&gt;. A 200 OK response guarantees the script is fully provisioned and ready to handle traffic immediately, ensuring more predictable deployments and reducing errors.&lt;/p&gt;</description><pubDate>Thu, 20 Feb 2025 17:00:00 GMT</pubDate><product>Workers for Platforms</product><category>Workers for Platforms</category></item><item><title>Workers AI - Workers AI updated pricing</title><link>https://developers.cloudflare.com/changelog/post/2025-02-20-updated-pricing-docs/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-20-updated-pricing-docs/</guid><description>&lt;p&gt;We&apos;ve updated the Workers AI &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/platform/pricing/&quot;&gt;pricing&lt;/a&gt; to include the latest models and how model usage maps to Neurons.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each model&apos;s core input format(s) (tokens, audio seconds, images, etc) now include mappings to Neurons, making it easier to understand how your included Neuron volume is consumed and how you are charged at scale&lt;/li&gt;
&lt;li&gt;Per-model pricing, instead of the previous bucket approach, allows us to be more flexible on how models are charged based on their size, performance and capabilities. As we optimize each model, we can then pass on savings for that model.&lt;/li&gt;
&lt;li&gt;You will still only pay for what you consume: Workers AI inference is serverless, and not billed by the hour.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Going forward, models will be launched with their associated Neuron costs, and we&apos;ll be updating the Workers AI dashboard and API to reflect consumption in both raw units and Neurons. Visit the &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/platform/pricing/&quot;&gt;Workers AI pricing&lt;/a&gt; page to learn more about Workers AI pricing.&lt;/p&gt;</description><pubDate>Thu, 20 Feb 2025 00:00:00 GMT</pubDate><product>Workers AI</product><category>Workers AI</category></item><item><title>Workers - Autofix Worker name configuration errors at build time</title><link>https://developers.cloudflare.com/changelog/post/2025-02-20-builds-name-conflict/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-20-builds-name-conflict/</guid><description>&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/gh-auto-pr-name.BHTtigEg_2smH.webp&quot; alt=&quot;Auto-fixing Workers Name in Git Repo&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Small misconfigurations shouldn’t break your deployments. Cloudflare is introducing automatic error detection and fixes in &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/&quot;&gt;Workers Builds&lt;/a&gt;, identifying common issues in your wrangler.toml or wrangler.jsonc and proactively offering fixes, so you spend less time debugging and more time shipping.&lt;/p&gt;
&lt;p&gt;Here&apos;s how it works:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Before running your build, Cloudflare checks your Worker&apos;s Wrangler configuration file (wrangler.toml or wrangler.jsonc) for common errors.&lt;/li&gt;
&lt;li&gt;Once you submit a build, if Cloudflare finds an error it can fix, it will submit a pull request to your repository that fixes it.&lt;/li&gt;
&lt;li&gt;Once you merge this pull request, Cloudflare will run another build.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We&apos;re starting with fixing name mismatches between your Wrangler file and the Cloudflare dashboard, a top cause of build failures.&lt;/p&gt;
&lt;p&gt;This is just the beginning, we want your feedback on what other errors we should catch and fix next. Let us know in the Cloudflare Developers Discord, &lt;a href=&quot;https://discord.com/channels/595317990191398933/1064502845061210152&quot; target=&quot;_blank&quot;&gt;#workers-and-pages-feature-suggestions&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 20 Feb 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>WAF - WAF Release - 2025-02-18</title><link>https://developers.cloudflare.com/changelog/post/2025-02-18-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-18-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;d1d45e4f59014f0fb22e0e6aa2ffa4b8 &lt;/td&gt;&lt;td&gt;100715&lt;/td&gt;&lt;td&gt;FortiOS - Auth Bypass - CVE:CVE-2024-55591&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;14b5cdeb4cde490ba37d83555a883e12 &lt;/td&gt;&lt;td&gt;100716&lt;/td&gt;&lt;td&gt;Ivanti - Auth Bypass - CVE:CVE-2021-44529&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;498fcd81a62a4b5ca943e2de958094d3 &lt;/td&gt;&lt;td&gt;100717&lt;/td&gt;&lt;td&gt;SimpleHelp - Auth Bypass - CVE:CVE-2024-57727&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;6e0d8afc36ba4ce9836f81e63b66df22 &lt;/td&gt;&lt;td&gt;100718&lt;/td&gt;&lt;td&gt;SonicWall SSLVPN - Auth Bypass - CVE:CVE-2024-53704&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;8eb4536dba1a4da58fbf81c79184699f &lt;/td&gt;&lt;td&gt;100719&lt;/td&gt;&lt;td&gt;Yeti Platform - Auth Bypass - CVE:CVE-2024-46507&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Tue, 18 Feb 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Queues - Customize queue message retention periods</title><link>https://developers.cloudflare.com/changelog/post/2025-02-14-customize-queue-retention-period/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-14-customize-queue-retention-period/</guid><description>&lt;p&gt;You can now customize a queue&apos;s message retention period, from a minimum of 60 seconds to a maximum of 14 days. Previously, it was fixed to the default of 4 days.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/customize-retention-period.CpK7s10q_19dmJh.webp&quot; alt=&quot;Customize a queue&amp;#x27;s message retention period&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;You can customize the retention period on the settings page for your queue, or using Wrangler:&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;wrangler&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queues&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;my-queue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--message-retention-period-secs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;600&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;This feature is available on all new and existing queues. If you haven&apos;t used Cloudflare Queues before, &lt;a href=&quot;https://developers.cloudflare.com/queues/get-started&quot;&gt;get started with the Cloudflare Queues guide&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 14 Feb 2025 12:00:00 GMT</pubDate><product>Queues</product><category>Queues</category></item><item><title>Agents, Workers, Workflows - Build AI Agents with Example Prompts</title><link>https://developers.cloudflare.com/changelog/post/2025-02-14-example-ai-prompts/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-14-example-ai-prompts/</guid><description>&lt;p&gt;We&apos;ve added an &lt;a href=&quot;https://developers.cloudflare.com/workers/get-started/prompting/&quot;&gt;example prompt&lt;/a&gt; to help you get started with building AI agents and applications on Cloudflare &lt;a href=&quot;https://developers.cloudflare.com/workers/&quot;&gt;Workers&lt;/a&gt;, including &lt;a href=&quot;https://developers.cloudflare.com/workflows/&quot;&gt;Workflows&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/&quot;&gt;Durable Objects&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/kv/&quot;&gt;Workers KV&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can use this prompt with your favorite AI model, including Claude 3.5 Sonnet, OpenAI&apos;s o3-mini, Gemini 2.0 Flash, or Llama 3.3 on Workers AI. Models with large context windows will allow you to paste the prompt directly: provide your own prompt within the &lt;code&gt;&amp;#x3C;user_prompt&gt;&amp;#x3C;/user_prompt&gt;&lt;/code&gt; tags.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{paste_prompt_here}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&amp;#x3C;user_prompt&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;user:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Build&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;an&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;using&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;Workflows.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;The&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Workflow&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;should&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;when&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;issue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;is&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;opened&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;specific&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;project&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;label&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;help&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;or&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;bug&apos;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;attempt&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;help&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;user&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;troubleshoot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;issue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;by&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calling&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OpenAI&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;API&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;with&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;issue&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;description,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;clear,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;structured&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;prompt&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;that&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;asks&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;model&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;suggest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1-3&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;possible&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;solutions&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;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;issue.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Any&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;snippets&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;should&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;be&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;formatted&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Markdown&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;code&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;blocks.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Documentation&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;sources&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;should&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;be&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;referenced&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;at&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bottom&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;The&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;should&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;post&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&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;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;issue.&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;The&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;agent&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;should&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;run&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;as&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;provided&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GitHub&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;account.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&amp;#x3C;/user_prompt&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;This prompt is still experimental, but we encourage you to try it out and &lt;a href=&quot;https://github.com/cloudflare/cloudflare-docs/issues/new?template=content.edit.yml&quot; target=&quot;_blank&quot;&gt;provide feedback&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 14 Feb 2025 00:00:00 GMT</pubDate><product>Agents</product><category>Agents</category><category>Workers</category><category>Workflows</category></item><item><title>Cloudflare WAN - Configure your Magic WAN Connector to connect via static IP assigment</title><link>https://developers.cloudflare.com/changelog/post/2025-02-14-local-console-access/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-14-local-console-access/</guid><description>&lt;p&gt;You can now locally configure your &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/configuration/appliance/&quot;&gt;Magic WAN Connector&lt;/a&gt; to work in a static IP configuration.&lt;/p&gt;
&lt;p&gt;This local method does not require having access to a DHCP Internet connection. However, it does require being comfortable with using tools to access the serial port on Magic WAN Connector as well as using a serial terminal client to access the Connector&apos;s environment.&lt;/p&gt;
&lt;p&gt;For more details, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#bootstrap-via-serial-console&quot;&gt;WAN with a static IP address&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 14 Feb 2025 00:00:00 GMT</pubDate><product>Cloudflare WAN</product><category>Cloudflare WAN</category></item><item><title>R2 - Super Slurper now transfers data to R2 up to 5x faster</title><link>https://developers.cloudflare.com/changelog/post/2025-02-14-r2-super-slurper-faster-migrations/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-14-r2-super-slurper-faster-migrations/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/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.cloudflare.com/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.cloudflare.com/workers/&quot;&gt;Cloudflare Workers&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/&quot;&gt;Durable Objects&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/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;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/slurper-objects-over-time-border.BFDkMQUw_KFpzV.webp&quot; alt=&quot;Super Slurper Objects Migrated&quot;&gt;&lt;/starlight-image-zoom-zoomable&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.cloudflare.com/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><item><title>SSL/TLS - Upload a certificate bundle with an RSA and ECDSA certificate per custom hostname</title><link>https://developers.cloudflare.com/changelog/post/2025-02-14-cert-bundling-for-custom-hostnames/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-14-cert-bundling-for-custom-hostnames/</guid><description>&lt;p&gt;Cloudflare has supported both RSA and ECDSA certificates across our platform for a number of years. Both certificates offer the same security, but ECDSA is more performant due to a smaller key size. However, RSA is more widely adopted and ensures compatibility with legacy clients. Instead of choosing between them, you may want both – that way, ECDSA is used when clients support it, but RSA is available if not.&lt;/p&gt;
&lt;p&gt;Now, you can upload both an RSA and ECDSA certificate on a custom hostname via the API.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;curl -X POST https://api.cloudflare.com/client/v4/zones/$ZONE_ID/custom_hostnames \&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;-H &apos;Content-Type: application/json&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;&lt;/span&gt;&lt;span&gt;-H &quot;X-Auth-Email: $CLOUDFLARE_EMAIL&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;-H &quot;X-Auth-Key: $CLOUDFLARE_API_KEY&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;-d &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;&lt;/span&gt;&lt;span&gt;&quot;hostname&quot;: &quot;hostname&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;ssl&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;custom_cert_bundle&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;custom_certificate&quot;: &quot;RSA Cert&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;custom_key&quot;: &quot;RSA Key&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;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;custom_certificate&quot;: &quot;ECDSA Cert&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;custom_key&quot;: &quot;ECDSA Key&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;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;bundle_method&quot;: &quot;force&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;wildcard&quot;: false,&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;settings&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;min_tls_version&quot;: &quot;1.0&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;You can also:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/custom_hostnames/methods/create/&quot;&gt;Upload&lt;/a&gt; an RSA or ECDSA certificate to a custom hostname with an existing ECDSA or RSA certificate, respectively.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/custom_hostnames/subresources/certificate_pack/subresources/certificates/methods/update/&quot;&gt;Replace&lt;/a&gt; the RSA or ECDSA certificate with a certificate of its same type.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/custom_hostnames/subresources/certificate_pack/subresources/certificates/methods/delete/&quot;&gt;Delete&lt;/a&gt; the RSA or ECDSA certificate (if the custom hostname has both an RSA and ECDSA uploaded).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This feature is available for Business and Enterprise customers who have purchased custom certificates.&lt;/p&gt;</description><pubDate>Fri, 14 Feb 2025 00:00:00 GMT</pubDate><product>SSL/TLS</product><category>SSL/TLS</category></item><item><title>Stream - Rewind, Replay, Resume: Introducing DVR for Stream Live</title><link>https://developers.cloudflare.com/changelog/post/2025-02-14-introducing-dvr-for-stream-live/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-14-introducing-dvr-for-stream-live/</guid><description>&lt;p&gt;Previously, all viewers watched &quot;the live edge,&quot; or the latest content of the
broadcast, synchronously. If a viewer paused for more than a few seconds,
the player would automatically &quot;catch up&quot; when playback started again. Seeking
through the broadcast was only available once the recording was available after
it concluded.&lt;/p&gt;
&lt;p&gt;Starting today, customers can make a small adjustment to the player
embed or manifest URL to enable the DVR experience for their viewers. By
offering this feature as an opt-in adjustment, our customers are empowered to
pick the best experiences for their applications.&lt;/p&gt;
&lt;p&gt;When building a player embed code or manifest URL, just add &lt;code&gt;dvrEnabled=true&lt;/code&gt; as
a query parameter. There are some things to be aware of when using this option.
For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/stream/stream-live/dvr-for-live/&quot;&gt;DVR for Live&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 14 Feb 2025 00:00:00 GMT</pubDate><product>Stream</product><category>Stream</category></item><item><title>Cache - Configurable multiplexing HTTP/2 to Origin</title><link>https://developers.cloudflare.com/changelog/post/2025-02-12-configurable-multiplexing-http2-to-origin/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-12-configurable-multiplexing-http2-to-origin/</guid><description>&lt;p&gt;You can now configure HTTP/2 multiplexing settings for origin connections on Enterprise plans. This feature allows you to optimize how Cloudflare manages concurrent requests over HTTP/2 connections to your origin servers, improving cache efficiency and reducing connection overhead.&lt;/p&gt;
&lt;h4&gt;How it works&lt;/h4&gt;
&lt;p&gt;HTTP/2 multiplexing allows multiple requests to be sent over a single TCP connection. With this configuration option, you can:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Control concurrent streams&lt;/strong&gt;: Adjust the maximum number of concurrent streams per connection.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimize connection reuse&lt;/strong&gt;: Fine-tune connection pooling behavior for your origin infrastructure.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduce connection overhead&lt;/strong&gt;: Minimize the number of TCP connections required between Cloudflare and your origin.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improve cache performance&lt;/strong&gt;: Better connection management can enhance cache fetch efficiency.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Benefits&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Customizable performance&lt;/strong&gt;: Tailor multiplexing settings to your origin&apos;s capabilities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduced latency&lt;/strong&gt;: Fewer connection handshakes improve response times.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lower origin load&lt;/strong&gt;: More efficient connection usage reduces server resource consumption.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced scalability&lt;/strong&gt;: Better connection management supports higher traffic volumes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;Enterprise customers can configure HTTP/2 multiplexing settings in the &lt;a href=&quot;https://dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Cloudflare Dashboard&lt;/a&gt; or through our &lt;a href=&quot;https://developers.cloudflare.com/api/&quot;&gt;API&lt;/a&gt;.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;Important consideration&lt;/p&gt;&lt;div&gt;&lt;p&gt;This setting needs to be tuned carefully for your origin infrastructure. Setting the concurrent stream limit too high can negatively impact performance by saturating the shared TCP connection and overwhelming server processing capacity, leading to increased latency for individual requests.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;</description><pubDate>Wed, 12 Feb 2025 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>Rules - Increased Cloudflare Rules limits</title><link>https://developers.cloudflare.com/changelog/post/2025-02-12-rules-upgraded-limits/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-12-rules-upgraded-limits/</guid><description>&lt;p&gt;We have upgraded and streamlined &lt;a href=&quot;https://developers.cloudflare.com/rules/&quot;&gt;Cloudflare Rules&lt;/a&gt; limits across all plans, simplifying rule management and improving scalability for everyone.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;New limits by product:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/&quot;&gt;Bulk Redirects&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Free: &lt;strong&gt;20&lt;/strong&gt; → &lt;strong&gt;10,000&lt;/strong&gt; URL redirects across lists&lt;/li&gt;
&lt;li&gt;Pro: &lt;strong&gt;500&lt;/strong&gt; → &lt;strong&gt;25,000&lt;/strong&gt; URL redirects across lists&lt;/li&gt;
&lt;li&gt;Business: &lt;strong&gt;500&lt;/strong&gt; → &lt;strong&gt;50,000&lt;/strong&gt; URL redirects across lists&lt;/li&gt;
&lt;li&gt;Enterprise: &lt;strong&gt;10,000&lt;/strong&gt; → &lt;strong&gt;1,000,000&lt;/strong&gt; URL redirects across lists&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/rules/cloud-connector/&quot;&gt;Cloud Connector&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Free: &lt;strong&gt;5&lt;/strong&gt; → &lt;strong&gt;10&lt;/strong&gt; connectors&lt;/li&gt;
&lt;li&gt;Enterprise: &lt;strong&gt;125&lt;/strong&gt; → &lt;strong&gt;300&lt;/strong&gt; connectors&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/rules/custom-errors/&quot;&gt;Custom Errors&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Pro: &lt;strong&gt;5&lt;/strong&gt; → &lt;strong&gt;25&lt;/strong&gt; error assets and rules&lt;/li&gt;
&lt;li&gt;Business: &lt;strong&gt;20&lt;/strong&gt; → &lt;strong&gt;50&lt;/strong&gt; error assets and rules&lt;/li&gt;
&lt;li&gt;Enterprise: &lt;strong&gt;50&lt;/strong&gt; → &lt;strong&gt;300&lt;/strong&gt; error assets and rules&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/rules/snippets/&quot;&gt;Snippets&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Pro: &lt;strong&gt;10&lt;/strong&gt; → &lt;strong&gt;25&lt;/strong&gt; code snippets and rules&lt;/li&gt;
&lt;li&gt;Business: &lt;strong&gt;25&lt;/strong&gt; → &lt;strong&gt;50&lt;/strong&gt; code snippets and rules&lt;/li&gt;
&lt;li&gt;Enterprise: &lt;strong&gt;50&lt;/strong&gt; → &lt;strong&gt;300&lt;/strong&gt; code snippets and rules&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/cache-rules/&quot;&gt;Cache Rules&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/rules/configuration-rules/&quot;&gt;Configuration Rules&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/rules/compression-rules/&quot;&gt;Compression Rules&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/rules/origin-rules/&quot;&gt;Origin Rules&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/rules/url-forwarding/single-redirects/&quot;&gt;Single Redirects&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/rules/transform/&quot;&gt;Transform Rules&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Enterprise: &lt;strong&gt;125&lt;/strong&gt; → &lt;strong&gt;300&lt;/strong&gt; rules&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;aside&gt;&lt;p&gt;Gradual rollout&lt;/p&gt;&lt;div&gt;&lt;p&gt;Limits are updated gradually. Some customers may still see previous limits until the rollout is fully completed in the first half of 2025.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;</description><pubDate>Wed, 12 Feb 2025 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Rules - Custom Errors (beta): Stored Assets &amp; Account-level Rules</title><link>https://developers.cloudflare.com/changelog/post/2025-02-11-custom-errors-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-11-custom-errors-beta/</guid><description>&lt;p&gt;We&apos;re introducing &lt;a href=&quot;https://developers.cloudflare.com/rules/custom-errors/&quot;&gt;Custom Errors&lt;/a&gt; (beta), which builds on our existing Custom Error Responses feature with new asset storage capabilities.&lt;/p&gt;
&lt;p&gt;This update allows you to store externally hosted error pages on Cloudflare and reference them in custom error rules, eliminating the need to supply inline content.&lt;/p&gt;
&lt;p&gt;This brings the following new capabilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Custom error assets&lt;/strong&gt; – Fetch and store external error pages at the edge for use in error responses.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Account-Level custom errors&lt;/strong&gt; – Define error handling rules and assets at the account level for consistency across multiple zones. Zone-level rules take precedence over account-level ones, and assets are not shared between levels.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can use Cloudflare API to upload your existing assets for use with Custom Errors:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;https://api.cloudflare.com/client/v4/zones/{zone_id}/custom_pages/assets&quot;&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;--header &lt;/span&gt;&lt;span&gt;&quot;Authorization: Bearer &amp;#x3C;API_TOKEN&gt;&quot;&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;--header &lt;/span&gt;&lt;span&gt;&apos;Content-Type: application/json&apos;&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;--data &lt;/span&gt;&lt;span&gt;&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;&lt;/span&gt;&lt;span&gt;&quot;name&quot;: &quot;maintenance&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;description&quot;: &quot;Maintenance template page&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;url&quot;: &quot;https://example.com/&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&apos;&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;You can then reference the stored asset in a Custom Error rule:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--request&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PUT&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;&quot;https://api.cloudflare.com/client/v4/zones/{zone_id}/rulesets/phases/http_custom_errors/entrypoint&quot;&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;--header &lt;/span&gt;&lt;span&gt;&quot;Authorization: Bearer &amp;#x3C;API_TOKEN&gt;&quot;&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;--header &lt;/span&gt;&lt;span&gt;&apos;Content-Type: application/json&apos;&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;--data &lt;/span&gt;&lt;span&gt;&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;&lt;/span&gt;&lt;span&gt;&quot;rules&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;action&quot;: &quot;serve_error&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;action_parameters&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;asset_name&quot;: &quot;maintenance&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;content_type&quot;: &quot;text/html&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;status_code&quot;: 503&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;enabled&quot;: true,&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;expression&quot;: &quot;http.request.uri.path contains \&quot;error\&quot;&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;}&apos;&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;</description><pubDate>Tue, 11 Feb 2025 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>WAF - WAF Release - 2025-02-11</title><link>https://developers.cloudflare.com/changelog/post/2025-02-11-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-11-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;742306889c2e4f6087de6646483b4c26 &lt;/td&gt;&lt;td&gt;100708&lt;/td&gt;&lt;td&gt;Aviatrix Network - Remote Code Execution - CVE:CVE-2024-50603&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;042228dffe0a4f1587da0e737e924ca3 &lt;/td&gt;&lt;td&gt;100709&lt;/td&gt;&lt;td&gt;Next.js - Remote Code Execution - CVE:CVE-2024-46982&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;2a12278325464d6682afb53483a7d8ff &lt;/td&gt;&lt;td&gt;100710&lt;/td&gt;&lt;td&gt;&lt;p&gt;Progress Software WhatsUp Gold - Directory Traversal -
CVE:CVE-2024-12105&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;82ce3424fbe84e9e99d77332baa8eb34 &lt;/td&gt;&lt;td&gt;100711&lt;/td&gt;&lt;td&gt;WordPress - Remote Code Execution - CVE:CVE-2024-56064&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;5afacd39dcfd42f89a6c43f787f5d34e &lt;/td&gt;&lt;td&gt;100712&lt;/td&gt;&lt;td&gt;WordPress - Remote Code Execution - CVE:CVE-2024-9047&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;05842b06f0a4415880b58f7fbf72cf8a &lt;/td&gt;&lt;td&gt;100713&lt;/td&gt;&lt;td&gt;FortiOS - Auth Bypass - CVE:CVE-2022-40684&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;This is a New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Tue, 11 Feb 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Email security - Open email links with Security Center</title><link>https://developers.cloudflare.com/changelog/post/2025-02-07-open-links-security-center/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-07-open-links-security-center/</guid><description>&lt;p&gt;You can now investigate links in emails with Cloudflare Security Center to generate a report containing a myriad of technical details: a phishing scan, SSL certificate data, HTTP request and response data, page performance data, DNS records, what technologies and libraries the page uses, and more.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/Open-Links-Security-Center.b-LJU4YB_2dBHq8.webp&quot; alt=&quot;Open links in Security Center&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;From &lt;strong&gt;Investigation&lt;/strong&gt;, go to &lt;strong&gt;View details&lt;/strong&gt;, and look for the &lt;strong&gt;Links identified&lt;/strong&gt; section. Select &lt;strong&gt;Open in Security Center&lt;/strong&gt; next to each link. &lt;strong&gt;Open in Security Center&lt;/strong&gt; allows your team to quickly generate a detailed report about the link with no risk to the analyst or your environment.&lt;/p&gt;
&lt;p&gt;For more details, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/email-security/investigation/search-email/#open-links&quot;&gt;Open links&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This feature is available across these Email security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Advantage&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Fri, 07 Feb 2025 23:22:49 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>Workers - Create and deploy Workers from Git repositories</title><link>https://developers.cloudflare.com/changelog/post/2025-02-07-new-ways-to-get-started-on-workers/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-07-new-ways-to-get-started-on-workers/</guid><description>&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/choose-template-import-repo.Ci4KQPnT_17oN4z.webp&quot; alt=&quot;Import repo or choose template&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;You can now create a Worker by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Importing a Git repository&lt;/strong&gt;: Choose an existing Git repo on your GitHub/GitLab account and set up &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/configuration/&quot;&gt;Workers Builds&lt;/a&gt; to deploy your Worker.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deploying a template with Git&lt;/strong&gt;: Choose from a brand new selection of production ready &lt;a href=&quot;https://github.com/cloudflare/templates&quot; target=&quot;_blank&quot;&gt;examples&lt;/a&gt; to help you get started with popular frameworks like &lt;a href=&quot;https://astro.build/&quot; target=&quot;_blank&quot;&gt;Astro&lt;/a&gt;, &lt;a href=&quot;https://remix.run/&quot; target=&quot;_blank&quot;&gt;Remix&lt;/a&gt; and &lt;a href=&quot;https://nextjs.org/&quot; target=&quot;_blank&quot;&gt;Next&lt;/a&gt; or build stateful applications with Cloudflare resources like &lt;a href=&quot;https://developers.cloudflare.com/d1/&quot;&gt;D1 databases&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/&quot;&gt;Workers AI&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/durable-objects/&quot;&gt;Durable Objects&lt;/a&gt;! When you&apos;re ready to deploy, Cloudflare will set up your project by cloning the template to your GitHub/GitLab account, provisioning any required &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/&quot;&gt;resources&lt;/a&gt; and deploying your Worker.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With every push to your chosen branch, Cloudflare will automatically build and deploy your Worker.&lt;/p&gt;
&lt;p&gt;To get started, go to the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers-and-pages/create&quot; target=&quot;_blank&quot;&gt;Workers dashboard&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;These new features are available today in the Cloudflare dashboard to a subset of Cloudflare customers, and will be coming to all customers in the next few weeks. Don&apos;t see it in your dashboard, but want early access? Add your Cloudflare Account ID to &lt;a href=&quot;https://forms.gle/U1qhkF2snNJDGJJa9&quot; target=&quot;_blank&quot;&gt;this form&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 07 Feb 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>AI Gateway - Request timeouts and retries with AI Gateway</title><link>https://developers.cloudflare.com/changelog/post/2025-02-05-aig-request-handling/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-05-aig-request-handling/</guid><description>&lt;p&gt;AI Gateway adds additional ways to handle requests - &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/configuration/request-handling/#request-timeouts&quot;&gt;Request Timeouts&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/configuration/request-handling/#request-retries&quot;&gt;Request Retries&lt;/a&gt;, making it easier to keep your applications responsive and reliable.&lt;/p&gt;
&lt;p&gt;Timeouts and retries can be used on both the &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/universal/&quot;&gt;Universal Endpoint&lt;/a&gt; or directly to a &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/providers/&quot;&gt;supported provider&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Request timeouts&lt;/strong&gt;
A &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/configuration/request-handling/#request-timeouts&quot;&gt;request timeout&lt;/a&gt; allows you to trigger &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/configuration/fallbacks/&quot;&gt;fallbacks&lt;/a&gt; or a retry if a provider takes too long to respond.&lt;/p&gt;
&lt;p&gt;To set a request timeout directly to a provider, add a &lt;code&gt;cf-aig-request-timeout&lt;/code&gt; header.&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/workers-ai/@cf/meta/llama-3.1-8b-instruct&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Authorization: Bearer {cf_api_token}&apos;&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Content-Type: application/json&apos;&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;cf-aig-request-timeout: 5000&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;--data&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;{&quot;prompt&quot;: &quot;What is Cloudflare?&quot;}&apos;&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;&lt;strong&gt;Request retries&lt;/strong&gt;
A &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/configuration/request-handling/#request-retries&quot;&gt;request retry&lt;/a&gt; automatically retries failed requests, so you can recover from temporary issues without intervening.&lt;/p&gt;
&lt;p&gt;To set up request retries directly to a provider, add the following headers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cf-aig-max-attempts (number)&lt;/li&gt;
&lt;li&gt;cf-aig-retry-delay (number)&lt;/li&gt;
&lt;li&gt;cf-aig-backoff (&quot;constant&quot; | &quot;linear&quot; | &quot;exponential)&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 06 Feb 2025 00:00:00 GMT</pubDate><product>AI Gateway</product><category>AI Gateway</category></item><item><title>AI Gateway - AI Gateway adds Cerebras, ElevenLabs, and Cartesia as new providers</title><link>https://developers.cloudflare.com/changelog/post/2025-02-04-aig-provider-cartesia-eleven-cerebras/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-04-aig-provider-cartesia-eleven-cerebras/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot;&gt;AI Gateway&lt;/a&gt; has added three new providers: &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/providers/cartesia/&quot;&gt;Cartesia&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/providers/cerebras/&quot;&gt;Cerebras&lt;/a&gt;, and &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/providers/elevenlabs/&quot;&gt;ElevenLabs&lt;/a&gt;, giving you more even more options for providers you can use through AI Gateway. Here&apos;s a brief overview of each:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/providers/cartesia/&quot;&gt;Cartesia&lt;/a&gt; provides text-to-speech models that produce natural-sounding speech with low latency.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/providers/cerebras/&quot;&gt;Cerebras&lt;/a&gt; delivers low-latency AI inference to Meta&apos;s Llama 3.1 8B and Llama 3.3 70B models.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/providers/elevenlabs/&quot;&gt;ElevenLabs&lt;/a&gt; offers text-to-speech models with human-like voices in 32 languages.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/cerebras2.qHYP0ZnF_XMtnx.webp&quot; alt=&quot;Example of Cerebras log in AI Gateway&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To get started with AI Gateway, just update the base URL. Here&apos;s how you can send a request to &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/providers/cerebras/&quot;&gt;Cerebras&lt;/a&gt; using cURL:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-X&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;POST&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://gateway.ai.cloudflare.com/v1/ACCOUNT_TAG/GATEWAY/cerebras/chat/completions&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;content-type: application/json&apos;&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Authorization: Bearer CEREBRAS_TOKEN&apos;&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;--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;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;model&quot;: &quot;llama-3.3-70b&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;messages&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;role&quot;: &quot;user&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;content&quot;: &quot;What is Cloudflare?&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;}&apos;&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;</description><pubDate>Wed, 05 Feb 2025 00:00:00 GMT</pubDate><product>AI Gateway</product><category>AI Gateway</category></item><item><title>Cache - Fight CSAM More Easily Than Ever</title><link>https://developers.cloudflare.com/changelog/post/2025-02-04-easier-onboarding-for-csam-scanning-tool/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-04-easier-onboarding-for-csam-scanning-tool/</guid><description>&lt;p&gt;You can now implement our &lt;strong&gt;child safety tooling&lt;/strong&gt;, the &lt;strong&gt;&lt;a href=&quot;https://developers.cloudflare.com/cache/reference/csam-scanning/&quot;&gt;CSAM Scanning Tool&lt;/a&gt;&lt;/strong&gt;, more easily. Instead of requiring external reporting credentials, you only need a verified email address for notifications to onboard. This change makes the tool more accessible to a wider range of customers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How It Works&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When enabled, the tool automatically &lt;a href=&quot;https://blog.cloudflare.com/the-csam-scanning-tool/&quot; target=&quot;_blank&quot;&gt;hashes images for enabled websites as they enter the Cloudflare cache&lt;/a&gt;. These hashes are then checked against a database of &lt;strong&gt;known abusive images&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Potential match detected?&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;content URL is blocked&lt;/strong&gt;, and&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cloudflare will notify you&lt;/strong&gt; about the found matches via the provided email address.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Updated Service-Specific Terms&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We have also made updates to our &lt;strong&gt;&lt;a href=&quot;https://www.cloudflare.com/service-specific-terms-application-services/#csam-scanning-tool-terms&quot; target=&quot;_blank&quot;&gt;Service-Specific Terms&lt;/a&gt;&lt;/strong&gt; to reflect these changes.&lt;/p&gt;</description><pubDate>Tue, 04 Feb 2025 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>Radar - Expanded AI insights in Cloudflare Radar</title><link>https://developers.cloudflare.com/changelog/post/2025-02-04-radar-ai-insights/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-04-radar-ai-insights/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/radar/&quot;&gt;&lt;strong&gt;Radar&lt;/strong&gt;&lt;/a&gt; has expanded its AI insights with new API endpoints for Internet services rankings, robots.txt analysis, and AI inference data.&lt;/p&gt;
&lt;h4&gt;Internet services ranking&lt;/h4&gt;
&lt;p&gt;Radar now provides &lt;a href=&quot;https://developers.cloudflare.com/radar/glossary/#internet-services-ranking&quot;&gt;rankings for Internet services&lt;/a&gt;, including Generative AI platforms, based on anonymized 1.1.1.1 resolver data.
Previously limited to the annual Year in Review, these insights are now available daily via the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/ranking/subresources/internet_services/&quot;&gt;API&lt;/a&gt;, through the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/ranking/subresources/internet_services/methods/top/&quot;&gt;&lt;code&gt;/ranking/internet_services/top&lt;/code&gt;&lt;/a&gt; show service popularity at a specific date.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/ranking/subresources/internet_services/methods/timeseries_groups/&quot;&gt;&lt;code&gt;/ranking/internet_services/timeseries_groups&lt;/code&gt;&lt;/a&gt; track ranking trends over time.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Robots.txt&lt;/h4&gt;
&lt;p&gt;Radar now analyzes &lt;a href=&quot;https://developers.cloudflare.com/radar/glossary/#robotstxt&quot;&gt;robots.txt&lt;/a&gt; files from the top 10,000 domains, identifying AI bot access rules.
AI-focused user agents from &lt;a href=&quot;https://github.com/ai-robots-txt/ai.robots.txt&quot; target=&quot;_blank&quot;&gt;ai.robots.txt&lt;/a&gt; are categorized as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fully allowed/disallowed&lt;/strong&gt; if directives apply to all paths (&lt;code&gt;*&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Partially allowed/disallowed&lt;/strong&gt; if restrictions apply to specific paths.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These insights are now available weekly via the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/robots_txt/&quot;&gt;API&lt;/a&gt;, through the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/robots_txt/subresources/top/subresources/user_agents/methods/directive/&quot;&gt;&lt;code&gt;/robots_txt/top/user_agents/directive&lt;/code&gt;&lt;/a&gt; to get the top AI user agents by directive.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/robots_txt/subresources/top/methods/domain_categories/&quot;&gt;&lt;code&gt;/robots_txt/top/domain_categories&lt;/code&gt;&lt;/a&gt; to get the top domain categories by robots.txt files.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Workers AI&lt;/h4&gt;
&lt;p&gt;Radar now provides insights into public AI inference models from &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/&quot;&gt;Workers AI&lt;/a&gt;, tracking usage trends across &lt;strong&gt;models&lt;/strong&gt; and &lt;strong&gt;tasks&lt;/strong&gt;.
These insights are now available via the &lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/ai/subresources/inference/&quot;&gt;API&lt;/a&gt;, through the following endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/ai/subresources/inference/subresources/summary/&quot;&gt;&lt;code&gt;/ai/inference/summary/{dimension}&lt;/code&gt;&lt;/a&gt; to view aggregated &lt;code&gt;model&lt;/code&gt; and &lt;code&gt;task&lt;/code&gt; popularity.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/api/resources/radar/subresources/ai/subresources/inference/subresources/timeseries_groups/&quot;&gt;&lt;code&gt;/ai/inference/timeseries_groups/{dimension}&lt;/code&gt;&lt;/a&gt; to track changes over time for &lt;code&gt;model&lt;/code&gt; or &lt;code&gt;task&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learn more about the new Radar AI insights in our &lt;a href=&quot;https://blog.cloudflare.com/expanded-ai-insights-on-cloudflare-radar/&quot; target=&quot;_blank&quot;&gt;blog post&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 04 Feb 2025 00:00:00 GMT</pubDate><product>Radar</product><category>Radar</category></item><item><title>WAF - Updated leaked credentials database</title><link>https://developers.cloudflare.com/changelog/post/2025-02-04-updated-leaked-credentials-database/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-04-updated-leaked-credentials-database/</guid><description>&lt;p&gt;Added new records to the leaked credentials database from a third-party database.&lt;/p&gt;</description><pubDate>Tue, 04 Feb 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Data Loss Prevention, Gateway - Block files that are password-protected, compressed, or otherwise unscannable.</title><link>https://developers.cloudflare.com/changelog/post/2025-02-13-improvements-unscannable-files/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-13-improvements-unscannable-files/</guid><description>&lt;p&gt;Gateway HTTP policies can now block files that are password-protected, compressed, or otherwise unscannable.&lt;/p&gt;
&lt;p&gt;These unscannable files are now matched with the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/http-policies/#download-and-upload-file-types&quot;&gt;Download and Upload File Types traffic selectors&lt;/a&gt; for HTTP policies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Password-protected Microsoft Office document&lt;/li&gt;
&lt;li&gt;Password-protected PDF&lt;/li&gt;
&lt;li&gt;Password-protected ZIP archive&lt;/li&gt;
&lt;li&gt;Unscannable ZIP archive&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get started inspecting and modifying behavior based on these and other rules, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/get-started/http/&quot;&gt;HTTP filtering&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 03 Feb 2025 00:00:00 GMT</pubDate><product>Data Loss Prevention</product><category>Data Loss Prevention</category><category>Gateway</category></item><item><title>Cloudflare Fundamentals, Terraform - Terraform v5 Provider is now generally available</title><link>https://developers.cloudflare.com/changelog/post/2025-02-03-terraform-v5-provider/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-03-terraform-v5-provider/</guid><description>&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2024-02-03-terraform-v5-screenshot.mW8OaFoS_Z2pw8Bq.webp&quot; alt=&quot;Screenshot of Terraform defining a Zone&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Cloudflare&apos;s v5 Terraform Provider is now generally available. With this release, Terraform resources are now automatically generated based on OpenAPI Schemas. This change brings alignment across our SDKs, API documentation, and now Terraform Provider. The new provider boosts coverage by increasing support for API properties to 100%, adding 25% more resources, and more than 200 additional data sources. Going forward, this will also reduce the barriers to bringing more resources into Terraform across the broader Cloudflare API. This is a small, but important step to making more of our platform manageable through GitOps, making it easier for you to manage Cloudflare just like you do your other infrastructure.&lt;/p&gt;
&lt;p&gt;The Cloudflare Terraform Provider v5 is a ground-up rewrite of the provider and introduces breaking changes for some resource types. Please refer to the &lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/guides/version-5-upgrade&quot; target=&quot;_blank&quot;&gt;upgrade guide&lt;/a&gt; for best practices, or the &lt;a href=&quot;https://blog.cloudflare.com/automatically-generating-cloudflares-terraform-provider/&quot; target=&quot;_blank&quot;&gt;blog post on automatically generating Cloudflare&apos;s Terraform Provider&lt;/a&gt; for more information about the approach.&lt;/p&gt;
&lt;p&gt;For more info&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs&quot; target=&quot;_blank&quot;&gt;Terraform provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/terraform/&quot; target=&quot;_blank&quot;&gt;Documentation on using Terraform with Cloudflare&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 03 Feb 2025 00:00:00 GMT</pubDate><product>Cloudflare Fundamentals</product><category>Cloudflare Fundamentals</category><category>Terraform</category></item><item><title>Workers - Revamped Workers Metrics</title><link>https://developers.cloudflare.com/changelog/post/2025-02-03-workers-metrics-revamp/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-03-workers-metrics-revamp/</guid><description>&lt;p&gt;We&apos;ve revamped the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/workers/services/view/:worker/production/metrics/&quot; target=&quot;_blank&quot;&gt;Workers Metrics dashboard&lt;/a&gt;.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/workers-metrics.IxYk9yF0_Z1h2eg9.webp&quot; alt=&quot;Workers Metrics dashboard&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Now you can easily compare metrics across Worker versions, understand the current state of a &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/versions-and-deployments/gradual-deployments/&quot;&gt;gradual deployment&lt;/a&gt;, and review key Workers metrics in a single view. This new interface enables you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Drag-and-select using a graphical timepicker for precise metric selection.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/metrics-graphical-timepicker.tzLlEF5U_Z102O4.webp&quot; alt=&quot;Workers Metrics graphical timepicker&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;ul&gt;
&lt;li&gt;Use histograms to visualize cumulative metrics, allowing you to bucket and compare rates over time.&lt;/li&gt;
&lt;li&gt;Focus on Worker versions by directly interacting with the version numbers in the legend.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/metrics-legend-selector.B2GY90Hn_27rpVV.webp&quot; alt=&quot;Workers Metrics legend selector&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;ul&gt;
&lt;li&gt;Monitor and compare active gradual deployments.&lt;/li&gt;
&lt;li&gt;Track error rates across versions with grouping both by version and by invocation status.&lt;/li&gt;
&lt;li&gt;Measure how &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/placement/&quot;&gt;Smart Placement&lt;/a&gt; improves request duration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Learn more about &lt;a href=&quot;https://developers.cloudflare.com/workers/observability/metrics-and-analytics&quot;&gt;metrics&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 03 Feb 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>DNS - Removed unused meta fields from DNS records</title><link>https://developers.cloudflare.com/changelog/post/2025-02-02-removed-meta-fields/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-02-removed-meta-fields/</guid><description>&lt;p&gt;Cloudflare is removing five fields from the &lt;code&gt;meta&lt;/code&gt; object of DNS records. These fields have been unused for more than a year and are no longer set on new records. This change may take up to four weeks to fully roll out.&lt;/p&gt;
&lt;p&gt;The affected fields are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the &lt;code&gt;auto_added&lt;/code&gt; boolean&lt;/li&gt;
&lt;li&gt;the &lt;code&gt;managed_by_apps&lt;/code&gt; boolean and corresponding &lt;code&gt;apps_install_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;the &lt;code&gt;managed_by_argo_tunnel&lt;/code&gt; boolean and corresponding &lt;code&gt;argo_tunnel_id&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An example record returned from the API would now look like the following:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;result&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;id&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;#x3C;ID&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;zone_id&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;#x3C;ZONE_ID&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;zone_name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;example.com&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;www.example.com&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;type&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;A&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;192.0.2.1&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;proxiable&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;&quot;&lt;/span&gt;&lt;span&gt;proxied&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;&quot;&lt;/span&gt;&lt;span&gt;ttl&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&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;&quot;&lt;/span&gt;&lt;span&gt;locked&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;&quot;&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;auto_added&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;&quot;&lt;/span&gt;&lt;span&gt;managed_by_apps&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;&quot;&lt;/span&gt;&lt;span&gt;managed_by_argo_tunnel&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&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;&quot;&lt;/span&gt;&lt;span&gt;source&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;primary&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;comment&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;null&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;&quot;&lt;/span&gt;&lt;span&gt;tags&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;created_on&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2025-03-17T20:37:05.368097Z&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;modified_on&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;2025-03-17T20:37:05.368097Z&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;success&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&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;&quot;&lt;/span&gt;&lt;span&gt;errors&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;messages&lt;/span&gt;&lt;span&gt;&quot;&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;/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 guidance, refer to &lt;a href=&quot;https://developers.cloudflare.com/dns/manage-dns-records/&quot;&gt;Manage DNS records&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Sun, 02 Feb 2025 00:00:00 GMT</pubDate><product>DNS</product><category>DNS</category></item><item><title>Workers for Platforms - Workers for Platforms now supports Static Assets</title><link>https://developers.cloudflare.com/changelog/post/2025-01-31-workers-platforms-static-assets/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-31-workers-platforms-static-assets/</guid><description>&lt;p&gt;Workers for Platforms customers can now attach static assets (HTML, CSS, JavaScript, images) directly to User Workers, removing the need to host separate infrastructure to serve the assets.&lt;/p&gt;
&lt;p&gt;This allows your platform to serve entire front-end applications from Cloudflare&apos;s global edge, utilizing caching for fast load times, while supporting dynamic logic within the same Worker. Cloudflare automatically scales its infrastructure to handle high traffic volumes, enabling you to focus on building features without managing servers.&lt;/p&gt;
&lt;h4&gt;What you can build&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Static Sites:&lt;/strong&gt; Host and serve HTML, CSS, JavaScript, and media files directly from Cloudflare&apos;s network, ensuring fast loading times worldwide. This is ideal for blogs, landing pages, and documentation sites because static assets can be efficiently cached and delivered closer to the user, reducing latency and enhancing the overall user experience.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full-Stack Applications:&lt;/strong&gt; Combine asset hosting with Cloudflare Workers to power dynamic, interactive applications. If you&apos;re an e-commerce platform, you can serve your customers&apos; product pages and run inventory checks from within the same Worker.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;URL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Check real-time inventory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;pathname&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;===&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;/api/inventory/check&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;product&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;searchParams&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;product&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inventory&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;INVENTORY_KV&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;product&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inventory&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;/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;// Serve static assets (HTML, CSS, images)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&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;ASSETS&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;URL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// Check real-time inventory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;pathname&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;/api/inventory/check&apos;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;product&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;searchParams&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;product&apos;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inventory&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&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;INVENTORY_KV&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;product&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;inventory&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;/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;// Serve static assets (HTML, CSS, images)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&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;ASSETS&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;/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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;&lt;strong&gt;Get Started:&lt;/strong&gt;
Upload static assets using the Workers for Platforms API or Wrangler. For more information, visit our &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-for-platforms/workers-for-platforms/configuration/static-assets/&quot; target=&quot;_blank&quot;&gt;Workers for Platforms documentation.&lt;/a&gt;&lt;/p&gt;</description><pubDate>Fri, 31 Jan 2025 00:00:00 GMT</pubDate><product>Workers for Platforms</product><category>Workers for Platforms</category></item><item><title>Workers - Transform HTML quickly with streaming content</title><link>https://developers.cloudflare.com/changelog/post/2025-01-31-html-rewriter-streaming/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-31-html-rewriter-streaming/</guid><description>&lt;p&gt;You can now transform HTML elements with streamed content using &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/html-rewriter&quot;&gt;&lt;code&gt;HTMLRewriter&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Methods like &lt;code&gt;replace&lt;/code&gt;, &lt;code&gt;append&lt;/code&gt;, and &lt;code&gt;prepend&lt;/code&gt; now accept &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/response/&quot;&gt;&lt;code&gt;Response&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/streams/readablestream/&quot;&gt;&lt;code&gt;ReadableStream&lt;/code&gt;&lt;/a&gt;
values as &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/html-rewriter/#global-types&quot;&gt;&lt;code&gt;Content&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This can be helpful in a variety of situations. For instance, you may have a Worker in front of an origin,
and want to replace an element with content from a different source. Prior to this change, you would have to load
all of the content from the upstream URL and convert it into a string before replacing the element. This slowed
down overall response times.&lt;/p&gt;
&lt;p&gt;Now, you can pass the &lt;code&gt;Response&lt;/code&gt; object directly into the &lt;code&gt;replace&lt;/code&gt; method, and HTMLRewriter will immediately
start replacing the content as it is streamed in. This makes responses faster.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ElementRewriter&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;element&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;// able to replace elements while streaming content&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// the fetched body is not buffered into memory as part&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// of the replace&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://upstream-content-provider.example&quot;&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;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;res&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;/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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&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;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://site-to-replace.com&quot;&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HTMLRewriter&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;on&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;[data-to-replace]&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ElementRewriter&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;transform&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ElementRewriter&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;element&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;any&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;// able to replace elements while streaming content&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// the fetched body is not buffered into memory as part&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;// of the replace&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;res&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;https://upstream-content-provider.example&apos;&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;element&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;res&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;/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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;&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;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;https://site-to-replace.com&apos;&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;HTMLRewriter&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;on&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;[data-to-replace]&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ElementRewriter&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;transform&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;response&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;/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;satisfies&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ExportedHandler&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Env&lt;/span&gt;&lt;span&gt;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;For more information, see the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/html-rewriter&quot;&gt;&lt;code&gt;HTMLRewriter&lt;/code&gt; documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Fri, 31 Jan 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>AI Gateway - AI Gateway Introduces New Worker Binding Methods</title><link>https://developers.cloudflare.com/changelog/post/2025-01-26-worker-binding-methods/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-26-worker-binding-methods/</guid><description>&lt;p&gt;We have released new &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/integrations/worker-binding-methods/&quot;&gt;Workers bindings API methods&lt;/a&gt;, allowing you to connect Workers applications to AI Gateway directly. These methods simplify how Workers calls AI services behind your AI Gateway configurations, removing the need to use the REST API and manually authenticate.&lt;/p&gt;
&lt;p&gt;To add an AI binding to your Worker, include the following in your &lt;a href=&quot;https://developers.cloudflare.com/workers/wrangler/configuration/&quot;&gt;Wrangler configuration file&lt;/a&gt;:&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/add-binding.BoYTiyon_ZjdDNx.webp&quot; alt=&quot;Add an AI binding to your Worker.&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;With the new AI Gateway binding methods, you can now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Send feedback and update metadata with &lt;code&gt;patchLog&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Retrieve detailed log information using &lt;code&gt;getLog&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Execute &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/universal/&quot;&gt;universal requests&lt;/a&gt; to any AI Gateway provider with &lt;code&gt;run&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, to send feedback and update metadata using &lt;code&gt;patchLog&lt;/code&gt;:&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/send-feedback.BGRzKmd9_NDVos.webp&quot; alt=&quot;Send feedback and update metadata using patchLog:&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Thu, 30 Jan 2025 00:00:00 GMT</pubDate><product>AI Gateway</product><category>AI Gateway</category></item><item><title>Workers, Browser Rendering - Increased Browser Rendering limits!</title><link>https://developers.cloudflare.com/changelog/post/2025-01-30-browser-rendering-more-instances/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-30-browser-rendering-more-instances/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/browser-rendering/&quot;&gt;Browser Rendering&lt;/a&gt; now supports 10 concurrent browser instances per account &lt;em&gt;and&lt;/em&gt; 10 new instances per minute, up from the previous limits of 2.&lt;/p&gt;
&lt;p&gt;This allows you to launch more browser tasks from &lt;a href=&quot;https://developers.cloudflare.com/workers&quot;&gt;Cloudflare Workers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To manage concurrent browser sessions, you can use &lt;a href=&quot;https://developers.cloudflare.com/queues/&quot;&gt;Queues&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/workflows/&quot;&gt;Workflows&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;batch&lt;/span&gt;&lt;span&gt;,&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;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;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;batch&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;messages&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;browser&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;puppeteer&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;launch&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;BROWSER&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;browser&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;newPage&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;try&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;goto&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&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;waitUntil&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;waitUntil&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;// Process page...&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;finally&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;browser&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;close&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;interface&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;QueueMessage&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;url&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;waitUntil&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;/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;export&lt;/span&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;BROWSER_QUEUE&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Queue&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;QueueMessage&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;span&gt;BROWSER&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Fetcher&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;queue&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;batch&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MessageBatch&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;QueueMessage&lt;/span&gt;&lt;span&gt;&gt;,&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;span&gt;Env&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt;&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;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;of&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;batch&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;messages&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;browser&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;puppeteer&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;launch&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;BROWSER&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;browser&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;newPage&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;try&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;page&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;goto&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&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;waitUntil&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;message&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;waitUntil&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;// Process page...&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;finally&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;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;browser&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;close&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;/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;/div&gt;&lt;/li&gt;&lt;/ul&gt;</description><pubDate>Thu, 30 Jan 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category><category>Browser Rendering</category></item><item><title>Stream - Expanded language support for Stream AI Generated Captions</title><link>https://developers.cloudflare.com/changelog/post/2025-01-30-stream-generated-captions-new-languages/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-30-stream-generated-captions-new-languages/</guid><description>&lt;p&gt;Stream&apos;s &lt;a href=&quot;https://developers.cloudflare.com/stream/edit-videos/adding-captions/#generate-a-caption&quot;&gt;generated captions&lt;/a&gt;
leverage Workers AI to automatically transcribe audio and provide captions to
the player experience. We have added support for these languages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;cs&lt;/code&gt; - Czech&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nl&lt;/code&gt; - Dutch&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fr&lt;/code&gt; - French&lt;/li&gt;
&lt;li&gt;&lt;code&gt;de&lt;/code&gt; - German&lt;/li&gt;
&lt;li&gt;&lt;code&gt;it&lt;/code&gt; - Italian&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ja&lt;/code&gt; - Japanese&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ko&lt;/code&gt; - Korean&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pl&lt;/code&gt; - Polish&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pt&lt;/code&gt; - Portuguese&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ru&lt;/code&gt; - Russian&lt;/li&gt;
&lt;li&gt;&lt;code&gt;es&lt;/code&gt; - Spanish&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, learn about &lt;a href=&quot;https://developers.cloudflare.com/stream/edit-videos/adding-captions/&quot;&gt;adding captions to videos&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 30 Jan 2025 00:00:00 GMT</pubDate><product>Stream</product><category>Stream</category></item><item><title>Rules - New Snippets Code Editor</title><link>https://developers.cloudflare.com/changelog/post/2025-01-29-snippets-code-editor/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-29-snippets-code-editor/</guid><description>&lt;p&gt;The new &lt;a href=&quot;https://developers.cloudflare.com/rules/snippets/&quot;&gt;Snippets&lt;/a&gt; code editor lets you edit Snippet code and rule in one place, making it easier to test and deploy changes without switching between pages.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/snippets-new-editor.CaoIu2_-_Z2rsmyM.webp&quot; alt=&quot;New Snippets code editor&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;What’s new:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Single-page editing for code and rule&lt;/strong&gt; – No need to jump between screens.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Auto-complete &amp;#x26; syntax highlighting&lt;/strong&gt; – Get suggestions and avoid mistakes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code formatting &amp;#x26; refactoring&lt;/strong&gt; – Write cleaner, more readable code.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Try it now in &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/:zone/rules/snippets&quot; target=&quot;_blank&quot;&gt;Rules &gt; Snippets&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 29 Jan 2025 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Hyperdrive - Automatic configuration for private databases on Hyperdrive</title><link>https://developers.cloudflare.com/changelog/post/2025-01-28-hyperdrive-automated-private-database-configuration/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-28-hyperdrive-automated-private-database-configuration/</guid><description>&lt;p&gt;Hyperdrive now automatically configures your Cloudflare Tunnel to connect to your private database.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/hyperdrive-private-database-automatic-configuration.BT4_KLwW_2nAXi4.webp&quot; alt=&quot;Automatic configuration of Cloudflare Access and Service Token in the Cloudflare dashboard for Hyperdrive.&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;When creating a Hyperdrive configuration for a private database, you only need to provide your database credentials and set up a Cloudflare Tunnel within the private network where your database is accessible. Hyperdrive will automatically create the Cloudflare Access, Service Token, and Policies needed to secure and restrict your Cloudflare Tunnel to the Hyperdrive configuration.&lt;/p&gt;
&lt;p&gt;To create a Hyperdrive for a private database, you can follow the &lt;a href=&quot;https://developers.cloudflare.com/hyperdrive/configuration/connect-to-private-database/&quot;&gt;Hyperdrive documentation&lt;/a&gt;. You can still manually create the Cloudflare Access, Service Token, and Policies if you prefer.&lt;/p&gt;
&lt;p&gt;This feature is available from the Cloudflare dashboard.&lt;/p&gt;</description><pubDate>Tue, 28 Jan 2025 00:00:00 GMT</pubDate><product>Hyperdrive</product><category>Hyperdrive</category></item><item><title>KV - Workers KV namespace limits increased to 1000</title><link>https://developers.cloudflare.com/changelog/post/2025-01-27-kv-increased-namespaces-limits/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-27-kv-increased-namespaces-limits/</guid><description>&lt;p&gt;You can now have up to 1000 Workers KV namespaces per account.&lt;/p&gt;
&lt;p&gt;Workers KV namespace limits were increased from 200 to 1000 for all accounts. Higher limits for Workers KV namespaces enable better organization of key-value data, such as by category, tenant, or environment.&lt;/p&gt;
&lt;p&gt;Consult the &lt;a href=&quot;https://developers.cloudflare.com/kv/platform/limits/&quot;&gt;Workers KV limits documentation&lt;/a&gt; for the rest of the limits. This increased limit is available for both the Free and Paid &lt;a href=&quot;https://developers.cloudflare.com/workers/platform/pricing/&quot;&gt;Workers plans&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 28 Jan 2025 00:00:00 GMT</pubDate><product>KV</product><category>KV</category></item><item><title>Workers - Support for Node.js DNS, Net, and Timer APIs in Workers</title><link>https://developers.cloudflare.com/changelog/post/2025-01-28-nodejs-compat-improvements/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-28-nodejs-compat-improvements/</guid><description>&lt;p&gt;When using a Worker with the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/nodejs/&quot;&gt;&lt;code&gt;nodejs_compat&lt;/code&gt;&lt;/a&gt; compatibility flag enabled, you can now use the following Node.js APIs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/nodejs/net/&quot;&gt;&lt;code&gt;node:net&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/nodejs/dns/&quot;&gt;&lt;code&gt;node:dns&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/nodejs/timers/&quot;&gt;&lt;code&gt;node:timers&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;node:net&lt;/h4&gt;
&lt;p&gt;You can use &lt;a href=&quot;https://nodejs.org/api/net.html&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;node:net&lt;/code&gt;&lt;/a&gt; to create a direct connection to servers via a TCP sockets
with &lt;a href=&quot;https://nodejs.org/api/net.html#class-netsocket&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;net.Socket&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;net&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;node:net&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;exampleIP&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;127.0.0.1&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;socket&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;net&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Socket&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;socket&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;connect&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;4000&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;exampleIP&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Connected&quot;&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;span&gt;;&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;socket&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Hello, Server!&quot;&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;socket&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;end&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Wrote to server&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;200&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;/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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;net&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;node:net&quot;&lt;/span&gt;&lt;span&gt;;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;exampleIP&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;127.0.0.1&quot;&lt;/span&gt;&lt;span&gt;;&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;socket&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;net&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Socket&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;socket&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;connect&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;4000&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;exampleIP&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;function&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Connected&quot;&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;span&gt;;&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;socket&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Hello, Server!&quot;&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;socket&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;end&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Wrote to server&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; status&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;200&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;/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;satisfies&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ExportedHandler&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;Additionally, you can now use other APIs including &lt;a href=&quot;https://nodejs.org/api/net.html#class-netblocklist&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;net.BlockList&lt;/code&gt;&lt;/a&gt; and
&lt;a href=&quot;https://nodejs.org/api/net.html#class-netsocketaddress&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;net.SocketAddress&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Note that &lt;a href=&quot;https://nodejs.org/api/net.html#class-netserver&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;net.Server&lt;/code&gt;&lt;/a&gt; is not supported.&lt;/p&gt;
&lt;h4&gt;node:dns&lt;/h4&gt;
&lt;p&gt;You can use &lt;a href=&quot;https://nodejs.org/api/dns.html&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;node:dns&lt;/code&gt;&lt;/a&gt; for name resolution via &lt;a href=&quot;https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/&quot;&gt;DNS over HTTPS&lt;/a&gt; using
&lt;a href=&quot;https://www.cloudflare.com/application-services/products/dns/&quot; target=&quot;_blank&quot;&gt;Cloudflare DNS&lt;/a&gt; at 1.1.1.1.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;dns&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;node:dns&quot;&lt;/span&gt;&lt;span&gt;;&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;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dns&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;promises&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;resolve4&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;cloudflare.com&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;NS&quot;&lt;/span&gt;&lt;span&gt;)&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;dns&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;node:dns&apos;&lt;/span&gt;&lt;span&gt;;&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;let&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dns&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;promises&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;resolve4&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;cloudflare.com&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;NS&apos;&lt;/span&gt;&lt;span&gt;)&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;All &lt;code&gt;node:dns&lt;/code&gt; functions are available, except &lt;code&gt;lookup&lt;/code&gt;, &lt;code&gt;lookupService&lt;/code&gt;, and &lt;code&gt;resolve&lt;/code&gt; which throw &quot;Not implemented&quot; errors when called.&lt;/p&gt;
&lt;h4&gt;node:timers&lt;/h4&gt;
&lt;p&gt;You can use &lt;a href=&quot;https://nodejs.org/api/timers.html&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;node:timers&lt;/code&gt;&lt;/a&gt; to schedule functions to be called at some future period of time.&lt;/p&gt;
&lt;p&gt;This includes &lt;a href=&quot;https://nodejs.org/api/timers.html#settimeoutcallback-delay-args&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;setTimeout&lt;/code&gt;&lt;/a&gt; for calling a function after a delay,
&lt;a href=&quot;https://nodejs.org/api/timers.html#setintervalcallback-delay-args&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;setInterval&lt;/code&gt;&lt;/a&gt; for calling a function repeatedly,
and &lt;a href=&quot;https://nodejs.org/api/timers.html#setimmediatecallback-args&quot; target=&quot;_blank&quot;&gt;&lt;code&gt;setImmediate&lt;/code&gt;&lt;/a&gt; for calling a function in the next iteration of the event loop.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;timers&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;node:timers&quot;&lt;/span&gt;&lt;span&gt;;&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;first&quot;&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;timers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTimeout&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;last&quot;&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;10&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;timers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTimeout&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;next&quot;&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;&lt;span&gt;import &lt;/span&gt;&lt;span&gt;timers&lt;/span&gt;&lt;span&gt; from &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;node:timers&quot;&lt;/span&gt;&lt;span&gt;;&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;first&quot;&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;timers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTimeout&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;last&quot;&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;10&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;timers&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;setTimeout&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&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;console&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;log&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;next&quot;&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;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;  &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;</description><pubDate>Tue, 28 Jan 2025 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>WAF - WAF Release - 2025-01-21</title><link>https://developers.cloudflare.com/changelog/post/2025-01-21-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-21-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;f4a310393c564d50bd585601b090ba9a &lt;/td&gt;&lt;td&gt;100303&lt;/td&gt;&lt;td&gt;Command Injection - Nslookup&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;&lt;p&gt;This was released as aad6f9f85e034022b6a8dee4b8d152f4 &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;fd5d5678ce594ea898aa9bf149e6b538 &lt;/td&gt;&lt;td&gt;100534&lt;/td&gt;&lt;td&gt;Web Shell Activity&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;&lt;p&gt;This was released as 39c8f6066c19466ea084e51e82fe4e7f &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Tue, 21 Jan 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Data Loss Prevention - Detect source code leaks with Data Loss Prevention</title><link>https://developers.cloudflare.com/changelog/post/2025-01-03-source-code-confidence-level/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-03-source-code-confidence-level/</guid><description>&lt;p&gt;You can now detect source code leaks with Data Loss Prevention (DLP) with predefined checks against common programming languages.&lt;/p&gt;
&lt;p&gt;The following programming languages are validated with natural language processing (NLP).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C&lt;/li&gt;
&lt;li&gt;C++&lt;/li&gt;
&lt;li&gt;C#&lt;/li&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;li&gt;Haskell&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;Lua&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;R&lt;/li&gt;
&lt;li&gt;Rust&lt;/li&gt;
&lt;li&gt;Swift&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;DLP also supports confidence level for &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/dlp-profiles/predefined-profiles/#source-code&quot;&gt;source code profiles&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more details, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/dlp-profiles/&quot;&gt;DLP profiles&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 20 Jan 2025 00:00:00 GMT</pubDate><product>Data Loss Prevention</product><category>Data Loss Prevention</category></item><item><title>Access - Export SSH command logs with Access for Infrastructure using Logpush</title><link>https://developers.cloudflare.com/changelog/post/2025-01-15-ssh-logs-and-logpush/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-15-ssh-logs-and-logpush/</guid><description>&lt;aside&gt;&lt;p&gt;Availability&lt;/p&gt;&lt;div&gt;&lt;p&gt;Only available on Enterprise plans.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;Cloudflare now allows you to send SSH command logs to storage destinations configured in &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/&quot;&gt;Logpush&lt;/a&gt;, including third-party destinations. Once exported, analyze and audit the data as best fits your organization! For a list of available data fields, refer to the &lt;a href=&quot;https://developers.cloudflare.com/logs/logpush/logpush-job/datasets/account/ssh_logs/&quot;&gt;SSH logs dataset&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To set up a Logpush job, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/logs/logpush/&quot;&gt;Logpush integration&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 15 Jan 2025 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Workflows - Increased Workflows limits and improved instance queueing.</title><link>https://developers.cloudflare.com/changelog/post/2025-01-15-workflows-more-steps/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-15-workflows-more-steps/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workflows/&quot;&gt;Workflows&lt;/a&gt; (beta) now allows you to define up to 1024 &lt;a href=&quot;https://developers.cloudflare.com/workflows/build/workers-api/#workflowstep&quot;&gt;steps&lt;/a&gt;. &lt;code&gt;sleep&lt;/code&gt; steps do not count against this limit.&lt;/p&gt;
&lt;p&gt;We&apos;ve also added:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;instanceId&lt;/code&gt; as property to the &lt;a href=&quot;https://developers.cloudflare.com/workflows/build/workers-api/#workflowevent&quot;&gt;&lt;code&gt;WorkflowEvent&lt;/code&gt;&lt;/a&gt; type, allowing you to retrieve the current instance ID from within a running Workflow instance&lt;/li&gt;
&lt;li&gt;Improved queueing logic for Workflow instances beyond the current maximum concurrent instances, reducing the cases where instances are stuck in the queued state.&lt;/li&gt;
&lt;li&gt;Support for &lt;a href=&quot;https://developers.cloudflare.com/workflows/build/workers-api/#pause&quot;&gt;&lt;code&gt;pause&lt;/code&gt; and &lt;code&gt;resume&lt;/code&gt;&lt;/a&gt; for Workflow instances in a queued state.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We&apos;re continuing to work on increases to the number of concurrent Workflow instances, steps, and support for a new &lt;code&gt;waitForEvent&lt;/code&gt; API over the coming weeks.&lt;/p&gt;</description><pubDate>Wed, 15 Jan 2025 00:00:00 GMT</pubDate><product>Workflows</product><category>Workflows</category></item><item><title>WAF - WAF Release - 2025-01-13</title><link>https://developers.cloudflare.com/changelog/post/2025-01-13-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-13-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;6e0bfbe4b9c6454c8bd7bd24f49e5840 &lt;/td&gt;&lt;td&gt;100704&lt;/td&gt;&lt;td&gt;&lt;p&gt;Cleo Harmony - Auth Bypass - CVE:CVE-2024-55956, CVE:CVE-2024-55953&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;c993997b7d904a9e89448fe6a6d43bc2 &lt;/td&gt;&lt;td&gt;100705&lt;/td&gt;&lt;td&gt;Sentry - SSRF&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;f40ce742be534ba19d610961ce6311bb &lt;/td&gt;&lt;td&gt;100706&lt;/td&gt;&lt;td&gt;Apache Struts - Remote Code Execution - CVE:CVE-2024-53677&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;67ac639a845c482d948b465b2233da1f &lt;/td&gt;&lt;td&gt;100707&lt;/td&gt;&lt;td&gt;&lt;p&gt;FortiWLM - Remote Code Execution - CVE:CVE-2023-48782,
CVE:CVE-2023-34993, CVE:CVE-2023-34990&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Managed Ruleset&lt;/td&gt;&lt;td&gt;870cca2b874d41738019d4c3e31d972a &lt;/td&gt;&lt;td&gt;100007C_BETA&lt;/td&gt;&lt;td&gt;Command Injection - Common Attack Commands&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Disabled&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 13 Jan 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>Rules - New Rules Overview Interface</title><link>https://developers.cloudflare.com/changelog/post/2025-01-09-rules-overview/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-09-rules-overview/</guid><description>&lt;p&gt;&lt;strong&gt;Rules Overview&lt;/strong&gt; gives you a single page to manage all your &lt;a href=&quot;https://developers.cloudflare.com/rules/&quot;&gt;Cloudflare Rules&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What you can do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;See all your rules in one place&lt;/strong&gt; – No more clicking around.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Find rules faster&lt;/strong&gt; – Search by name.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Understand execution order&lt;/strong&gt; – See how rules run in sequence.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Debug easily&lt;/strong&gt; – Use &lt;a href=&quot;https://developers.cloudflare.com/rules/trace-request/&quot;&gt;Trace&lt;/a&gt; without switching tabs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check it out in &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/:zone/rules/overview&quot; target=&quot;_blank&quot;&gt;Rules &gt; Overview&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 09 Jan 2025 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Cache - Smart Tiered Cache optimizes Load Balancing Pools</title><link>https://developers.cloudflare.com/changelog/post/2025-01-08-smart-tiered-cache-for-load-balancing/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-08-smart-tiered-cache-for-load-balancing/</guid><description>&lt;p&gt;You can now achieve higher cache hit rates and reduce origin load when using &lt;a href=&quot;https://developers.cloudflare.com/load-balancing/&quot;&gt;Load Balancing&lt;/a&gt; with &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/tiered-cache/&quot;&gt;Smart Tiered Cache&lt;/a&gt;. Cloudflare automatically selects a single, optimal tiered data center for all origins in your Load Balancing Pool.&lt;/p&gt;
&lt;h4&gt;How it works&lt;/h4&gt;
&lt;p&gt;When you use &lt;a href=&quot;https://developers.cloudflare.com/load-balancing/&quot;&gt;Load Balancing&lt;/a&gt; with &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/tiered-cache/&quot;&gt;Smart Tiered Cache&lt;/a&gt;, Cloudflare analyzes performance metrics across your pool&apos;s origins and automatically selects the optimal Upper Tier data center for the entire pool. This means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Consistent cache location&lt;/strong&gt;: All origins in the pool share the same Upper Tier cache.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Higher HIT rates&lt;/strong&gt;: Requests for the same content hit the cache more frequently.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduced origin requests&lt;/strong&gt;: Fewer requests reach your origin servers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved performance&lt;/strong&gt;: Faster response times for cache HITs.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Example workflow&lt;/h4&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;txt&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Load Balancing Pool: api-pool&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── Origin 1: api-1.example.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── Origin 2: api-2.example.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;└── Origin 3: api-3.example.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;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Selected Upper Tier: [Optimal data center based on pool performance]&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;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;To get started, enable &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/tiered-cache/&quot;&gt;Smart Tiered Cache&lt;/a&gt; on your zone and configure your &lt;a href=&quot;https://developers.cloudflare.com/load-balancing/&quot;&gt;Load Balancing Pool&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 08 Jan 2025 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>D1 - 40-60% Faster D1 Worker API Requests</title><link>https://developers.cloudflare.com/changelog/post/2025-01-07-d1-faster-query/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-07-d1-faster-query/</guid><description>&lt;p&gt;Users making &lt;a href=&quot;https://developers.cloudflare.com/d1/&quot;&gt;D1&lt;/a&gt; requests via the &lt;a href=&quot;https://developers.cloudflare.com/d1/worker-api/&quot;&gt;Workers API&lt;/a&gt; can see up to a 60% end-to-end latency improvement due to the removal of redundant network round trips needed for each request to a D1 database.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/faster-d1-worker-api.4S7VSUdP_1LmJ72.webp&quot; alt=&quot;D1 Worker API latency&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;em&gt;p50, p90, and p95 request latency aggregated across entire D1 service. These latencies are a reference point and should not be viewed as your exact workload improvement.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This performance improvement benefits all D1 Worker API traffic, especially cross-region requests where network latency is an outsized latency factor. For example, a user in Europe talking to a database in North America. D1 &lt;a href=&quot;https://developers.cloudflare.com/d1/configuration/data-location/#provide-a-location-hint&quot;&gt;location hints&lt;/a&gt; can be used to influence the geographic location of a database.&lt;/p&gt;
&lt;p&gt;For more details on how D1 removed redundant round trips, see the D1 specific release note &lt;a href=&quot;https://developers.cloudflare.com/d1/platform/release-notes/#2025-01-07&quot;&gt;entry&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 07 Jan 2025 00:00:00 GMT</pubDate><product>D1</product><category>D1</category></item><item><title>WAF - WAF Release - 2025-01-06</title><link>https://developers.cloudflare.com/changelog/post/2025-01-06-waf-release/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-06-waf-release/</guid><description>&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Ruleset&lt;/th&gt;&lt;th&gt;Rule ID&lt;/th&gt;&lt;th&gt;Legacy Rule ID&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Previous Action&lt;/th&gt;&lt;th&gt;New Action&lt;/th&gt;&lt;th&gt;Comments&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;3a321b10270b42549ac201009da08beb &lt;/td&gt;&lt;td&gt;100678&lt;/td&gt;&lt;td&gt;Pandora FMS - Remote Code Execution - CVE:CVE-2024-11320&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;1fe510368b4a47dda90363c2ecdf3d02 &lt;/td&gt;&lt;td&gt;100679&lt;/td&gt;&lt;td&gt;&lt;p&gt;Palo Alto Networks - Remote Code Execution - CVE:CVE-2024-0012,
CVE:CVE-2024-9474&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;b7ba636927b44ee288b9a697a40f2a35 &lt;/td&gt;&lt;td&gt;100680&lt;/td&gt;&lt;td&gt;Ivanti - Command Injection - CVE:CVE-2024-37397&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;6bd9b07c8acc4beeb17c8bee58ae3c89 &lt;/td&gt;&lt;td&gt;100681&lt;/td&gt;&lt;td&gt;Really Simple Security - Auth Bypass - CVE:CVE-2024-10924&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;c86e79e15a4a4307870f6f77e37f2da6 &lt;/td&gt;&lt;td&gt;100682&lt;/td&gt;&lt;td&gt;Magento - XXE - CVE:CVE-2024-34102&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;945f41b48be9485f953116015054c752 &lt;/td&gt;&lt;td&gt;100683&lt;/td&gt;&lt;td&gt;CyberPanel - Remote Code Execution - CVE:CVE-2024-51567&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;aec9a2e554a34a8fa547d069dfe93d7b &lt;/td&gt;&lt;td&gt;100684&lt;/td&gt;&lt;td&gt;&lt;p&gt;Microsoft SharePoint - Remote Code Execution - CVE:CVE-2024-38094,
CVE:CVE-2024-38024, CVE:CVE-2024-38023&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;e614dd46c1ce404da1909e841454c856 &lt;/td&gt;&lt;td&gt;100685&lt;/td&gt;&lt;td&gt;CyberPanel - Remote Code Execution - CVE:CVE-2024-51568&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;685a4edf68f740b4a2c80d45e92362e5 &lt;/td&gt;&lt;td&gt;100686&lt;/td&gt;&lt;td&gt;Seeyon - Remote Code Execution&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;204f9d948a124829acb86555b9f1c9f8 &lt;/td&gt;&lt;td&gt;100687&lt;/td&gt;&lt;td&gt;&lt;p&gt;WordPress - Remote Code Execution - CVE:CVE-2024-10781,
CVE:CVE-2024-10542&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;19587024724e49329d5b482d0d7ca374 &lt;/td&gt;&lt;td&gt;100688&lt;/td&gt;&lt;td&gt;ProjectSend - Remote Code Execution - CVE:CVE-2024-11680&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;fa49213e55484f6c824e0682a5260b70 &lt;/td&gt;&lt;td&gt;100689&lt;/td&gt;&lt;td&gt;&lt;p&gt;Palo Alto GlobalProtect - Remote Code Execution - CVE:CVE-2024-5921&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;11b5fc23e85b41ca90316bddd007118b &lt;/td&gt;&lt;td&gt;100690&lt;/td&gt;&lt;td&gt;Ivanti - Remote Code Execution - CVE:CVE-2024-37404&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;aaeada52bcc840598515de6cc3e49f64 &lt;/td&gt;&lt;td&gt;100691&lt;/td&gt;&lt;td&gt;Array Networks - Remote Code Execution - CVE:CVE-2023-28461&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;e2c7ce1ecd6847219f8d9aedfcc6f5bb &lt;/td&gt;&lt;td&gt;100692&lt;/td&gt;&lt;td&gt;CyberPanel - Remote Code Execution - CVE:CVE-2024-51378&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;84d481b1f49c4735afa2fb2bb615335e &lt;/td&gt;&lt;td&gt;100693&lt;/td&gt;&lt;td&gt;Symfony Profiler - Auth Bypass - CVE:CVE-2024-50340&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;9f258f463f9f4b26ad07e3c209d08c8a &lt;/td&gt;&lt;td&gt;100694&lt;/td&gt;&lt;td&gt;Citrix Virtual Apps - Remote Code Execution - CVE:CVE-2024-8069&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;b490d6edcfec4028aef45cf08aafb2f5 &lt;/td&gt;&lt;td&gt;100695&lt;/td&gt;&lt;td&gt;MSMQ Service - Remote Code Execution - CVE:CVE-2023-21554&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;c8f65bc9eeef4665820ecfe411b7a8c7 &lt;/td&gt;&lt;td&gt;100696&lt;/td&gt;&lt;td&gt;Nginxui - Remote Code Execution - CVE:CVE-2024-49368&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;d5f2e133e34640198d06d7b345954c7e &lt;/td&gt;&lt;td&gt;100697&lt;/td&gt;&lt;td&gt;&lt;p&gt;Apache ShardingSphere - Remote Code Execution - CVE:CVE-2022-22733&lt;/p&gt;&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;c34432e257074cffa9fa15f3f5311209 &lt;/td&gt;&lt;td&gt;100698&lt;/td&gt;&lt;td&gt;Mitel MiCollab - Auth Bypass - CVE:CVE-2024-41713&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cloudflare Specials&lt;/td&gt;&lt;td&gt;3bda15acd73a4b55a5f60cd2b3e5e46e &lt;/td&gt;&lt;td&gt;100699&lt;/td&gt;&lt;td&gt;Apache Solr - Auth Bypass - CVE:CVE-2024-45216&lt;/td&gt;&lt;td&gt;Log&lt;/td&gt;&lt;td&gt;Block&lt;/td&gt;&lt;td&gt;New Detection&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;</description><pubDate>Mon, 06 Jan 2025 00:00:00 GMT</pubDate><product>WAF</product><category>WAF</category></item><item><title>AI Gateway - AI Gateway adds DeepSeek as a Provider</title><link>https://developers.cloudflare.com/changelog/post/2025-01-07-aig-provider-deepseek/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-01-07-aig-provider-deepseek/</guid><description>&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot;&gt;&lt;strong&gt;AI Gateway&lt;/strong&gt;&lt;/a&gt; now supports &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/providers/deepseek/&quot;&gt;&lt;strong&gt;DeepSeek&lt;/strong&gt;&lt;/a&gt;, including their cutting-edge DeepSeek-V3 model. With this addition, you have even more flexibility to manage and optimize your AI workloads using AI Gateway. Whether you&apos;re leveraging DeepSeek or other providers, like OpenAI, Anthropic, or &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/&quot;&gt;Workers AI&lt;/a&gt;, AI Gateway empowers you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Monitor&lt;/strong&gt;: Gain actionable insights with analytics and logs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control&lt;/strong&gt;: Implement caching, rate limiting, and fallbacks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimize&lt;/strong&gt;: Improve performance with feedback and evaluations.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/deepseek.hirkr3rv_CgMEY.webp&quot; alt=&quot;AI Gateway adds DeepSeek as a provider&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To get started, simply update the base URL of your DeepSeek API calls to route through AI Gateway. Here&apos;s how you can send a request using cURL:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/deepseek/chat/completions&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;content-type: application/json&apos;&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;--header&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Authorization: Bearer DEEPSEEK_TOKEN&apos;&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;--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;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;model&quot;: &quot;deepseek-chat&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;messages&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;role&quot;: &quot;user&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;content&quot;: &quot;What is Cloudflare?&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;}&apos;&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 detailed setup instructions, see our &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/usage/providers/deepseek/&quot;&gt;DeepSeek provider documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 02 Jan 2025 00:00:00 GMT</pubDate><product>AI Gateway</product><category>AI Gateway</category></item><item><title>Workers - Faster Workers Builds with Build Caching and Watch Paths</title><link>https://developers.cloudflare.com/changelog/post/2024-12-29-faster-builds/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-12-29-faster-builds/</guid><description>&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/workers-build-caching.DWEh3Tj1_Z1HXvDQ.webp&quot; alt=&quot;Build caching settings&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/workers-build-watch-paths.ClqD-iNq_ZUCGHo.webp&quot; alt=&quot;Build watch path settings&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/&quot;&gt;&lt;strong&gt;Workers Builds&lt;/strong&gt;&lt;/a&gt;, the integrated CI/CD system for Workers (currently in beta), now lets you cache artifacts across builds, speeding up build jobs by eliminating repeated work, such as downloading dependencies at the start of each build.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/build-caching/&quot;&gt;Build Caching&lt;/a&gt;&lt;/strong&gt;: Cache dependencies and build outputs between builds with a shared project-wide cache, ensuring faster builds for the entire team.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/build-watch-paths/&quot;&gt;Build Watch Paths&lt;/a&gt;&lt;/strong&gt;: Define paths to include or exclude from the build process, ideal for &lt;a href=&quot;https://developers.cloudflare.com/workers/ci-cd/builds/advanced-setups/#monorepos&quot;&gt;monorepos&lt;/a&gt; to target only the files that need to be rebuilt per Workers project.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To get started, select your Worker on the &lt;a href=&quot;https://dash.cloudflare.com&quot; target=&quot;_blank&quot;&gt;Cloudflare dashboard&lt;/a&gt; then go to &lt;strong&gt;Settings&lt;/strong&gt; &gt; &lt;strong&gt;Builds&lt;/strong&gt;, and connect a GitHub or GitLab repository. Once connected, you&apos;ll see options to configure Build Caching and Build Watch Paths.&lt;/p&gt;</description><pubDate>Sun, 29 Dec 2024 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Email security - Escalate user submissions</title><link>https://developers.cloudflare.com/changelog/post/2024-12-19-escalate-user-submissions/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-12-19-escalate-user-submissions/</guid><description>&lt;p&gt;After you triage your users&apos; submissions (that are machine reviewed), you can now escalate them to our team for reclassification (which are instead human reviewed). User submissions from the submission alias, PhishNet, and our API can all be escalated.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/Escalate.CwXPIyM3_ZxuRN6.webp&quot; alt=&quot;Escalate&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;From &lt;strong&gt;Reclassifications&lt;/strong&gt;, go to &lt;strong&gt;User submissions&lt;/strong&gt;. Select the three dots next to any of the user submissions, then select &lt;strong&gt;Escalate&lt;/strong&gt; to create a team request for reclassification. The Cloudflare dashboard will then show you the submissions on the &lt;strong&gt;Team Submissions&lt;/strong&gt; tab.&lt;/p&gt;
&lt;p&gt;Refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/email-security/submissions/user-submissions/&quot;&gt;User submissions&lt;/a&gt; to learn more about this feature.&lt;/p&gt;
&lt;p&gt;This feature is available across these Email security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Advantage&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 19 Dec 2024 23:22:49 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>Email security - Increased transparency for phishing email submissions</title><link>https://developers.cloudflare.com/changelog/post/2024-12-19-reclassification-tab/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-12-19-reclassification-tab/</guid><description>&lt;p&gt;You now have more transparency about team and user submissions for phishing emails through a &lt;strong&gt;Reclassification&lt;/strong&gt; tab in the Zero Trust dashboard.&lt;/p&gt;
&lt;p&gt;Reclassifications happen when users or admins &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/email-security/settings/phish-submissions/&quot;&gt;submit a phish&lt;/a&gt; to Email security. Cloudflare reviews and - in some cases - reclassifies these emails based on improvements to our machine learning models.&lt;/p&gt;
&lt;p&gt;This new tab increases your visibility into this process, allowing you to view what submissions you have made and what the outcomes of those submissions are.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/reclassifications-tab.yDgtjG51_Z1TVbIE.webp&quot; alt=&quot;Use the Reclassification area to review submitted phishing emails&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;</description><pubDate>Thu, 19 Dec 2024 00:00:00 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>Cloudflare Tunnel, Cloudflare Tunnel for SASE - Troubleshoot tunnels with diagnostic logs</title><link>https://developers.cloudflare.com/changelog/post/2024-12-19-diagnostic-logs/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-12-19-diagnostic-logs/</guid><description>&lt;p&gt;The latest &lt;code&gt;cloudflared&lt;/code&gt; build &lt;a href=&quot;https://github.com/cloudflare/cloudflared/releases/tag/2024.12.2&quot; target=&quot;_blank&quot;&gt;2024.12.2&lt;/a&gt; introduces the ability to collect all the diagnostic logs needed to troubleshoot a &lt;code&gt;cloudflared&lt;/code&gt; instance.&lt;/p&gt;
&lt;p&gt;A diagnostic report collects data from a single instance of &lt;code&gt;cloudflared&lt;/code&gt; running on the local machine and outputs it to a &lt;code&gt;cloudflared-diag&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/diag-logs/&quot;&gt;Diagnostic logs&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 19 Dec 2024 00:00:00 GMT</pubDate><product>Cloudflare Tunnel</product><category>Cloudflare Tunnel</category><category>Cloudflare Tunnel for SASE</category></item><item><title>Magic Transit, Cloudflare WAN, Network Interconnect - Establish BGP peering over Direct CNI circuits</title><link>https://developers.cloudflare.com/changelog/post/2024-12-17-bgp-support-cni/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-12-17-bgp-support-cni/</guid><description>&lt;p&gt;Magic WAN and Magic Transit customers can use the Cloudflare dashboard to configure and manage BGP peering between their networks and their Magic routing table when using a Direct CNI on-ramp.&lt;/p&gt;
&lt;p&gt;Using BGP peering allows customers to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Automate the process of adding or removing networks and subnets.&lt;/li&gt;
&lt;li&gt;Take advantage of failure detection and session recovery features.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With this functionality, customers can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Establish an eBGP session between their devices and the Magic WAN / Magic Transit service when connected via CNI.&lt;/li&gt;
&lt;li&gt;Secure the session by MD5 authentication to prevent misconfigurations.&lt;/li&gt;
&lt;li&gt;Exchange routes dynamically between their devices and their Magic routing table.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/configuration/manually/how-to/configure-routes/#configure-bgp-routes&quot;&gt;Magic WAN BGP peering&lt;/a&gt; or &lt;a href=&quot;https://developers.cloudflare.com/magic-transit/how-to/configure-routes/#configure-bgp-routes&quot;&gt;Magic Transit BGP peering&lt;/a&gt; to learn more about this feature and how to set it up.&lt;/p&gt;</description><pubDate>Tue, 17 Dec 2024 00:00:00 GMT</pubDate><product>Magic Transit</product><category>Magic Transit</category><category>Cloudflare WAN</category><category>Network Interconnect</category></item><item><title>Hyperdrive - Up to 10x faster cached queries for Hyperdrive</title><link>https://developers.cloudflare.com/changelog/post/2024-12-11-hyperdrive-caching-at-edge/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-12-11-hyperdrive-caching-at-edge/</guid><description>&lt;p&gt;Hyperdrive now caches queries in all Cloudflare locations, decreasing cache hit latency by up to 90%.&lt;/p&gt;
&lt;p&gt;When you make a query to your database and Hyperdrive has cached the query results, Hyperdrive will now return the results from the nearest cache. By caching data closer to your users, the latency for cache hits reduces by up to 90%.&lt;/p&gt;
&lt;p&gt;This reduction in cache hit latency is reflected in a reduction of the session duration for all queries (cached and uncached) from Cloudflare Workers to Hyperdrive, as illustrated below.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/hyperdrive-edge-caching-metrics.BR7svphB_2kl758.webp&quot; alt=&quot;Hyperdrive edge caching improves average session duration for database queries&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;&lt;em&gt;P50, P75, and P90 Hyperdrive session latency for all client connection sessions (both cached and uncached queries) for Hyperdrive configurations with caching enabled during the rollout period.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This performance improvement is applied to all new and existing Hyperdrive configurations that have caching enabled.&lt;/p&gt;
&lt;p&gt;For more details on how Hyperdrive performs query caching, refer to the &lt;a href=&quot;https://developers.cloudflare.com/hyperdrive/concepts/how-hyperdrive-works/#3-query-caching&quot;&gt;Hyperdrive documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 11 Dec 2024 00:00:00 GMT</pubDate><product>Hyperdrive</product><category>Hyperdrive</category></item><item><title>Rules - Terraform Support for Snippets</title><link>https://developers.cloudflare.com/changelog/post/2024-12-11-terraform-snippets/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-12-11-terraform-snippets/</guid><description>&lt;p&gt;Now, you can manage &lt;a href=&quot;https://developers.cloudflare.com/rules/snippets/&quot;&gt;Cloudflare Snippets&lt;/a&gt; with &lt;a href=&quot;https://developers.cloudflare.com/terraform/&quot;&gt;Terraform&lt;/a&gt;. Use infrastructure-as-code to deploy and update Snippet code and rules without manual changes in the dashboard.&lt;/p&gt;
&lt;p&gt;Example Terraform configuration:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;tf&quot;&gt;&lt;code class=&quot;language-tf&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_snippet&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_snippet&quot;&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;zone_id&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;#x3C;ZONE_ID&gt;&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;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_test_snippet_1&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;main_module&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;file1.js&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;files&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;name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;file1.js&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;content&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;file1.js&quot;&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;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;resource&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare_snippet_rules&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cookie_snippet_rule&quot;&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;zone_id&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&amp;#x3C;ZONE_ID&gt;&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;rules&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;enabled&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;expression&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;http.cookie eq &lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;a=b&lt;/span&gt;&lt;span&gt;\&quot;&lt;/span&gt;&lt;span&gt;&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;description&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Trigger snippet on specific cookie&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;snippet_name&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;my_test_snippet_1&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;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;depends_on&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;span&gt;&lt;span&gt;cloudflare_snippet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;my_snippet&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;Learn more in the &lt;a href=&quot;https://developers.cloudflare.com/rules/snippets/create-terraform/&quot;&gt;Configure Snippets using Terraform&lt;/a&gt; documentation.&lt;/p&gt;</description><pubDate>Wed, 11 Dec 2024 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Multi-Cloud Networking - Generate customized terraform files for building cloud network on-ramps</title><link>https://developers.cloudflare.com/changelog/post/2024-12-05-cloud-onramp-terraform/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-12-05-cloud-onramp-terraform/</guid><description>&lt;p&gt;You can now generate customized terraform files for building cloud network on-ramps to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/&quot;&gt;Magic WAN&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.cloudflare.com/multi-cloud-networking/&quot;&gt;Magic Cloud&lt;/a&gt; can scan and discover existing network resources and generate the required terraform files to automate cloud resource deployment using their existing infrastructure-as-code workflows for cloud automation.&lt;/p&gt;
&lt;p&gt;You might want to do this to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Review the proposed configuration for an on-ramp before deploying it with Cloudflare.&lt;/li&gt;
&lt;li&gt;Deploy the on-ramp using your own infrastructure-as-code pipeline instead of deploying it with Cloudflare.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more details, refer to &lt;a href=&quot;https://developers.cloudflare.com/multi-cloud-networking/cloud-on-ramps/#set-up-with-terraform&quot;&gt;Set up with Terraform&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 05 Dec 2024 00:00:00 GMT</pubDate><product>Multi-Cloud Networking</product><category>Multi-Cloud Networking</category></item><item><title>CASB - Find security misconfigurations in your AWS cloud environment</title><link>https://developers.cloudflare.com/changelog/post/2024-11-22-cloud-data-extraction-aws/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-11-22-cloud-data-extraction-aws/</guid><description>&lt;p&gt;You can now use CASB to find security misconfigurations in your AWS cloud environment using &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/&quot;&gt;Data Loss Prevention&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can also &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/integrations/cloud-and-saas/aws-s3/#compute-account&quot;&gt;connect your AWS compute account&lt;/a&gt; to extract and scan your S3 buckets for sensitive data while avoiding egress fees. CASB will scan any objects that exist in the bucket at the time of configuration.&lt;/p&gt;
&lt;p&gt;To connect a compute account to your AWS integration:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;a href=&quot;https://one.dash.cloudflare.com&quot; target=&quot;_blank&quot;&gt;Cloudflare One&lt;/a&gt;, go to &lt;strong&gt;Cloud &amp;#x26; SaaS findings&lt;/strong&gt; &gt; &lt;strong&gt;Integrations&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Find and select your AWS integration.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Open connection instructions&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Follow the instructions provided to connect a new compute account.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Refresh&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;</description><pubDate>Fri, 22 Nov 2024 00:00:00 GMT</pubDate><product>CASB</product><category>CASB</category></item><item><title>Rules - Cloud Connector Now Supports R2</title><link>https://developers.cloudflare.com/changelog/post/2024-11-22-cloud-connector-r2/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-11-22-cloud-connector-r2/</guid><description>&lt;p&gt;Now, you can use &lt;a href=&quot;https://developers.cloudflare.com/rules/cloud-connector/&quot;&gt;Cloud Connector&lt;/a&gt; to route traffic to your &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;R2 buckets&lt;/a&gt; based on URLs, headers, geolocation, and more.&lt;/p&gt;
&lt;p&gt;Example setup:&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;curl&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--request&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;PUT&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;&quot;https://api.cloudflare.com/client/v4/zones/{zone_id}/cloud_connector/rules&quot;&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;--header &lt;/span&gt;&lt;span&gt;&quot;Authorization: Bearer &amp;#x3C;API_TOKEN&gt;&quot;&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;--header &lt;/span&gt;&lt;span&gt;&quot;Content-Type: application/json&quot;&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;--data &lt;/span&gt;&lt;span&gt;&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;&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;expression&quot;: &quot;http.request.uri.path wildcard \&quot;/images/*\&quot;&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;provider&quot;: &quot;cloudflare_r2&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;description&quot;: &quot;Connect to R2 bucket containing images&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;parameters&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;host&quot;: &quot;mybucketcustomdomain.example.com&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;]&apos;&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 using &lt;a href=&quot;https://developers.cloudflare.com/rules/cloud-connector/&quot;&gt;Cloud Connector&lt;/a&gt; documentation.&lt;/p&gt;</description><pubDate>Fri, 22 Nov 2024 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Browser Isolation - Improved non-English keyboard support</title><link>https://developers.cloudflare.com/changelog/post/2024-11-21-non-english-keyboard/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-11-21-non-english-keyboard/</guid><description>&lt;p&gt;You can now type in languages that use diacritics (like á or ç) and character-based scripts (such as Chinese, Japanese, and Korean) directly within the remote browser. The isolated browser now properly recognizes non-English keyboard input, eliminating the need to copy and paste content from a local browser or device.&lt;/p&gt;</description><pubDate>Thu, 21 Nov 2024 00:00:00 GMT</pubDate><product>Browser Isolation</product><category>Browser Isolation</category></item><item><title>Cache - Smart Tiered Cache automatically optimizes R2 caching</title><link>https://developers.cloudflare.com/changelog/post/2024-11-20-smart-tiered-cache-for-r2/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-11-20-smart-tiered-cache-for-r2/</guid><description>&lt;p&gt;You can now reduce latency and lower R2 egress costs automatically when using &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/tiered-cache/&quot;&gt;Smart Tiered Cache&lt;/a&gt; with &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;R2&lt;/a&gt;. Cloudflare intelligently selects a tiered data center close to your R2 bucket location, creating an efficient caching topology without additional configuration.&lt;/p&gt;
&lt;h4&gt;How it works&lt;/h4&gt;
&lt;p&gt;When you enable &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/tiered-cache/&quot;&gt;Smart Tiered Cache&lt;/a&gt; for zones using &lt;a href=&quot;https://developers.cloudflare.com/r2/&quot;&gt;R2&lt;/a&gt; as an origin, Cloudflare automatically:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Identifies your R2 bucket location&lt;/strong&gt;: Determines the geographical region where your R2 bucket is stored.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Selects an optimal Upper Tier&lt;/strong&gt;: Chooses a data center close to your bucket as the common Upper Tier cache.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Routes requests efficiently&lt;/strong&gt;: All cache misses in edge locations route through this Upper Tier before reaching R2.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Benefits&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Automatic optimization&lt;/strong&gt;: No manual configuration required.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lower egress costs&lt;/strong&gt;: Fewer requests to R2 reduce egress charges.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved hit ratio&lt;/strong&gt;: Common Upper Tier increases cache efficiency.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reduced latency&lt;/strong&gt;: Upper Tier proximity to R2 minimizes fetch times.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;To get started, enable &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/tiered-cache/&quot;&gt;Smart Tiered Cache&lt;/a&gt; on your zone using R2 as an origin.&lt;/p&gt;</description><pubDate>Wed, 20 Nov 2024 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>Workers - Bypass caching for subrequests made from Cloudflare Workers, with Request.cache</title><link>https://developers.cloudflare.com/changelog/post/2024-11-11-cache-no-store/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-11-11-cache-no-store/</guid><description>&lt;p&gt;You can now use the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/request/#options&quot;&gt;&lt;code&gt;cache&lt;/code&gt;&lt;/a&gt; property of the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/request/&quot;&gt;&lt;code&gt;Request&lt;/code&gt;&lt;/a&gt; interface to bypass &lt;a href=&quot;https://developers.cloudflare.com/workers/reference/how-the-cache-works/&quot;&gt;Cloudflare&apos;s cache&lt;/a&gt; when making subrequests from &lt;a href=&quot;https://developers.cloudflare.com/workers&quot;&gt;Cloudflare Workers&lt;/a&gt;, by setting its value to &lt;code&gt;no-store&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;JavaScript&lt;/p&gt;&lt;div&gt;  &lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://cloudflare.com&quot;&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;cache&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;no-store&quot;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&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;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;TypeScript&lt;/p&gt;&lt;div&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;export&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;default&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;async&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;req&lt;/span&gt;&lt;span&gt;,&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;span&gt;ctx&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Promise&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Response&lt;/span&gt;&lt;span&gt;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;request&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Request&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;https://cloudflare.com&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;span&gt; cache&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;no-store&apos;&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;const&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;await&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;fetch&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;request&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;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;response&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;satisfies&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ExportedHandler&lt;/span&gt;&lt;span&gt;&amp;#x3C;&lt;/span&gt;&lt;span&gt;Environment&lt;/span&gt;&lt;span&gt;&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;/div&gt;&lt;/li&gt;&lt;/ul&gt;  
&lt;p&gt;When you set the value to &lt;code&gt;no-store&lt;/code&gt; on a subrequest made from a Worker, the Cloudflare Workers runtime will not check whether a match exists in the cache, and not add the response to the cache, even if the response includes directives in the &lt;code&gt;Cache-Control&lt;/code&gt; HTTP header that otherwise indicate that the response is cacheable.&lt;/p&gt;
&lt;p&gt;This increases compatibility with NPM packages and JavaScript frameworks that rely on setting the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/request/#options&quot;&gt;&lt;code&gt;cache&lt;/code&gt;&lt;/a&gt; property, which is a cross-platform standard part of the &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/request/&quot;&gt;&lt;code&gt;Request&lt;/code&gt;&lt;/a&gt; interface. Previously, if you set the &lt;code&gt;cache&lt;/code&gt; property on &lt;code&gt;Request&lt;/code&gt;, the Workers runtime threw an exception.&lt;/p&gt;
&lt;p&gt;If you&apos;ve tried to use &lt;code&gt;@planetscale/database&lt;/code&gt;, &lt;code&gt;redis-js&lt;/code&gt;, &lt;code&gt;stytch-node&lt;/code&gt;, &lt;code&gt;supabase&lt;/code&gt;, &lt;code&gt;axiom-js&lt;/code&gt; or have seen the error message &lt;code&gt;The cache field on RequestInitializerDict is not implemented in fetch&lt;/code&gt; — you should try again, making sure that the &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/compatibility-dates/&quot;&gt;Compatibility Date&lt;/a&gt; of your Worker is set to on or after &lt;code&gt;2024-11-11&lt;/code&gt;, or the &lt;a href=&quot;https://developers.cloudflare.com/workers/configuration/compatibility-flags/#enable-cache-no-store-http-standard-api&quot;&gt;&lt;code&gt;cache_option_enabled&lt;/code&gt; compatibility flag&lt;/a&gt; is enabled for your Worker.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn &lt;a href=&quot;https://developers.cloudflare.com/workers/reference/how-the-cache-works/&quot;&gt;how the Cache works with Cloudflare Workers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Enable &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/nodejs/&quot;&gt;Node.js compatibility&lt;/a&gt; for your Cloudflare Worker&lt;/li&gt;
&lt;li&gt;Explore &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/&quot;&gt;Runtime APIs&lt;/a&gt; and &lt;a href=&quot;https://developers.cloudflare.com/workers/runtime-apis/bindings/&quot;&gt;Bindings&lt;/a&gt; available in Cloudflare Workers&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Mon, 11 Nov 2024 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category></item><item><title>Email security - Use Logpush for Email security user actions</title><link>https://developers.cloudflare.com/changelog/post/2024-11-07-logpush-user-actions/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-11-07-logpush-user-actions/</guid><description>&lt;p&gt;You can now send user action logs for Email security to an endpoint of your choice with Cloudflare Logpush.&lt;/p&gt;
&lt;p&gt;Filter logs matching specific criteria you have set or select from multiple fields you want to send. For all users, we will log the date and time, user ID, IP address, details about the message they accessed, and what actions they took.&lt;/p&gt;
&lt;p&gt;When creating a new Logpush job, remember to select &lt;strong&gt;Audit logs&lt;/strong&gt; as the dataset and filter by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Field&lt;/strong&gt;: &lt;code&gt;&quot;ResourceType&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Operator&lt;/strong&gt;: &lt;code&gt;&quot;starts with&quot;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Value&lt;/strong&gt;: &lt;code&gt;&quot;email_security&quot;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/Logpush-User-Actions.D14fWgmq_CYM35.webp&quot; alt=&quot;Logpush-user-actions&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;For more information, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/logs/logpush/email-security-logs/#enable-user-action-logs&quot;&gt;Enable user action logs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This feature is available across all Email security packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enterprise + PhishGuard&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 07 Nov 2024 23:22:49 GMT</pubDate><product>Email security</product><category>Email security</category></item><item><title>Cache - Stage and test cache configurations safely</title><link>https://developers.cloudflare.com/changelog/post/2024-11-07-cache-versioning/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-11-07-cache-versioning/</guid><description>&lt;p&gt;You can now stage and test cache configurations before deploying them to production. Versioned environments let you safely validate cache rules, purge operations, and configuration changes without affecting live traffic.&lt;/p&gt;
&lt;h4&gt;How it works&lt;/h4&gt;
&lt;p&gt;With versioned environments, you can:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Create staging versions&lt;/strong&gt; of your cache configuration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Test cache rules&lt;/strong&gt; in a non-production environment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Purge staged content&lt;/strong&gt; independently from production.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validate changes&lt;/strong&gt; before promoting to production.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This capability integrates with Cloudflare&apos;s broader &lt;a href=&quot;https://developers.cloudflare.com/version-management/&quot;&gt;versioning system&lt;/a&gt;, allowing you to manage cache configurations alongside other zone settings.&lt;/p&gt;
&lt;h4&gt;Benefits&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Risk-free testing&lt;/strong&gt;: Validate configuration changes without impacting production.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Independent purging&lt;/strong&gt;: Clear staging cache without affecting live content.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deployment confidence&lt;/strong&gt;: Catch issues before they reach end users.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Team collaboration&lt;/strong&gt;: Multiple team members can work on different versions.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;To get started, refer to the &lt;a href=&quot;https://developers.cloudflare.com/version-management/&quot;&gt;version management documentation&lt;/a&gt;.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;Important limitation&lt;/p&gt;&lt;div&gt;&lt;p&gt;Cache Reserve is only supported for your production environment. Staged environments can use standard cache functionality, but Cache Reserve persistence is limited to production deployments.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;</description><pubDate>Thu, 07 Nov 2024 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>Cache - Shard cache using custom cache key values</title><link>https://developers.cloudflare.com/changelog/post/2024-11-07-shard-cache-by-cache-key/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-11-07-shard-cache-by-cache-key/</guid><description>&lt;p&gt;Enterprise customers can now optimize cache hit ratios for content that varies by device, language, or referrer by &lt;strong&gt;sharding cache&lt;/strong&gt; using up to ten values from previously restricted headers with &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/cache-keys/&quot;&gt;custom cache keys&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;How it works&lt;/h4&gt;
&lt;p&gt;When configuring &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/cache-keys/&quot;&gt;custom cache keys&lt;/a&gt;, you can now include values from these headers to create distinct cache entries:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;accept*&lt;/code&gt; headers&lt;/strong&gt; (for example, &lt;code&gt;accept&lt;/code&gt;, &lt;code&gt;accept-encoding&lt;/code&gt;, &lt;code&gt;accept-language&lt;/code&gt;): Serve different cached versions based on content negotiation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;referer&lt;/code&gt; header&lt;/strong&gt;: Cache content differently based on the referring page or site.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;user-agent&lt;/code&gt; header&lt;/strong&gt;: Maintain separate caches for different browsers, devices, or bots.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;When to use cache sharding&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Content varies significantly by device type (mobile vs desktop).&lt;/li&gt;
&lt;li&gt;Different language or encoding preferences require distinct responses.&lt;/li&gt;
&lt;li&gt;Referrer-specific content optimization is needed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Example configuration&lt;/h4&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code class=&quot;language-json&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;cache_key&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;custom_key&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;header&lt;/span&gt;&lt;span&gt;&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;include&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;accept-language&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;user-agent&quot;&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;&quot;&lt;/span&gt;&lt;span&gt;check_presence&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;referer&quot;&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;This configuration creates separate cache entries based on the &lt;code&gt;accept-language&lt;/code&gt; and &lt;code&gt;user-agent&lt;/code&gt; headers, while also considering whether the &lt;code&gt;referer&lt;/code&gt; header is present.&lt;/p&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;To get started, refer to the &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/cache-keys/&quot;&gt;custom cache keys documentation&lt;/a&gt;.&lt;/p&gt;
&lt;aside&gt;&lt;p&gt;Note&lt;/p&gt;&lt;div&gt;&lt;p&gt;While cache sharding can improve hit ratios for specific use cases, overly sharding your cache can reduce overall cache efficiency and negatively impact performance. Carefully evaluate whether sharding benefits your specific traffic patterns.&lt;/p&gt;&lt;/div&gt;&lt;/aside&gt;</description><pubDate>Thu, 07 Nov 2024 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>Workers, Workflows - Workflows is now in open beta</title><link>https://developers.cloudflare.com/changelog/post/2024-10-24-workflows-beta/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-10-24-workflows-beta/</guid><description>&lt;p&gt;Workflows is now in open beta, and available to any developer a free or paid Workers plan.&lt;/p&gt;
&lt;p&gt;Workflows allow you to build multi-step applications that can automatically retry, persist state and run for minutes, hours, days, or weeks. Workflows introduces a programming model that makes it easier to build reliable, long-running tasks, observe as they progress, and programmatically trigger instances based on events across your services.&lt;/p&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;You can get started with Workflows by &lt;a href=&quot;https://developers.cloudflare.com/workflows/get-started/guide/&quot;&gt;following our get started guide&lt;/a&gt; and/or using &lt;code&gt;npm create cloudflare&lt;/code&gt; to pull down the starter project:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;npm&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;cloudflare@latest&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;workflows-starter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--template&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;cloudflare/workflows-starter&quot;&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;You can open the &lt;code&gt;src/index.ts&lt;/code&gt; file, extend it, and use &lt;code&gt;wrangler deploy&lt;/code&gt; to deploy your first Workflow. From there, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn the &lt;a href=&quot;https://developers.cloudflare.com/workflows/build/workers-api/&quot;&gt;Workflows API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/workflows/build/trigger-workflows/&quot;&gt;Trigger Workflows&lt;/a&gt; via your Workers apps.&lt;/li&gt;
&lt;li&gt;Understand the &lt;a href=&quot;https://developers.cloudflare.com/workflows/build/rules-of-workflows/&quot;&gt;Rules of Workflows&lt;/a&gt; and how to adopt best practices&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Thu, 24 Oct 2024 00:00:00 GMT</pubDate><product>Workers</product><category>Workers</category><category>Workflows</category></item><item><title>Rules - Simplified UI for URL Rewrites</title><link>https://developers.cloudflare.com/changelog/post/2024-10-23-url-rewrites-wildcard/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-10-23-url-rewrites-wildcard/</guid><description>&lt;p&gt;It’s now easy to create &lt;strong&gt;wildcard-based &lt;a href=&quot;https://developers.cloudflare.com/rules/transform/url-rewrite/&quot;&gt;URL Rewrites&lt;/a&gt;&lt;/strong&gt;. No need for complex functions—just define your patterns and go.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/create-url-rewrite-rule.DIgpB8IB_ZNTjfK.webp&quot; alt=&quot;Rules Overview Interface&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;What’s improved:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Full wildcard support&lt;/strong&gt; – Create rewrite patterns using intuitive interface.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simplified rule creation&lt;/strong&gt; – No need for complex functions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Try it via &lt;a href=&quot;https://developers.cloudflare.com/rules/transform/url-rewrite/create-dashboard/#wildcard-pattern-parameters&quot;&gt;creating a Rewrite URL rule in the dashboard&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Wed, 23 Oct 2024 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Logs - New fields added to Gateway-related datasets in Cloudflare Logs</title><link>https://developers.cloudflare.com/changelog/post/2024-10-08-new-gateway-fields/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-10-08-new-gateway-fields/</guid><description>&lt;p&gt;Cloudflare has introduced new fields to two Gateway-related datasets in Cloudflare Logs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Gateway HTTP&lt;/strong&gt;: &lt;code&gt;ApplicationIDs&lt;/code&gt;, &lt;code&gt;ApplicationNames&lt;/code&gt;, &lt;code&gt;CategoryIDs&lt;/code&gt;, &lt;code&gt;CategoryNames&lt;/code&gt;, &lt;code&gt;DestinationIPContinentCode&lt;/code&gt;, &lt;code&gt;DestinationIPCountryCode&lt;/code&gt;, &lt;code&gt;ProxyEndpoint&lt;/code&gt;, &lt;code&gt;SourceIPContinentCode&lt;/code&gt;, &lt;code&gt;SourceIPCountryCode&lt;/code&gt;, &lt;code&gt;VirtualNetworkID&lt;/code&gt;, and &lt;code&gt;VirtualNetworkName&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Gateway Network&lt;/strong&gt;: &lt;code&gt;ApplicationIDs&lt;/code&gt;, &lt;code&gt;ApplicationNames&lt;/code&gt;, &lt;code&gt;DestinationIPContinentCode&lt;/code&gt;, &lt;code&gt;DestinationIPCountryCode&lt;/code&gt;, &lt;code&gt;ProxyEndpoint&lt;/code&gt;, &lt;code&gt;SourceIPContinentCode&lt;/code&gt;, &lt;code&gt;SourceIPCountryCode&lt;/code&gt;, &lt;code&gt;TransportProtocol&lt;/code&gt;, &lt;code&gt;VirtualNetworkID&lt;/code&gt;, and &lt;code&gt;VirtualNetworkName&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Tue, 08 Oct 2024 00:00:00 GMT</pubDate><product>Logs</product><category>Logs</category></item><item><title>Cloudflare Network Firewall - Search for custom rules using rule name and/or ID</title><link>https://developers.cloudflare.com/changelog/post/2024-10-02-custom-rule-search/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-10-02-custom-rule-search/</guid><description>&lt;p&gt;The Magic Firewall dashboard now allows you to search custom rules using the rule name and/or ID.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Log into the &lt;a href=&quot;https://dash.cloudflare.com&quot; target=&quot;_blank&quot;&gt;Cloudflare dashboard&lt;/a&gt; and select your account.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Analytics &amp;#x26; Logs&lt;/strong&gt; &gt; &lt;strong&gt;Network Analytics&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Magic Firewall&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Add a filter for &lt;strong&gt;Rule ID&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/search-with-rule-id.DJgzqgKk_2jJ9x8.webp&quot; alt=&quot;Search for firewall rules with rule IDs&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Additionally, the rule ID URL link has been added to Network Analytics.&lt;/p&gt;</description><pubDate>Wed, 02 Oct 2024 00:00:00 GMT</pubDate><product>Cloudflare Network Firewall</product><category>Cloudflare Network Firewall</category></item><item><title>Access - Eliminate long-lived credentials and enhance SSH security with Cloudflare Access for Infrastructure</title><link>https://developers.cloudflare.com/changelog/post/2024-10-01-ssh-with-access-for-infrastructure/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-10-01-ssh-with-access-for-infrastructure/</guid><description>&lt;p&gt;Organizations can now eliminate long-lived credentials from their SSH setup and enable strong multi-factor authentication for SSH access, similar to other Access applications, all while generating access and command logs.&lt;/p&gt;
&lt;p&gt;SSH with &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/applications/non-http/infrastructure-apps/&quot;&gt;Access for Infrastructure&lt;/a&gt; uses short-lived SSH certificates from Cloudflare, eliminating SSH key management and reducing the security risks associated with lost or stolen keys. It also leverages a common deployment model for Cloudflare One customers: &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/ssh/ssh-device-client/&quot;&gt;WARP-to-Tunnel&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;SSH with Access for Infrastructure enables you to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Author fine-grained policy&lt;/strong&gt; to control who may access your SSH servers, including specific ports, protocols, and SSH users.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitor infrastructure access&lt;/strong&gt; with Access and SSH command logs, supporting regulatory compliance and providing visibility in case of security breach.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preserve your end users&apos; workflows.&lt;/strong&gt; SSH with Access for Infrastructure supports native SSH clients and does not require any modifications to users’ SSH configs.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/infrastructure-app.BhpJOgxs_Z1M0wLH.webp&quot; alt=&quot;Example of an infrastructure Access application&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To get started, refer to &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/ssh/ssh-infrastructure-access/&quot;&gt;SSH with Access for Infrastructure&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 01 Oct 2024 00:00:00 GMT</pubDate><product>Access</product><category>Access</category></item><item><title>Network Flow - Try out Magic Network Monitoring</title><link>https://developers.cloudflare.com/changelog/post/2024-09-24-magic-network-monitoring/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-09-24-magic-network-monitoring/</guid><description>&lt;p&gt;The free version of Magic Network Monitoring (MNM) is now available to everyone with a Cloudflare account by default.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Log in to your &lt;a href=&quot;https://dash.cloudflare.com&quot; target=&quot;_blank&quot;&gt;Cloudflare dashboard&lt;/a&gt;, and select your account.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Analytics &amp;#x26; Logs&lt;/strong&gt; &gt; &lt;strong&gt;Magic Monitoring&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/get-started.D7KXWcs4_Z1KOQrC.webp&quot; alt=&quot;Try out the free version of Magic Network Monitoring&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;For more details, refer to the &lt;a href=&quot;https://developers.cloudflare.com/network-flow/get-started/&quot;&gt;Get started guide&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Tue, 24 Sep 2024 00:00:00 GMT</pubDate><product>Network Flow</product><category>Network Flow</category></item><item><title>AI Crawl Control - AI Crawl Control</title><link>https://developers.cloudflare.com/changelog/post/2024-09-23-ai-audit-launch/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-09-23-ai-audit-launch/</guid><description>&lt;p&gt;Every site on Cloudflare now has access to &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/&quot;&gt;&lt;strong&gt;AI Audit&lt;/strong&gt;&lt;/a&gt;, which summarizes the crawling behavior of popular and known AI services.&lt;/p&gt;
&lt;p&gt;You can use this data to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understand how and how often crawlers access your site (and which content is the most popular).&lt;/li&gt;
&lt;li&gt;Block specific AI bots accessing your site.&lt;/li&gt;
&lt;li&gt;Use Cloudflare to enforce your &lt;code&gt;robots.txt&lt;/code&gt; policy via an automatic WAF rule.&lt;/li&gt;
&lt;/ul&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/ai-crawl-control-overview.Dr_yGKOC_ZRyCQG.webp&quot; alt=&quot;View AI bot activity with AI Audit&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;To get started, explore &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/&quot;&gt;AI audit&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 23 Sep 2024 00:00:00 GMT</pubDate><product>AI Crawl Control</product><category>AI Crawl Control</category></item><item><title>Cache - One-click Cache Rules templates now available</title><link>https://developers.cloudflare.com/changelog/post/2024-09-05-cache-rules-templates/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-09-05-cache-rules-templates/</guid><description>&lt;p&gt;You can now create optimized cache rules instantly with &lt;strong&gt;one-click templates&lt;/strong&gt;, eliminating the complexity of manual rule configuration.&lt;/p&gt;
&lt;h4&gt;How it works&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;Navigate to &lt;strong&gt;Rules&lt;/strong&gt; &gt; &lt;strong&gt;Templates&lt;/strong&gt; in your Cloudflare dashboard.&lt;/li&gt;
&lt;li&gt;Select a template for your use case.&lt;/li&gt;
&lt;li&gt;Click to apply the template with sensible defaults.&lt;/li&gt;
&lt;li&gt;Customize as needed for your specific requirements.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Available cache templates&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Cache everything&lt;/strong&gt;: Adjust the cache level for all requests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bypass cache for everything&lt;/strong&gt;: Bypass cache for all requests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cache default file extensions&lt;/strong&gt;: Replicate Page Rules caching behavior by making only default extensions eligible for cache.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bypass cache on cookie&lt;/strong&gt;: Bypass cache for requests containing specific cookies.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set edge cache time&lt;/strong&gt;: Cache responses with status code between 200 and 599 on the Cloudflare edge.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set browser cache time&lt;/strong&gt;: Adjust how long a browser should cache a resource.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;To get started, go to &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/:zone/caching/cache-rules&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Rules &gt; Templates&lt;/strong&gt;&lt;/a&gt; in the dashboard. For more information, refer to the &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/cache-rules/&quot;&gt;Cache Rules documentation&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 05 Sep 2024 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>Rules - New Rules Templates for One-Click Rule Creation</title><link>https://developers.cloudflare.com/changelog/post/2024-09-05-rules-templates/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-09-05-rules-templates/</guid><description>&lt;p&gt;Now, you can create &lt;strong&gt;common rule configurations&lt;/strong&gt; in just &lt;strong&gt;one click&lt;/strong&gt; using Rules Templates.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/rules-templates.DAV0GOXF_Z2wOoyL.webp&quot; alt=&quot;Rules Templates&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;What you can do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pick a pre-built rule&lt;/strong&gt; – Choose from a library of templates.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One-click setup&lt;/strong&gt; – Deploy best practices instantly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Customize as needed&lt;/strong&gt; – Adjust templates to fit your setup.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Template cards are now also available directly in the rule builder for each product.&lt;/p&gt;
&lt;p&gt;Need more ideas? Check out the &lt;a href=&quot;https://developers.cloudflare.com/rules/examples/&quot;&gt;Examples gallery&lt;/a&gt; in our documentation.&lt;/p&gt;</description><pubDate>Thu, 05 Sep 2024 00:00:00 GMT</pubDate><product>Rules</product><category>Rules</category></item><item><title>Cache - Regionalized Generic Tiered Cache for higher hit ratios</title><link>https://developers.cloudflare.com/changelog/post/2024-07-19-regionalized-generic-tiered-cache/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-07-19-regionalized-generic-tiered-cache/</guid><description>&lt;p&gt;You can now achieve higher cache hit ratios with &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/tiered-cache/#generic-global-tiered-cache&quot;&gt;Generic Global Tiered Cache&lt;/a&gt;. Regional content hashing routes content consistently to the same upper-tier data centers, eliminating redundant caching and reducing origin load.&lt;/p&gt;
&lt;h4&gt;How it works&lt;/h4&gt;
&lt;p&gt;Regional content hashing groups data centers by region and uses consistent hashing to route content to designated upper-tier caches:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Same content always routes to the same upper-tier data center within a region.&lt;/li&gt;
&lt;li&gt;Eliminates redundant copies across multiple upper-tier caches.&lt;/li&gt;
&lt;li&gt;Increases the likelihood of cache HITs for the same content.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Example&lt;/h4&gt;
&lt;p&gt;A popular image requested from multiple edge locations in a region:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Before&lt;/strong&gt;: Cached at 3-4 different upper-tier data centers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;After&lt;/strong&gt;: Cached at 1 designated upper-tier data center&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Result&lt;/strong&gt;: 3-4x fewer cache MISSes, reducing origin load and improving performance&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Get started&lt;/h4&gt;
&lt;p&gt;To get started, enable &lt;a href=&quot;https://developers.cloudflare.com/cache/how-to/tiered-cache/#generic-global-tiered-cache&quot;&gt;Generic Global Tiered Cache&lt;/a&gt; on your zone.&lt;/p&gt;</description><pubDate>Fri, 19 Jul 2024 00:00:00 GMT</pubDate><product>Cache</product><category>Cache</category></item><item><title>Risk Score - Exchange user risk scores with Okta</title><link>https://developers.cloudflare.com/changelog/post/2024-06-17-okta-risk-exchange/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-06-17-okta-risk-exchange/</guid><description>&lt;p&gt;Beyond the controls in &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/&quot;&gt;Zero Trust&lt;/a&gt;, you can now &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/team-and-resources/users/risk-score/#send-risk-score-to-okta&quot;&gt;exchange user risk scores&lt;/a&gt; with Okta to inform SSO-level policies.&lt;/p&gt;
&lt;p&gt;First, configure Cloudflare One to send user risk scores to Okta.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set up the &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/integrations/identity-providers/okta/&quot;&gt;Okta SSO integration&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;In &lt;a href=&quot;https://one.dash.cloudflare.com/&quot; target=&quot;_blank&quot;&gt;Cloudflare One&lt;/a&gt;, go to &lt;strong&gt;Integrations&lt;/strong&gt; &gt; &lt;strong&gt;Identity providers&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Your identity providers&lt;/strong&gt;, locate your Okta integration and select &lt;strong&gt;Edit&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Turn on &lt;strong&gt;Send risk score to Okta&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Upon saving, Cloudflare One will display the well-known URL for your organization. Copy the value.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Next, configure Okta to receive your risk scores.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;On your Okta admin dashboard, go to &lt;strong&gt;Security&lt;/strong&gt; &gt; &lt;strong&gt;Device Integrations&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Receive shared signals&lt;/strong&gt;, then select &lt;strong&gt;Create stream&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Name your integration. In &lt;strong&gt;Set up integration with&lt;/strong&gt;, choose &lt;em&gt;Well-known URL&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Well-known URL&lt;/strong&gt;, enter the well-known URL value provided by Cloudflare One.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;</description><pubDate>Mon, 17 Jun 2024 00:00:00 GMT</pubDate><product>Risk Score</product><category>Risk Score</category></item><item><title>Access, Browser Isolation, CASB, Cloudflare Tunnel for SASE, Digital Experience Monitoring, Data Loss Prevention, Email security, Gateway, Multi-Cloud Networking, Cloudflare Network Firewall, Network Flow, Magic Transit, Cloudflare WAN, Network Interconnect, Risk Score, Cloudflare One Client - Explore product updates for Cloudflare One</title><link>https://developers.cloudflare.com/changelog/post/2024-06-16-cloudflare-one/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2024-06-16-cloudflare-one/</guid><description>&lt;p&gt;Welcome to your new home for product updates on &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/&quot;&gt;Cloudflare One&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Our &lt;a href=&quot;https://developers.cloudflare.com/changelog/&quot;&gt;new changelog&lt;/a&gt; lets you read about changes in much more depth, offering in-depth examples, images, code samples, and even gifs.&lt;/p&gt;
&lt;p&gt;If you are looking for older product updates, refer to the following locations.&lt;/p&gt;
&lt;details&gt; &lt;summary&gt;&lt;p&gt;Older product updates&lt;/p&gt;
&lt;/summary&gt; &lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/changelog/access/&quot;&gt;Access&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/changelog/browser-isolation/&quot;&gt;Browser Isolation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/changelog/casb/&quot;&gt;CASB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/changelog/tunnel/&quot;&gt;Cloudflare Tunnel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/changelog/dlp/&quot;&gt;Data Loss Prevention&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/changelog/dex/&quot;&gt;Digital Experience Monitoring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/changelog/email-security/&quot;&gt;Email security&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/changelog/gateway/&quot;&gt;Gateway&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/multi-cloud-networking/changelog/&quot;&gt;Multi-Cloud Networking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-network-firewall/changelog/&quot;&gt;Cloudflare Network Firewall&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/network-flow/changelog/&quot;&gt;Magic Network Monitoring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/magic-transit/changelog/&quot;&gt;Magic Transit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-wan/changelog/&quot;&gt;Magic WAN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/network-interconnect/changelog/&quot;&gt;Network Interconnect&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/changelog/risk-score/&quot;&gt;Risk score&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/changelog/cloudflare-one-client/&quot;&gt;Cloudflare One Client&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt; &lt;/details&gt;</description><pubDate>Sun, 16 Jun 2024 00:00:00 GMT</pubDate><product>Access</product><category>Access</category><category>Browser Isolation</category><category>CASB</category><category>Cloudflare Tunnel for SASE</category><category>Digital Experience Monitoring</category><category>Data Loss Prevention</category><category>Email security</category><category>Gateway</category><category>Multi-Cloud Networking</category><category>Cloudflare Network Firewall</category><category>Network Flow</category><category>Magic Transit</category><category>Cloudflare WAN</category><category>Network Interconnect</category><category>Risk Score</category><category>Cloudflare One Client</category></item><item><title>Cloudflare Web Analytics - Easily Exclude EU Visitors from RUM</title><link>https://developers.cloudflare.com/changelog/post/2025-02-25-rum-exclude-eu/</link><guid isPermaLink="true">https://developers.cloudflare.com/changelog/post/2025-02-25-rum-exclude-eu/</guid><description>&lt;p&gt;You can now easily enable Real User Monitoring (RUM) monitoring for your hostnames, while safely dropping requests from visitors in the European Union to comply with GDPR and CCPA.&lt;/p&gt;
&lt;starlight-image-zoom-zoomable&gt;&lt;img src=&quot;https://developers.cloudflare.com/_astro/2025-02-26-rum-eu.X0ZtbXWA_eanJk.webp&quot; alt=&quot;RUM Enablement UI&quot;&gt;&lt;/starlight-image-zoom-zoomable&gt;
&lt;p&gt;Our Web Analytics product has always been centered on giving you insights into your users&apos; experience that you need to provide the best quality experience, without sacrificing user privacy in the process.&lt;/p&gt;
&lt;p&gt;To help with that aim, you can now selectively enable RUM monitoring for your hostname and exclude EU visitor data in a single click. If you opt for this option, we will drop all metrics collected by our EU data centeres automatically.&lt;/p&gt;
&lt;p&gt;You can learn more about what metrics are reported by Web Analytics and how it is collected &lt;a href=&quot;https://developers.cloudflare.com/web-analytics/data-metrics/&quot;&gt;in the Web Analytics documentation&lt;/a&gt;. You can enable Web Analytics on any hostname by going to the &lt;a href=&quot;https://dash.cloudflare.com/?to=/:account/web-analytics/sites&quot; target=&quot;_blank&quot;&gt;Web Analytics&lt;/a&gt; section of the dashboard, selecting &quot;Manage Site&quot; for the hostname you want to monitor, and choosing the appropriate enablement option.&lt;/p&gt;</description><pubDate>Mon, 26 Feb 2024 00:00:00 GMT</pubDate><product>Cloudflare Web Analytics</product><category>Cloudflare Web Analytics</category></item></channel></rss>