<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Cloudflare changelogs | Rules</title><description>Cloudflare changelogs for Rules</description><link>https://developers.cloudflare.com/changelog/</link><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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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></channel></rss>