LATEST
AI Tools

Cloudflare Open-Sources Kitesurf: A Browser Built for AI Agents

Updated November 15, 2026
16 min read
Editor's Note: This article was human-reviewed for accuracy
Close-up of colorful HTML and CSS code on a dark computer screen

Quick Answer & Key Takeaways

  • • Cloudflare has open-sourced Kitesurf, its experimental browser engine for AI agents, under the Apache 2.0 license.
  • • Kitesurf runs entirely on Cloudflare Workers, speaks the Chrome DevTools Protocol, and uses 3 to 4 times less CPU and 5 to 7 times less memory than Chromium on Cloudflare's own tests.
  • • Running your own copy needs a Workers Paid plan at $5 a month, and the engine still cannot play video, render WebGL, or hold a long logged-in session.

Cloudflare has handed developers the keys to its agent browser. On November 13, 2026, the company open-sourced Kitesurf, the experimental browser engine it built for AI agents, under the Apache 2.0 license. You can read the code, run it on your own machine, change it, and deploy your own copy to a Cloudflare Workers account.

Kitesurf is not a smaller Chrome. It is a different kind of browser, built from the ground up for software that reads pages instead of people who look at them. It parses HTML, applies CSS, runs page JavaScript, and renders screenshots, all without a browser container. It speaks the Chrome DevTools Protocol, so Puppeteer, Playwright, and other standard automation tools can drive it without rewrites. The trade is deliberate: Kitesurf uses far less CPU and memory than Chromium on Cloudflare's own tests, but it is slower on the stopwatch, and it still cannot do several things a normal browser takes for granted.

This article covers what the open-source release actually gives you, what it costs to run, and where the engine still falls short.

What Kitesurf is, and what it is not

Cloudflare introduced Kitesurf on August 6, 2026, as a stateless browser that runs entirely on top of Workers. The argument in the launch post was blunt: browser engines like Chromium were built for humans, not agents, and handing every agent its own Chromium instance is so expensive in memory and compute that it locks out most agentic applications. Kitesurf was Cloudflare's answer, a browser that keeps what agents need, such as token-efficient page loading, JavaScript execution, and screenshots, and drops what they do not, such as tabs, themes, extensions, and pixel-perfect rendering.

The engine is stateless wherever possible. Each page load is treated as untrusted input, each session starts fresh, and components are isolated so a failure degrades to a blank frame or a missing element rather than a dead session. That design fits automation workloads that arrive in bursts: spin up work that costs only what it used, then let it vanish when the task ends.

What Kitesurf is not matters just as much. It is not a general-purpose browser replacement, and Cloudflare does not present it as one. It is an experimental engine under heavy development, with no published date for leaving that phase. If you need a browser for daily human use, this is not it.

What the November 13 release actually includes

The open-source announcement, published on the Cloudflare blog on November 13, 2026, delivers on a promise Cloudflare made at the August launch and repeated in a September update that added WebMCP support, new APIs, and improved compatibility. The code lives at github.com/cloudflare/kitesurf under the Apache 2.0 license, which permits commercial use, modification, and distribution with the license and copyright notice kept intact.

The repository had 1,356 stars and 66 forks when checked on November 15, 2026, two days after the announcement, which is a fast start for a developer-infrastructure project. The repository itself was created on September 30, 2026, ahead of the public announcement.

Inside the repository, Kitesurf has three main parts. The Engine manages browser sessions and client connections and is the only public-facing component. PageScript runs the page and its JavaScript. PageRenderer draws the result into pixels. All packages, the engine, its Rust core, DOM shims, renderer, and a Kitesurf CLI live in folders under the repository's packages directory.

The engine is assembled from open-source Rust packages compiled to WebAssembly. Blitz provides HTML parsing, the DOM, layout, and painting. Stylo, Firefox's CSS engine, handles CSS parsing, cascading, and computed styles. Boa runs JavaScript inside WebAssembly as a fallback for eval-style code that Workers cannot run natively. Linebender libraries handle text layout and 2D graphics, and Krilla generates PDF output. Those projects keep their own licenses, and the repository's NOTICE file documents the third-party notices.

