Rules - concat() now supports up to 32 arguments
- Announced
- Tags
- Rules
- Severity
- info, set by
reef/rss-rule-v1 - Source
- https://developers.cloudflare.com/changelog/post/2026-09-22-concat-argument-limit/
<p>The <code>concat()</code> function in Cloudflare Rules now accepts up to 32 arguments, increased from 16. This allows you to build richer dynamic values directly in Rules expressions and simplify configurations that combine request data.</p> <p>A common use case is adding a request header that sends context to your origin. The following Rulesets API request adds a Request Header Transform Rule to an existing <code>http_request_late_transform</code> phase ruleset. Its 18-argument expression combines request and network information into one header value:</p> <figure class="nb-code-figure" data-nb-lang="bash"><pre class="astro-code astro-code-themes github-light github-dark nb-shiki-c6xiwz" tabindex="0" data-language="bash" data-nb-lang="bash"><code><span class="line"><span class="nb-shiki-1t8gfj">curl</span><span class="nb-shiki-dzsirb"> --request</span><span class="nb-shiki-mdbnqw"> POST</span><span class="nb-shiki-dzsirb"> \</span></span> <span class="line"><span class="nb-shiki-mdbnqw"> "https://api.cloudflare.com/client/v4/zones/</span><span class="nb-shiki-140thh">$ZONE_ID</span><span class="nb-shiki-mdbnqw">/rulesets/</span><span class="nb-shiki-140thh">$RULESET_ID</span><span class="nb-shiki-mdbnqw">/rules"</span><span class="nb-shiki-dzsirb"> \</span></span> <span class="line"><span class="nb-shiki-dzsirb"> --header</span><span class="nb-shiki-mdbnqw"> "Authorization: Bearer </span><span class="nb-shiki-140thh">$CLOUDFLARE_API_TOKEN</span><span class="nb-shiki-mdbnqw">"</span><span class="nb-shiki-dzsirb"> \</span></span> <span class="line"><span class="nb-shiki-dzsirb"> --header</span><span class="nb-shiki-mdbnqw"> "Content-Type: application/json"</span><span class="nb-shiki-dzsirb"> \</span></span> <span class="line"><span class="nb-shiki-dzsirb"> --data</span><span class="nb-shiki-mdbnqw"> '{</span></span> <span class="line"><span class="nb-shiki-mdbnqw"> "ref": "add_request_context_header",</span></span> <span class="line"><span class="nb-shiki-mdbnqw"> "description": "Add request context for the origin",</span></span> <span class="line"><span class="nb-shiki-mdbnqw"> "expression": "true",</span></span> <span class="line"><span class="nb-shiki-mdbnqw"> "action": "rewrite",</span></span> <span class="line"><span class="nb-shiki-mdbnqw"> "action_parameters": {</span></span> <span class="line"><span class="nb-shiki-mdbnqw"> "headers": {</span></span> <span class="line"><span class="nb-shiki-mdbnqw"> "X-Request-Context": {</span></span> <span class="line"><span class="nb-shiki-mdbnqw"> "operation": "set",</span></span> <span class="line"><span class="nb-shiki-mdbnqw"> "expression": "concat(\"ip=\", to_string(ip.src), \";country=\", ip.src.country, \";host=\", http.host, \";method=\", http.request.method, \";path=\", http.request.uri.path, \";query=\", http.request.uri.query, \";ray-id=\", cf.ray_id, \";asn=\", to_string(ip.src.asnum), \";user-agent=\", http.user_agent)"</span></span> <span class="line"><span class="nb-shiki-mdbnqw"> }</span></span> <span class="line"><span class="nb-shiki-mdbnqw"> }</span></span> <span class="line"><span class="nb-shiki-mdbnqw"> }</span></span> <span class="line"><span class="nb-shiki-mdbnqw"> }'</span></span></code></pre></figure> <p>For more information, refer to the <a href="https://developers.cloudflare.com/ruleset-engine/rules-language/functions/#concat"><code>concat()</code> function reference</a> and <a href="https://developers.cloudflare.com/rules/transform/request-header-modification/">HTTP request header modification</a>.</p>
The text above is the source's. reef added the severity, the dates it could read from the text, and the endpoints and scopes named in code.