Cloudflare Kitesurf: The Browser Built for AI Agents

Cloudflare just shipped a browser that was never meant for you. It has no tabs, no bookmarks, no extensions, and it does not care whether your CSS renders pixel-perfect. It is called Kitesurf, it runs entirely on Cloudflare Workers, and it exists for one reason: AI agents needed a browser, and Chromium was never designed to be one for them.Here is what Kitesurf actually is, how it was built in twelve weeks, what the benchmarks really say, and what it means if you build automations, scrapers, or AI agents for a living.

TL;DR — the short version

  • What: Kitesurf is an agent-first browser engine announced by Cloudflare on 6 August 2026, running inside V8 isolates on Cloudflare Workers.
  • Why: Chromium was built for humans. Agents pay for that overhead in memory, CPU, and cost per session.
  • The numbers: 3.1–3.8× less CPU and 4.7–7.0× less memory than Chromium on common agent tasks — at the cost of being roughly 1.7–1.8× slower on wall-clock time.
  • Maturity: 215,000+ Web Platform Tests passing, growing weekly. First commit was in May 2026.
  • Access: Free while in beta inside Browser Run. Add browser=kitesurf to the endpoint. Works with Puppeteer, Playwright, chrome-remote-interface, and MCP/CDP agents.
  • Coming: Cloudflare says it will open source Kitesurf so customers can deploy it on their own accounts.

Why AI agents needed a different browser

Ask any team building agentic workflows what breaks first at scale, and the answer is rarely the model. It is the browser.Agents need browsers. Booking, scraping, form-filling, price monitoring, research, QA — a huge share of real tasks cannot be completed without one. But every headless Chromium instance carries the full weight of a consumer product: a JIT-compiled JavaScript engine, a GPU-accelerated compositor, extension plumbing, profile syncing, tab management, and a rendering pipeline obsessed with 60-fps smoothness.An AI model needs none of that. As Cloudflare’s team put it, agents care about token count, context windows, scalability, performance, and cost — not themes, tabs, or device sync. Structured, machine-readable content matters; being one pixel off does not.The economics are the real story. Giving every agent its own Chromium instance is prohibitively expensive, which effectively restricts large parts of the web to the most sophisticated, best-funded AI applications and locks everyone else out. Kitesurf is an attempt to change that price floor.
There is a third reason too: the threat model is different. When a human browses, they mostly visit sites they trust. When an agent browses, it is pointed at whatever the task demands — arbitrary code from arbitrary origins — and new risks like prompt injection and tool safety move to the top of the list.

What Kitesurf actually is

Kitesurf is not a Chromium fork. It is a browser engine written largely in Rust, compiled to WebAssembly, and executed inside V8 isolates on Cloudflare Workers — the same serverless primitive that runs ordinary Workers code.Practically, that means a browser session is not a heavy process on a warm virtual machine. It is a disposable isolate that spins up for the duration of a task and vanishes. Cloudflare describes it as an ephemeral, fully isolated, stateless engine designed to exist only for the life of a request — which is exactly the shape of bursty, AI-driven workloads.The project started from an unusual place: the team drew initial inspiration from obscura, an open-source headless engine written in Rust for AI automation with no Chrome, no Node.js, and no dependencies. They then used an AI agent to attempt a port to Workers. The first attempt went badly. Once the agent was given a solid plan and a clear definition of success — detailed enough for it to loop and ask questions — it worked well enough to justify a real team effort.

The four design decisions that shaped it

1. Tests before features

Building a browser with heavy AI assistance only works if the goalposts are machine-checkable. Cloudflare leaned on the Web Platform Tests (WPT) suite — a large, standardised body of conformance tests — to give agents unambiguous success criteria, while humans focused on architecture and review.Because WPT measures standards conformance rather than real-world usability, the team added integration testing and visual regression testing on top: multi-step Puppeteer runs against real websites, executed on both Chromium and Kitesurf, comparing assertions and rendered output at every step.

2. Rust wherever possible

Rather than compiling C/C++ through Emscripten and inheriting layers of mocked dependencies (and a bulky, slower binary), the team wrote native Rust and compiled straight to WebAssembly with wasm-bindgen — fewer emulation layers, closer to the metal.

3. Never drop the page

A browser has to survive the entire hostile, malformed web without dying. The rule Kitesurf committed to up front: any failure degrades to a blank frame or a missing element, never a dead session. Catch faults at every boundary, default to something safe and empty, and log enough to diagnose it later.

4. Stateless by default

State is what makes failure expensive. A stateless component is disposable and parallel by nature — kill it the moment it stalls, run a thousand at once, and size capacity to demand instead of keeping instances warm. In Kitesurf, only one component holds session state; everything else is throwaway.

Under the hood: the four components