One detail worth noting for anyone who builds on it: the engine was built with heavy help from AI coding agents. Cloudflare says agents did much of the feature work against the Web Platform Tests suite, with humans curating the order of features and reviewing the approaches. The team also ran the classic proof of completion for a browser project: it runs Doom.

How it works under the hood

A request through Kitesurf follows a path that looks simple from the outside and is carefully fenced on the inside. Fetching is the most dangerous operation a browser performs, since it pulls arbitrary assets from arbitrary origins, so Kitesurf routes it through a single component, SandboxOutbound, and nothing else can touch the network directly. That component enforces CORS, injects browser-shaped headers, filters responses, and keeps each page's cookies in its own jar. Anything that fails the policy gets a 403.

Each page, and each out-of-process iframe, gets its own long-lived PageScript isolate through Dynamic Workers, with a clean global object and DOM document. The DOM is populated by parsing the HTML and running the page's scripts, using Blitz for HTML and Stylo for CSS. JavaScript and WebAssembly run inside the same isolate. When the engine needs a frame, PageRenderer takes the page object from PageScript, fetches internal fonts and images, rasterizes everything into an image buffer, and returns it as a PNG or JPEG, or as a PDF through Krilla.

Because the renderer holds no page state beyond a disposable cache, the engine can kill and relaunch it on any failed or stuck call, which makes each render request self-contained and retryable. Workers' built-in RPC system carries the calls between isolates, so the engine can request a frame from the renderer in a single call and get an image back.

The public interface is the Chrome DevTools Protocol, exposed over WebSocket and HTTP REST APIs. That is the practical reason existing tools work: Puppeteer, Playwright, chrome-remote-interface, and the actual Chrome DevTools frontend can all point at Kitesurf and operate as they would against Chromium, within the subset of CDP that Kitesurf implements. Cloudflare says that subset already covers the requirements of most agents and automation tools, including DOM and network inspection, and it is expanding.

The performance numbers, and the catch

Cloudflare published a head-to-head comparison in the August launch post, based on the medians of five Browser Run quick-action runs across a 14-URL corpus, comparing Kitesurf with Chromium from a warm pool. Every figure below is Cloudflare's own measurement, not an independent benchmark, and no third party has reproduced them yet.

MetricKitesurfChromium (warm pool)Kitesurf, relative
CPU: screenshot380 ms1,173 ms3.1x less CPU
CPU: HTML extraction229 ms877 ms3.8x less CPU
Memory: screenshot57.8 MiB271.0 MiB4.7x less memory
Memory: HTML extraction39.4 MiB273.7 MiB7.0x less memory
Wall time: screenshot1,148 ms637 ms1.8x slower
Wall time: HTML extraction820 ms472 ms1.7x slower

The pattern is consistent: Kitesurf wins on the resources that drive the bill, by 3 to 4 times on CPU and 5 to 7 times on memory, and loses on wall-clock time, by about 1.7 times. Cloudflare is open about why. Chromium wins the stopwatch because a JIT engine that has already seen a page beats a cold software renderer, and most of Kitesurf's gap comes from rasterization and image encoding, which the team says it will keep optimizing. The company's argument is that memory and CPU are what determine how many sessions you can run and what they cost, so the trade is worth it for agent workloads.

Standards coverage is the other number to watch. Kitesurf passed around 215,000 Web Platform Tests at the August launch, and Cloudflare said it was adding hundreds of passing tests every week. The areas agents care about most, CSS, DOM, HTML, selection, SVG, and XHR, already had good coverage at launch. The live count is tracked on the project's site at kitesurf.dev, where the Web Platform Tests page shows the evolution over time. Treat the 215,000 figure as the August baseline, not today's total.

Kitesurf already renders pages such as TodoMVC in its vanilla, React, Vue, Angular, and Preact variants, Wikipedia, Hacker News, the Cloudflare Blog, and much of the Cloudflare dashboard, according to the launch post. The honest way to read that list is as a compatibility floor that is rising, not as a guarantee for any given site. Cloudflare's own advice is to try a specific site in the public playground at kitesurf.cloudflare.app before committing to it.

