Cloudflare just open-sourced Kitesurf — a browser engine it built from scratch for AI agents, not people. No tabs. No extensions. No rendering pipeline tuned for humans staring at screens. Just HTML parsing, CSS, JavaScript execution, and screenshots at 7x lower memory than Chromium, running as a stateless Workers isolate. If you’re building agents that browse the web, the “just use Playwright” default is worth reconsidering.
Not a Chromium Fork
This is worth emphasizing because almost everything else in the headless browser space is Chromium with the UI stripped out. Kitesurf is different — it’s a ground-up Rust and WebAssembly browser engine with three main components.
The Engine manages browser sessions and exposes the Chrome DevTools Protocol (CDP) endpoint. The PageScript component runs page JavaScript using Boa, a Rust-based ECMAScript interpreter compiled to WebAssembly. The PageRenderer handles screenshots using Blitz for DOM and layout, Stylo (Firefox’s own CSS engine) for style computation, and blitz-paint for the final render.
Everything compiles to WebAssembly and runs inside V8 isolates on Workers. The result is a stateless, per-request browser — no persistent process to manage, no container to cold-start, no session state leaking between requests.
The Resource Numbers
Cloudflare published actual memory figures, so we don’t have to speculate:
| Task | Kitesurf | Chromium |
|---|---|---|
| Screenshot | 57.8 MiB | 271.0 MiB |
| HTML extraction | 39.4 MiB | 273.7 MiB |
That’s roughly a 7x memory reduction for the tasks agents actually run. CPU follows a similar trend — Cloudflare reports 3.8x lower CPU usage in benchmarks. For an agent making thousands of browser calls per day, this is the difference between a manageable infrastructure cost and one that eats your margins.
Switching Is One Query Parameter
Kitesurf exposes the same Chrome DevTools Protocol endpoint as standard Chromium Browser Run. Existing Puppeteer or Playwright code connects to it without modification — just add ?browser=kitesurf to the endpoint URL:
// Before: Chromium Browser Run
const browser = await puppeteer.connect({
browserWSEndpoint:
});
// After: Kitesurf — one parameter change
const browser = await puppeteer.connect({
browserWSEndpoint:
});
MCP browser tools that speak CDP also work automatically. For teams already on Browser Run, there’s essentially no migration cost — you can test it in an afternoon and fall back trivially.
What You’re Giving Up
Kitesurf is not a full Chromium replacement and doesn’t pretend to be. Browser extensions don’t work — they’re intentionally excluded. The engine runs one session per V8 isolate, so there are no tabs. Not all CDP features are implemented yet, and Boa’s JavaScript compatibility isn’t identical to V8, which matters for complex single-page applications.
The honest framing: Kitesurf excels at content extraction, screenshots, structured data scraping, and CDP-based navigation on standard websites. It’s not the right tool for visual regression testing, apps that require extensions, or heavily dynamic SPAs that depend on V8-specific behavior.
Self-Hosting With Open Source
The open-source release (Apache 2.0 on GitHub) adds a meaningful option: deploy your own Kitesurf instance to your own Cloudflare Workers account. For teams with data residency requirements or compliance constraints that prevent routing browsing through Cloudflare’s shared infrastructure, this matters. Run wrangler dev locally to test, wrangler deploy to ship.
Cloudflare is also signaling that it wants external contributions — whether that means upstreaming improvements back to Blitz and Stylo, or building specialized versions for specific agent workflows.
Where This Fits
The headless browser market has been Chromium-shaped for a decade. Playwright, Puppeteer, Selenium, Steel.dev, Browserbase — they all sit on top of a 100MB+ browser designed for humans first and agents second. Kitesurf is the first credible attempt at building the browser agents actually need: stateless, cheap, isolated, and fast to spin up.
It’s still labeled experimental. But “experimental + CDP compatible + free in beta + open source” is a low-risk way to find out whether 7x lower memory holds up in your specific workload. For most agent browsing tasks, it probably does.

