All articles
ArticlesNovember 14, 20265 min read

Kitesurf open source: Cloudflare's browser for AI agents

Cloudflare made Kitesurf open source. What the Workers-based browser for AI agents does, how to self-host it, benchmarks vs Chromium, and its current limits.

kitesurfcloudflarecloudflare workersai agentsheadless browseropen sourcechrome devtools protocol
Kitesurf open source: Cloudflare's browser for AI agents

Cloudflare made Kitesurf open source on November 13, 2026. Kitesurf is the stateless browser for AI agents that Cloudflare launched in August, and it runs entirely on Workers. The code is now on GitHub under Apache 2.0, so you can read it, run it on your laptop, and deploy your own copy to your own Cloudflare account.

I care about this one more than most launch posts. Every agent I build ends up needing a browser, and the browser is usually the most expensive and fragile part of the stack.

What Cloudflare actually shipped

The announcement post is short. Cloudflare had promised to open source Kitesurf since the first launch, and now the repository at cloudflare/kitesurf is public.

Kitesurf parses HTML, applies CSS, runs page JavaScript, and renders screenshots with no browser container behind it. It is built from open-source Rust crates compiled to WebAssembly:

  • Blitz for HTML parsing, the DOM, layout, and painting
  • Stylo (Firefox's CSS engine) for CSS parsing and computed styles
  • Boa for JavaScript in WebAssembly, used only as a last resort when the page script can't run in Dynamic Workers
  • Linebender libraries for text layout and 2D graphics, and Krilla for PDF output

The engine has three parts. The Engine manages sessions and client connections, PageScript runs the page and its JavaScript, and PageRenderer draws the result. Each lives in its own folder under packages/, next to the Rust core, the DOM shims, and a CLI.

Why a browser for AI agents needs to be different

Chromium was built for people. It has tabs, extensions, video, WebGL, and pixel-perfect rendering, and a headless agent pays for all of that in CPU and memory even when it only wants the text of a page.

Cloudflare's original Kitesurf announcement from August 6 published benchmarks against a warm pool of Chromium:

TaskKitesurfChromiumDifference
Screenshot, CPU380 ms1,173 ms3.1x less
HTML extraction, CPU229 ms877 ms3.8x less
Screenshot, memory57.8 MiB271.0 MiB4.7x less
HTML extraction, memory39.4 MiB273.7 MiB7.0x less
Screenshot, wall time1,148 ms637 ms1.8x slower

Look at the last row. Kitesurf is slower on wall time. You give up latency to get a much cheaper session, and for agents running hundreds of page loads in parallel, that is usually a good trade. For a user waiting on one screenshot, it may not be.

At launch Cloudflare said it passed around 215,000 Web Platform Tests and was adding hundreds more every week.

How to run Kitesurf open source locally

The setup from the post is four commands:

git clone https://github.com/cloudflare/kitesurf.git
cd kitesurf
pnpm install --frozen-lockfile
pnpm run dev

The first build compiles the Rust core, so expect to wait. After that, wrangler serves the engine at http://127.0.0.1:8787, and you can connect any CDP client:

import puppeteer from "puppeteer-core";

const browser = await puppeteer.connect({
  browserWSEndpoint: "ws://127.0.0.1:8787/devtools/browser",
});

const page = await browser.newPage();
await page.goto("https://example.com/");
await page.screenshot({ path: "page.png" });
await browser.disconnect();

You can also point an agent harness at that CDP port and let it drive. When you are happy, pnpm run deploy pushes it to your account.

If you don't want to host anything, the managed version still works through Browser Run. You add browser=kitesurf to the CDP or Quick Action endpoints, and per the Kitesurf docs it is free while in beta, behind per-account limits.

Where Kitesurf falls short today

Cloudflare is upfront about the gaps. Kitesurf is not the right choice yet if you need to:

  • play video or render WebGL
  • pass a bot challenge that checks real TLS fingerprints
  • keep a long, logged-in session with persistent state

That last one matters. A lot of useful agent work happens behind a login, and Kitesurf is designed to be ephemeral: it exists for one task and then it's gone. For that work you still fall back to Browser Run's default Chromium.

It is also under heavy development. Contributions go through an issue first, and a maintainer has to vouch for you before you open a pull request.

My take as someone building agents

I wrote earlier about putting an agent layer on top of Cloudflare, and this release fits that picture. Most of what my agents do in a browser is boring: open a page, pull the content, maybe take a screenshot, move on. Running a full Chromium for that has always felt like renting a truck to carry a letter.

Open source changes three things for me:

  1. Cost control. I can run the engine in my own account and see exactly what I pay for, instead of hitting a managed limit in the middle of a batch job.
  2. Debuggability. When a page renders wrong, I can read the code and file a small reproduction instead of guessing.
  3. Lock-in is lower, not zero. The code is open, but it still depends on Workers and Dynamic Workers. You are not running this on your own servers outside Cloudflare any time soon.

My plan is a two-tier setup: Kitesurf for cheap, stateless reads, and Chromium only for the pages that need a real session or video. The agent decides per task. As code gets cheaper to write, the review and the infrastructure around it become the real cost, and browser bills are a big part of that infrastructure.

FAQ

Is Cloudflare Kitesurf free?

The code is free under Apache 2.0. Self-hosting needs a Workers Paid plan. The managed version in Browser Run is free while in beta, with per-account limits.

Can I use Playwright or Puppeteer with Kitesurf?

Yes. Kitesurf speaks the Chrome DevTools Protocol, so Puppeteer, Playwright, chrome-remote-interface, and MCP tools that use CDP can connect to it.

Can Kitesurf replace Chromium for agents?

For stateless reads, screenshots, PDFs, and HTML extraction on compatible sites, often yes. For video, WebGL, bot challenges, or long authenticated sessions, no, not yet.

What should I watch next?

The Web Platform Tests pass rate. That number tells you how many real sites Kitesurf can handle, and Cloudflare publishes it on kitesurf.dev.


Sources

Cover image: Kitesurf

Related articles