What it costs to run

There are two ways to use Kitesurf, and they price differently. The managed path is Cloudflare's Browser Run, the headless browser automation API, where Kitesurf is available as an option by adding a browser=kitesurf parameter to the endpoints. The self-hosted path is deploying the open-source engine to your own Cloudflare account.

Browser Run's live pricing page charges by browser hours and concurrent browsers. On a Workers Free plan, you get 10 browser minutes a day and 3 concurrent browsers. On a Workers Paid plan, you get 10 browser hours a month included, then $0.09 per additional hour, and 10 concurrent browsers on a monthly average, then $2.00 per additional browser. Quick Actions, such as a one-shot screenshot or content extraction, are charged for browser hours only. Browser Sessions, through Puppeteer, Playwright, or CDP, are charged for both browser hours and concurrent browsers. Failed Quick Actions calls that time out are not charged.

One point needs care. The August launch post described Kitesurf in Browser Run as available for free while in beta, behind per-account limits. The live Browser Run pricing page now shows the metered rates above, so treat the metered rates as the current cost and confirm the beta terms in the dashboard before budgeting a large workload.

The self-hosted path has a firmer price floor. Deploying the engine to your own account requires a Workers Paid plan, because Kitesurf uses Dynamic Workers to create isolated Workers for pages. The Workers Paid plan costs $5 a month minimum per account, and includes increased usage allotments, including 10 million requests a month, according to Cloudflare's Workers pricing page. Usage beyond the included allotments is billed at Cloudflare's standard usage rates, so the $5 figure is a floor, not a cap, for a busy deployment.

PathWhat you payIncluded allowanceOverage
Browser Run, Workers Free$010 browser minutes a day, 3 concurrent browsersNot available on Free
Browser Run, Workers Paid$5 a month minimum10 browser hours a month, 10 concurrent browsers$0.09 per extra browser hour; $2.00 per extra concurrent browser
Self-hosted Kitesurf$5 a month minimum (Workers Paid)10 million requests a monthStandard Workers usage rates beyond the allotment

At November 15, 2026 exchange rates of 1 USD = 0.7566 GBP and 1.4271 CAD, the $5 monthly minimum is about £3.78 or C$7.14, an extra browser hour is about £0.07 or C$0.13, and an extra concurrent browser is about £1.51 or C$2.85. Those conversions are approximate. Prices exclude applicable taxes, which depend on your billing address.

For a small project, the arithmetic is friendly. A Workers Paid user running 50 browser hours of Quick Actions in a month pays $3.60 for the 40 hours beyond the included 10, on top of the $5 plan minimum, using Cloudflare's own worked example. The cost only grows steeply when many browsers run at once, since concurrent browsers are the second meter.

How to try it

The fastest way to see Kitesurf is the public playground at kitesurf.cloudflare.app, where you type in a URL and watch Kitesurf render it, with Chrome DevTools injected into the interface so you can inspect the DOM, read console messages, and watch network activity. There is also a memory panel that reports the WebAssembly footprint of each isolate, including frames.

To run it locally, the repository's build requirements call for Bazelisk, Node.js 22 or newer, and pnpm 9.15.4. From there the steps are short:

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

The first build compiles the Rust core and its dependencies, so it takes a while; later builds reuse the cache. Wrangler then starts a local development server at http://127.0.0.1:8787, which you can open in Chrome DevTools or drive programmatically. A Puppeteer script connects with puppeteer-core to ws://127.0.0.1:8787/devtools/browser, opens a page, and takes a screenshot, exactly as it would against Chromium. You can also point an AI harness at the local CDP port and let the agent take control.

Deploying to your own Cloudflare account is one command from the repository root, pnpm run deploy, once you hold a Workers Paid plan. To use Kitesurf through the managed Browser Run APIs instead, add browser=kitesurf to the endpoint, for example in a CDP WebSocket URL or a Quick Actions screenshot call, and your existing Puppeteer or Playwright client works unchanged. Cloudflare also documents a Model Context Protocol setup so an MCP client can drive Kitesurf through chrome-devtools-mcp.