The Engine

The only public-facing component. It speaks the Chrome DevTools Protocol (CDP) over WebSocket plus HTTP REST, and it stores each session’s state. CDP compatibility is the strategic choice here: Puppeteer, Playwright, chrome-remote-interface, and the real Chrome DevTools frontend all point at it and simply work. Ironically, the Engine is the simplest part of the system.

PageScript

This is where a page actually lives. Every page — and every out-of-process iframe — gets a long-lived isolate spun up via Dynamic Workers, containing a clean globalThis and a DOM document. HTML and CSS parsing use parts of Blitz, a modular rendering engine, and Stylo, Firefox’s high-performance CSS engine — both Rust. Every <script> tag and .wasm file runs inside that same isolate.One wrinkle: Workers still does not support native eval for security reasons. Kitesurf’s workaround is Boa, an ECMAScript engine written in Rust, compiled to run on Workers — a runtime on top of a runtime. Cloudflare openly calls this suboptimal but sufficient for the occasional eval found in the wild, and plans to drop it once native support lands.

PageRenderer

The pixel factory. When the Engine needs a frame, PageRenderer pulls the page object (the “scene”) from PageScript, fetches internal fonts and images from Static Assets, rasterises everything into an image buffer, and hands back a JPEG, PNG, or PDF. Painting is handled by blitz-paint, with Parley doing glyph shaping, font selection, and line breaking.Because the renderer holds no page state — only a disposable cache — the Engine can kill and relaunch it on any stuck or failed call. Every render request is self-contained and retryable.

SandboxOutbound

Fetching arbitrary assets off the internet is the single most dangerous thing a browser does, so Kitesurf funnels all of it through one component. Nothing else touches the network, and that restriction is enforced by Dynamic Workers rather than convention. SandboxOutbound enforces CORS, injects browser-shaped headers, filters responses, and gives every page its own cookie jar. Anything that fails policy gets a 403.Gluing it together is Workers’ built-in RPC system: one Worker calls a method on another — renderFrame(), for example — passing objects across isolate boundaries without API schemas, type definitions, or auth plumbing.

The benchmarks: what you gain, what you give up

Cloudflare published medians from five Browser Run quick-action runs across a 14-URL corpus, comparing Kitesurf against a warm Chromium pool. The trade-off is unusually clean.
MetricKitesurfChromium (warm pool)Kitesurf, relative
CPU — screenshot380 ms1,173 ms3.1× less CPU
CPU — HTML extraction229 ms877 ms3.8× less CPU
Memory — screenshot57.8 MiB271.0 MiB4.7× less memory
Memory — HTML extraction39.4 MiB273.7 MiB7.0× less memory
Wall time — screenshot1,148 ms637 ms1.8× slower
Wall time — HTML extraction820 ms472 ms1.7× slower
Source: Cloudflare Blog, “Introducing Kitesurf”, 6 August 2026.
Chromium wins the stopwatch, and Cloudflare says so plainly: a JIT that has already seen a page will always beat a cold software renderer. Most of the gap sits in rasterisation and image encoding, which the team is still optimising.But wall time is not the bill. Memory and CPU are what you actually pay for, and what determines how many concurrent sessions you can run per dollar. A 7× memory reduction on extraction tasks is not an optimisation — it changes which workloads are viable at all. If your agent fleet is doing thousands of one-shot extractions a day, an extra 350 milliseconds per run is a rounding error next to a 4–7× drop in resource consumption.

How mature is it, really?

Kitesurf passes more than 215,000 Web Platform Tests, with hundreds more added weekly. Crucially, the areas agents depend on most — CSS, DOM, HTML, selection, SVG, and XHR — already have good coverage, and even peripheral APIs like streams are decently supported.In practice, it correctly renders TodoMVC across vanilla JS, React, Vue, Angular and Preact, plus Wikipedia, Hacker News, the Cloudflare Blog, and much of the Cloudflare dashboard.And, per the oldest law of software: it runs Doom. The team pointed it at their browser-based Doom experiment and it played.

When to use Kitesurf — and when not to

Good fit

  • One-shot Quick Actions: screenshots, PDF generation, HTML and content extraction.
  • High-volume agent fleets where cost per session is the binding constraint.
  • Bursty automation workloads that need to scale to thousands of parallel sessions instantly.
  • Any agent that can tolerate imperfect rendering in exchange for a much lower resource footprint.

Not yet

  • Video playback or WebGL rendering.
  • Negotiating bot-challenge handshakes that require real TLS fingerprints.
  • Long, authenticated sessions that depend on persistent state.
  • Anything demanding pixel-perfect fidelity on complex, modern layouts.
For those, Browser Run’s Chromium-powered default remains the right tool. The two are meant to coexist, not replace each other.

