Cloudflare Kitesurf is open source: Apache 2.0 browser engine for AI agents on Workers
Cloudflare released the Kitesurf source on 13 November 2026: a Rust-to-WebAssembly browser engine that speaks CDP and, by the company's August figures, uses far less CPU and memory than Chromium.
· 7 min read
Written by AI from the sources linked below. How we use AI
On this page
Cloudflare has released the source code of Kitesurf, the experimental browser engine for AI agents that runs on Cloudflare Workers, under the Apache 2.0 licence. The announcement on 13 November 2026 turns a beta product that anyone could use but not read into a repository you can clone and run on your own machine. It matters if you build agents that need to fetch, render or screenshot web pages and the cost of running a full Chromium per agent is a problem.
Key points
- Cloudflare published the Kitesurf source on 13 November 2026 at github.com/cloudflare/kitesurf, under the Apache 2.0 licence; bundled fonts, data and dependencies keep their own licences.
- Kitesurf is an experimental, stateless browser engine that parses HTML, applies CSS, runs page JavaScript and renders screenshots without Chrome or a browser container, and speaks the Chrome DevTools Protocol (CDP).
- Cloudflare's own August measurements (median of five runs over 14 URLs) put Kitesurf at 3.1 to 3.8 times less CPU and 4.7 to 7.0 times less memory than a warm Chromium pool, but 1.7 to 1.8 times slower in wall time.
- You can run it locally with
pnpm install --frozen-lockfileandpnpm run devon127.0.0.1:8787; deploying to Workers needs the Workers Paid plan because it uses Dynamic Workers, and the README warns it has no built-in authentication. - The project is labelled experimental and the README says some Chrome DevTools features do not work yet.
What happened
On 13 November 2026 Cloudflare published a post titled "Kitesurf is now open source" and opened the repository at github.com/cloudflare/kitesurf. The post describes Kitesurf as an experimental, stateless browser engine for AI agents that runs entirely on Cloudflare Workers. It parses HTML, applies CSS, executes JavaScript on the page and renders screenshots, with no browser container involved. Cloudflare says it had committed to open-sourcing the project, and this release delivers on that.
When we looked at the repository, GitHub showed 553 stars, 20 forks and 375 commits on the main branch. Those figures change by the hour and are a snapshot, not a measure of adoption.
The licence is Apache 2.0, with a note that bundled fonts, data and dependencies keep their own licences (the repository's NOTICE file lists them). That is a permissive licence: you can use, modify and redistribute the code, including commercially, as long as you keep the notices.
The README gives the shape of the project. It speaks CDP, so clients such as Puppeteer connect to the engine's WebSocket endpoint (ws://127.0.0.1:8787/devtools/browser locally). A /health endpoint, a landing page with example pages and an optional bundled DevTools frontend ship with it. The build uses Bazel, which fetches pinned toolchains. The first build is slow because it compiles the Rust core and the vendored crates, and the bundled frontend adds a download of roughly 250 MB.
Background
Cloudflare introduced Kitesurf on 6 August 2026 as an early beta inside its Browser Run product, where you opt in by adding browser=kitesurf to CDP or Quick Action endpoints. The announcement said the team was twelve weeks old on the project, with a first commit in May. It was free during the beta, subject to per-account limits. At that time the code was closed; the post said the team intended to open-source it eventually, and InfoQ's report on the launch noted that no code was available yet. The November post says there was a September update that added WebMCP support, new APIs and better compatibility.
The August post gave Cloudflare's reason for building it: Chromium was designed for people and carries overhead that AI agents do not need, and giving every agent its own Chromium instance is, in Cloudflare's words, prohibitively expensive. Kitesurf's answer is to split the browser into small parts, each running as a Worker:
- Engine: the only public-facing part. It handles the CDP WebSocket and REST APIs and keeps session state; everything else is stateless.
- PageScript: a long-lived isolate per page using Dynamic Workers, with its own global object and DOM, built on parts of Blitz (HTML, DOM, layout) and Stylo (CSS).
- PageRenderer: draws the page to JPEG, PNG or PDF using Blitz's painting code and Parley, and returns the buffer to the Engine over Workers RPC.
- SandboxOutbound: the only component allowed to reach the network. It enforces CORS, adds browser-shaped headers, filters responses and keeps a separate cookie jar for each page.
Workers does not support eval, so Kitesurf uses the Boa JavaScript engine, written in Rust, as a last resort for those calls; Cloudflare says it plans to move away from it once native eval is available. It credits the open-source Rust headless engine Obscura as the original inspiration. The rest of the stack is open-source Rust compiled to WebAssembly: Blitz, Stylo, Boa, the Linebender libraries for text and 2D graphics, and Krilla for PDF output.
The numbers
The only performance figures we have come from Cloudflare's August post: medians of five Browser Run quick-action runs across a corpus of 14 URLs, comparing Kitesurf with Chromium from a warm pool. They are the company's own measurements, and we have not reproduced them. The November post points to benchmark and Web Platform Tests pages at kitesurf.dev for current figures, which we did not use.
Wall-clock time goes the other way. Taking a screenshot took 1,148 ms on Kitesurf against 637 ms on Chromium (1.8 times slower); extracting HTML took 820 ms against 472 ms (1.7 times slower). The post also says about 215,000 Web Platform Tests pass, with hundreds added each week. Cloudflare does not state a cold-start figure.
So the trade is explicit: cheaper per task in CPU and memory, slower per request, and narrower in what it can render.
What it means
For agent builders. If your agent mostly needs page text, structure or a screenshot, an engine that costs a fraction of the memory per session makes one-browser-per-agent affordable. Because it speaks CDP, existing Puppeteer scripts can point at it with a connection change. Cloudflare's own advice is that it is not a replacement for Chromium, and for video playback, WebGL, bot-challenge handshakes that depend on real TLS fingerprints, or long authenticated sessions needing persistent state, it recommends Browser Run's default Chromium option.
For the open-source Rust browser ecosystem. Blitz, Stylo, Boa and Krilla gain a large, real-world user. Blitz's creator, Nico Burns, said in coverage of the launch that Cloudflare intends to upstream its patches to Blitz; that is his account, relayed by InfoQ, and we did not verify how many patches have been contributed.
For self-hosters. Running it locally is possible now, but the README is blunt about the limits: the engine has no built-in authentication and it warns against deploying without Cloudflare Access or another authentication layer; the hosted DevTools frontend can only connect to 127.0.0.1, so it does not work against a deployed engine; and chrome://inspect cannot reach an HTTPS engine. A deployment to Workers needs the Workers Paid plan because of Dynamic Workers, so "open source" does not mean "runs anywhere for free".
For Cloudflare's customers. Open code lets security teams read how the sandbox handles outbound requests, cookies and headers. Community reaction to the August launch, as InfoQ summarised it, included a question on Hacker News about whether Kitesurf traffic would bypass Cloudflare's own bot controls, because Cloudflare also sells anti-bot services. We did not find an answer to that in the project's documents.
What we don't know yet
- Independent benchmarks. The efficiency figures are Cloudflare's, from one corpus of 14 URLs and a median of five runs. Now that the source is public, others can test it; we have not found third-party results yet.
- Current numbers. The measurements we cite date from August. The project says it is under heavy development and the November post sends readers to kitesurf.dev for up-to-date benchmark and Web Platform Tests figures.
- Which DevTools features are missing. The README says some do not work yet but does not list the supported CDP methods.
- How it behaves toward bot protection. Cloudflare's policy for Kitesurf traffic is not stated in the documents we read.
- Pricing after the beta. The August post says it is free during the beta and gives no later pricing.
What to watch next
- Third-party benchmarks against headless Chromium, other agent browsers.
- Issues and pull requests on the repository: it asks contributors to open an issue and get maintainer approval before a pull request, so the project's direction will show in how those are handled.
- Whether Cloudflare's patches land in the upstream Blitz and Stylo projects.
- Any move of Kitesurf from "experimental" beta to a supported Browser Run option, and its pricing.
Sources
Written by
The official account of the people who run audiotale.net: announcements, conversation starters and the newsroom's drafts. Posts written with AI say so. Every other account here is a real person.
Read next

Cloudflare's Vite Ecosystem Fund pays out first $301,300 to 44 projects
Cloudflare's first round of Vite funding goes to 44 projects and maintainers, with stipends of up to $4,000 a month for core maintainers, and an argument that AI pull requests are straining open source.
audiotale.net team5 min read
Cloudflare Spend Management beta: hard spending limits for Workers and Durable Objects
Cloudflare's new opt-in Spend Management pauses Workers and Durable Objects when a dollar limit is hit; here is how to set it up and what the pause means.
audiotale.net team5 min read
llama.cpp 1.0.0 and ggml 1.0.0: removed APIs, new server flags, what to change
llama.cpp and ggml reached 1.0.0 on 13 November 2026, removing deprecated functions and adopting strict semantic versioning for the C API.
audiotale.net team6 min read