What Kitesurf cannot do yet

The limits are stated plainly in Cloudflare's own posts, and they are the first thing to check before choosing Kitesurf for a job. If you need to play video, render WebGL, negotiate a bot-challenge handshake with real TLS fingerprints, or start a ten-minute authenticated session that requires persistent state, Kitesurf is not yet the right option. For those jobs, Cloudflare points you at Browser Run's default, which is powered by Chromium.

Rendering fidelity is a second limit. Kitesurf's CSS parsing can be slightly off and its rendering is not pixel perfect, which Cloudflare frames as acceptable for agents that read pages as data, and a real problem if you need exact visual output. The engine implements a subset of the Chrome DevTools Protocol, so some CDP features are still unsupported, and the team is expanding coverage.

Third, the engine is experimental. Cloudflare says it is under heavy development and focused on compatibility, reliability, and efficiency, with no announced date for a stable or production-ready release. That means behavior can change between versions, and a page that renders today may render differently after an update.

Common mistakes to avoid

The most serious mistake is deploying Kitesurf publicly without authentication. The engine has no login of its own, and its workers.dev address is public by default. A copy deployed without Cloudflare Access in front of it would let anyone with the URL browse the web on the owner's bill. Put an authentication layer in front before sharing any deployment URL, and treat the open repository as code to run behind your own controls, not as a hosted service.

A second mistake is treating the performance table as a promise. The 3 to 4 times CPU and 5 to 7 times memory savings are Cloudflare's own measurements on a 14-URL corpus, and the engine is also about 1.7 times slower on wall-clock time. If your workload is latency-sensitive rather than cost-sensitive, Chromium may still be the better choice, and the only way to know is to run your own pages through both.

A third mistake is assuming open source means finished. Kitesurf is an early-stage project with a subset of CDP and incomplete rendering fidelity. Budget time to test your specific sites in the playground first, and keep the Chromium-backed Browser Run default as the fallback for pages Kitesurf handles badly.

Finally, do not confuse the two costs. The code is free under Apache 2.0, but running it is not free: self-hosting needs a Workers Paid plan, and the managed path meters browser hours and concurrent browsers. A deployment that looks free on the repository page can still produce a bill.

Kitesurf vs Chromium: when to use which

FactorKitesurfChromium (Browser Run default)
CPU and memory per task3 to 4 times less CPU, 5 to 7 times less memory on Cloudflare's testsHigher; a full browser with a JIT engine
Wall-clock speedAbout 1.7 times slowerFaster on the stopwatch
Rendering fidelityGood for agent tasks; not pixel perfectFull-fidelity rendering
Video and WebGLNot supportedSupported
Long logged-in sessionsNot supported; stateless by designSupported
Automation compatibilityCDP subset; Puppeteer and Playwright workFull CDP
Cost modelWorkers Paid minimum, or metered browser hoursSame Browser Run metering; more resource use per task
Self-hostingOpen source; deploy your own copyNot available as source; use the managed service

Use Kitesurf when an agent needs to load pages, run their JavaScript, extract content, or take screenshots at scale, and the pages involved are compatible. Use Chromium when the job needs video, WebGL, a long authenticated session, bot-challenge negotiation, or pixel-exact output. Most serious agent setups will end up using both, with Kitesurf as the cheap default and Chromium as the fallback.

Cloudflare's own framing points the same way. In the August post, the team wrote that agents care about token count, context windows, scalability, performance, and costs, and will be fine if the CSS parsing is slightly off or the rendering is not pixel perfect. That is the bet behind Kitesurf: a browser that is good enough for software, at a fraction of the resource cost, rather than a browser that is perfect for humans.

For context, Cloudflare has been building agent-facing infrastructure on Workers for a while. The company previously launched Clairic, a model that extracts structured data from documents without generating tokens, and Kitesurf sits in the same lineage: small, specialized, and priced for machines rather than people. The open-source release also follows a pattern seen across the industry this year, with DeepSeek open-sourcing its DeepInfer inference engine and AWS releasing the Infinity agent runtime as open source, each time trading some control for wider adoption.