How to try Kitesurf today

It is available free while in beta, behind per-account limits, inside Browser Run. Existing clients need one parameter, not a rewrite.

Quick Action: a screenshot in one call

curl -X POST 'https://api.cloudflare.com/client/v4/accounts/<accountId>/browser-run/screenshot?browser=kitesurf' \
  -H 'Authorization: Bearer <apiToken>' \
  -H 'Content-Type: application/json' \
  -d '{ "url": "https://example.com" }' \
  --output "screenshot.png"

MCP / CDP client config

{
  "mcp": {
    "kitesurf": {
      "type": "local",
      "command": [
        "npx", "-y", "chrome-devtools-mcp@latest",
        "--wsEndpoint=wss://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-run/devtools/browser?browser=kitesurf",
        "--wsHeaders={\"Authorization\":\"Bearer <API_TOKEN>\"}"
      ],
      "enabled": true
    }
  }
}
There is also a public playground with Chrome DevTools injected into the UI, so you can type any URL, watch it render, inspect the DOM, read console messages, and — the interesting part — open the Memory panel to see the WebAssembly footprint of each isolate, frames included. If you want to know whether a specific site is compatible, that is the fastest possible test.

What Cloudflare is working on next

  • Broader CDP coverage. Kitesurf implements a subset today — enough for most agents and automation tools, including solid DOM and network inspection — and is expanding.
  • Rendering fidelity for screenshots and PDFs, explicitly because LLMs often reason better from an image than from raw text.
  • More WPT coverage on the road to production readiness.
  • Efficiency, with CPU, memory, and wall-time benchmarks running continuously.
  • Open source. Cloudflare says it intends to open source Kitesurf “once we’re ready”, with the goal of letting customers deploy their own instance on their own account.

Why this matters beyond Cloudflare

Strip away the Rust and the isolates and there is a larger signal here: the web is starting to fork by audience. For thirty years, one browser stack served everyone. Now a meaningful and fast-growing share of traffic is non-human, with completely different priorities — and it is getting purpose-built infrastructure.That has second-order consequences worth thinking about now:
  • For builders: the cost floor for agentic browsing drops sharply. Ideas that did not survive a spreadsheet at Chromium prices may survive at Kitesurf prices.
  • For site owners and marketers: if agents render your pages with an engine that skips video, WebGL, and some modern CSS, then server-rendered, semantic, structured HTML stops being an accessibility nicety and becomes a distribution requirement. Content an agent-first browser cannot parse is content that increasingly does not exist.
  • For analytics: a new class of lightweight, cheap-to-run browser traffic makes bot-versus-human segmentation harder and more important at the same time.
  • For the platform race: shipping a browser engine that runs inside your own edge runtime is a powerful lock-in story — and open-sourcing it is how you defuse that objection.
Twelve weeks from first commit to public beta, with heavy AI assistance and a test suite as the guardrail, is also a data point in itself about how quickly deeply technical projects can now move.

Frequently asked questions

What is Cloudflare Kitesurf?

Kitesurf is an agent-first browser engine from Cloudflare, announced on 6 August 2026. It runs in V8 isolates on Cloudflare Workers and is built specifically for AI agents and automation rather than human browsing.

Is Kitesurf a Chromium fork?

No. It is a new engine written largely in Rust and compiled to WebAssembly, using components such as Blitz, Stylo, Parley, and Boa. It speaks the Chrome DevTools Protocol for compatibility, but it does not share Chromium’s codebase.

Is Kitesurf faster than Chromium?

Not on wall-clock time — it is roughly 1.7–1.8× slower on the tested tasks. It uses 3.1–3.8× less CPU and 4.7–7.0× less memory, which is what drives cost and concurrency.

How much does Kitesurf cost?

It is free while in beta, behind per-account limits, and accessed through Cloudflare Browser Run.

Does it work with Puppeteer and Playwright?

Yes. Because it implements the Chrome DevTools Protocol, Puppeteer, Playwright, chrome-remote-interface, and MCP/CDP-speaking agents work by adding browser=kitesurf to the Browser Run endpoint.

Will Kitesurf be open source?

Cloudflare has said it plans to open source Kitesurf once it is ready, so customers can deploy their own version on their own accounts. No date has been announced.

The bottom line

Kitesurf is early, incomplete, and slower on the stopwatch than the thing it is competing with. It is also 4–7× lighter on the resources you actually pay for, compatible with tooling teams already use, and heading toward open source.The question it raises is not whether Kitesurf beats Chrome. It is whether the web is about to need two browsers — one built for people, and one built for everything else that reads it.Source: Cloudflare Blog — Introducing Kitesurf, by Celso Martinho, Ruskin Constant, Rui Figueira and Luís Duarte, 6 August 2026.