Cloudflare has open-sourced Kitesurf, a browser engine built for AI agents that runs entirely on Cloudflare Workers, with no Chromium container behind it. Announced on November 12, 2026 under the Apache 2.0 license, it parses HTML and CSS, runs page JavaScript, produces screenshots and PDFs, and speaks the Chrome DevTools Protocol (CDP), so Puppeteer, Playwright or an MCP client can use it by changing the connection URL. Cloudflare calls it experimental and under heavy development.
Kitesurf in 30 seconds
- Kitesurf is Cloudflare’s browser for AI agents, now open source under Apache 2.0.
- It is written mostly in Rust and runs on Workers, without Chromium instances.
- It handles screenshots, PDFs and HTML extraction with 3 to 7 times less CPU and memory, but is somewhat slower per request.
- In Browser Run you enable it by adding browser=kitesurf to the URL.
- Video, WebGL and long authenticated sessions are not supported yet.
Cloudflare introduced Kitesurf in August as an optional engine in Browser Run, its remote browser service, and has now released the code. Its argument is that Chromium was designed for people and uses too much memory and compute to give every agent its own instance. An agent that opens a page, grabs content or a screenshot and closes it does not need tabs, themes or pixel-perfect rendering; it needs a browser that is cheap, isolated and easy to run in parallel.
How it is built
According to Cloudflare’s blog, Kitesurf is written mostly in Rust and compiled to WebAssembly. HTML and CSS parsing and layout use Blitz and Stylo, the style engine that originated in Servo; rasterization uses blitz-paint, and eval calls go through the Boa JS interpreter because Workers does not allow eval natively. It is split into four parts:
- Engine: the only public component. It serves the CDP WebSocket and REST APIs and stores session state.
- PageScript: runs each page, with its DOM, JavaScript and WebAssembly, in its own Dynamic Workers isolate.
- PageRenderer: produces the page image and keeps nothing beyond a disposable cache.
- SandboxOutbound: the only component that touches the network. It enforces CORS, adds browser-like headers and keeps cookies separate per page.
The browser is stateless: each task starts isolated and disappears when it finishes. Cloudflare says it passes more than 235,000 Web Platform Tests subtests and renders sites such as Wikipedia, Hacker News, its own blog, much of its dashboard and several TodoMVC versions, while noting that the test count measures standards conformance, not real-world site compatibility.
How to use it and what it saves
There are two routes. The first is Browser Run, where Kitesurf is in a free beta with per-account limits that Cloudflare does not specify. Add browser=kitesurf to any Quick Actions endpoint or to the CDP WebSocket:
# Quick Action (screenshot)
.../browser-run/screenshot?browser=kitesurf
# CDP endpoint for Puppeteer, Playwright or chrome-remote-interface
wss://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-run/devtools/browser?browser=kitesurf
// From a Worker
env.BROWSER.quickAction(..., { browser: "kitesurf" })Code language: PHP (php)
For MCP clients, the docs suggest configuring chrome-devtools-mcp with --wsEndpoint set to that URL and --wsHeaders carrying a Browser Run API token. Leave the parameter out and you get Chromium.
The second is self-hosting from the GitHub repository. Locally, pnpm run dev builds the engine and starts wrangler dev. Running it on Cloudflare needs the Workers Paid plan, because it relies on Dynamic Workers. Kitesurf has no built-in authentication, so an exposed deployment should sit behind Cloudflare Access or a similar layer.
Cloudflare’s numbers, medians of five runs over 14 URLs against a warm Chromium pool, show the trade-off. For screenshots, Kitesurf used 380 ms of CPU versus 1,173 ms and 57.8 MiB of memory versus 271 MiB; for HTML extraction, 229 versus 877 ms and 39.4 versus 273.7 MiB. Wall time, however, was 1.7 to 1.8 times slower: 1,148 ms per screenshot versus 637 ms. It is cheaper and scales better in parallel, not faster per request.
The limits show where it does not fit: no video or WebGL yet, no bot-challenge handshakes that need real TLS fingerprints, and no long-running authenticated sessions with persistent state. For those, Cloudflare recommends sticking with Chromium. It fits what the company describes as open, grab and close jobs: scheduled screenshots, page monitoring, bulk content extraction or images for multimodal models. As with any scraping, respect the terms of use and robots.txt of the sites you fetch.
FAQ
What is Kitesurf?
A Cloudflare browser engine for AI agents, written mostly in Rust, that runs on Workers and is open source under Apache 2.0.
Does it work with Puppeteer and Playwright?
Yes. It implements the Chrome DevTools Protocol, so you only need to add browser=kitesurf to the Browser Run WebSocket URL.
How much does it cost?
On Browser Run it is a free beta with per-account limits. Self-hosting on Cloudflare requires the Workers Paid plan.
Sources:
