Kitesurf is Cloudflare's stateless, highly scalable browser that runs entirely on top of Workers and is designed for AI agents. Instead of shipping a full desktop browser engine like Chromium, Kitesurf focuses on what matters to an agent — token count, context windows, scalability, performance, and cost — while trading away features that only humans need, such as tabs, themes, extensions, and pixel-perfect rendering.
For common agentic tasks like screenshots and HTML extraction, Kitesurf uses significantly less CPU and memory than Chromium, which means you can run more sessions and scale better for bursty, AI-driven workloads.
Kitesurf is designed to be lightweight and efficient. It uses less CPU and memory than Chromium for common agentic tasks, at the cost of slightly slower wall time and rendering that is not pixel-perfect.
The table below shows the medians of five Browser Run Quick Action runs across a 14-URL corpus ↗, comparing Chromium (warm pool) with Kitesurf:
| Metric | Kitesurf | Chromium (warm pool) | Kitesurf, relative |
|---|---|---|---|
| CPU: screenshot | 380 ms | 1,173 ms | 3.1× less CPU than Chromium |
| CPU: HTML extraction | 229 ms | 877 ms | 3.8× less than Chromium |
| Memory: screenshot | 57.8 MiB | 271.0 MiB | 4.7× less than Chromium |
| Memory: HTML extraction | 39.4 MiB | 273.7 MiB | 7.0× less than Chromium |
| Wall time: screenshot | 1,148 ms | 637 ms | 1.8× slower than Chromium |
| Wall time: HTML extraction | 820 ms | 472 ms | 1.7× slower than Chromium |
Kitesurf wins on the memory and CPU that drive your bill (by 3–7×), while Chromium wins wall time because a warm just-in-time compiler beats a cold software renderer.
Kitesurf is tested against the Web Platform Tests (WPT) ↗, the shared suite used to measure conformance to W3C ↗ standards. As of the latest run, Kitesurf passes over 235,000 subtests, and coverage is expanding quickly.
The parts of a browser that matter most to agents have strong coverage:
| Area | Subtest coverage |
|---|---|
| DOM | 97% |
| HTML | 96% |
| Selection | 99% |
| SVG | 97% |
| Encoding | 99% |
| CORS | 95% |
| XHR | 95% |
| URL | 83% |
Kitesurf is a good fit for:
- AI agents that need to render pages but can accept the trade-offs of not using a full-featured, pixel-perfect Chromium browser.
- Automations and applications that rely on one-shot Quick Actions, such as extracting content from a page or generating PDFs and screenshots for compatible sites.
- Bursty, AI-driven workloads that benefit from an ephemeral, fully-isolated, stateless engine designed to exist only for the duration of a task.
Kitesurf correctly renders pages such as TodoMVC ↗ (vanilla, React, Vue, Angular, Preact), Wikipedia, Hacker News, the Cloudflare Blog, and much of the Cloudflare dashboard.
Kitesurf is not yet the right option if you need to:
- Play video or render WebGL.
- Negotiate a bot-challenge handshake with real TLS fingerprints.
- Start a long-running, authenticated session that requires persistent state.
For these cases, use Browser Run's default browser, which is powered by Chromium.
The best way to know whether a specific site is compatible with Kitesurf is to try it — either through the CDP endpoint and Quick Actions or in the public playground ↗.
The Browser Run CDP endpoint supports Kitesurf as an option, so your existing Puppeteer, Playwright, chrome-remote-interface ↗, or any AI agent that speaks MCP and CDP already works. To opt in, add the browser=kitesurf parameter to the endpoint.
For example, to use Kitesurf from an MCP client, add browser=kitesurf to the --wsEndpoint URL:
{
"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
}
}
}Replace <ACCOUNT_ID> with your Cloudflare account ID and <API_TOKEN> with a Browser Run API token.
You can also use Kitesurf with Browser Run's Quick Actions. Add browser=kitesurf to any Quick Action endpoint.
For example, to take a screenshot with Kitesurf:
curl -X POST 'https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-run/screenshot?browser=kitesurf' \
-H 'Authorization: Bearer <API_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"url": "https://example.com"
}' \
--output "screenshot.png"To start exploring Kitesurf without writing any code, use the public playground ↗. Type in any URL to see how Kitesurf renders the page and interact with it.
The playground injects Chrome DevTools into the UI, so you can inspect expanded DOM elements, read console messages, and watch network activity while Kitesurf renders a page. The Memory panel ↗ reports the WebAssembly footprint of each isolate, including frames, so you can see the resources each page consumes.