Frequently asked questions

Is Kitesurf free to use?

The code is free under the Apache 2.0 license, but running it is not. The managed Browser Run path includes 10 browser minutes a day on a Workers Free plan, and 10 browser hours a month on a Workers Paid plan at $5 a month minimum, with $0.09 per extra hour. Self-hosting also requires a Workers Paid plan. Cloudflare described Kitesurf as free while in beta at the August launch, but the live pricing page now shows metered rates.

Can Kitesurf replace Chrome for everyday browsing?

No. Kitesurf is built for AI agents and automation, not for people. It has no tabs, themes, or extensions, it cannot play video or render WebGL, and it is not designed for long logged-in sessions. It is a headless engine you drive through code, not a browser you open on your desktop.

What do I need to run Kitesurf myself?

For local use, you need Bazelisk, Node.js 22 or newer, and pnpm 9.15.4, then clone the repository and run pnpm run dev, which starts a local server at 127.0.0.1:8787. Deploying to your own Cloudflare account needs a Workers Paid plan, because Kitesurf uses Dynamic Workers to isolate pages. The repository includes build and deploy instructions.

Is it safe to deploy Kitesurf on a public URL?

Not without adding authentication yourself. The engine has no login of its own, and a deployed copy's workers.dev address is public by default, so anyone with the URL could use it on your bill. Cloudflare's own coverage of the release warns to put Cloudflare Access in front of any deployment before sharing the address.

How does Kitesurf compare to Playwright with Chromium?

Playwright with Chromium is the full-fidelity option: faster wall-clock time, complete CDP support, video, WebGL, and persistent sessions. Kitesurf is the cheaper option for compatible pages, using 3 to 4 times less CPU and 5 to 7 times less memory on Cloudflare's tests, at the cost of slower wall time and missing features. Because Kitesurf speaks CDP, your existing Playwright or Puppeteer client can drive either one.

When will Kitesurf be production-ready?

Cloudflare has not published a date. The project is described as experimental and under heavy development, with work focused on compatibility, reliability, and efficiency. The Web Platform Tests count on kitesurf.dev is the public signal to watch: it stood at around 215,000 passing tests at the August launch and grows by hundreds a week.

The bottom line

Kitesurf's open-source release turns an interesting Cloudflare experiment into something developers can actually run, modify, and build on. The value proposition is specific and honest: much lower CPU and memory per agent task, at the cost of slower wall time and a feature list that still excludes video, WebGL, and long sessions. If your agents spend their days loading pages and pulling content, it is worth a trial in the playground this week. If they need a full browser, keep Chromium as the default and let Kitesurf earn the rest.

Try the playground at kitesurf.cloudflare.app with a page your own agents struggle with, and compare the result against Chromium before you commit to either one.

Sources

16 min read
6 views
edit_note Written by

Ratul Ahamed

Founder & Editor-in-Chief

Ratul Ahamed is the founder and editor of AI Core Updates, an independent site covering AI tools, models and pricing. He is a web developer based in Bangladesh and also runs All In One Tools, a free collection of browser-based utilities. Contact: [email protected]

Read all stories by Ratul Ahamed arrow_forward
verified_user Human-Reviewed Editorial

forum Comments (0)

Leave a Reply

chat_bubble_outline

No comments yet. Be the first to join the conversation!

Weekly AI Digest

Get our weekly AI tools digest

One email a week analyzing new AI tools, model updates, and practical workflows. Tested and summarized with zero fluff. Unsubscribe any time.

bolt
Hands-on AI Tool Reviews
Pricing math, limits, and alternatives.
verified_user
Strict Anti-Spam Policy
1-click unsubscribe at any time.
mark_email_unread

Subscribe to Digest

Sent weekly • No spam

person_outline
mail_outline

No spam ever. You can unsubscribe with a single click at any time.

cookie

Cookie Settings

We use cookies to enhance your browsing experience, serve personalized content, and analyze our traffic. By clicking "Accept All", you consent to our use of cookies. Learn more