Cloudflare Kitesurf Open Source: Deploy an Agent Browser on Workers Cloudflare open-sourced Kitesurf, its agent-first browser engine, on November 13, 2026 under the Apache 2.0 license, publishing the Rust and WebAssembly stack on GitHub as cloudflare/kitesurf. Kitesurf parses HTML, applies CSS, executes page JavaScript and renders screenshots inside Cloudflare Workers without Chrome or a browser container, and exposes a Chrome DevTools Protocol endpoint at ws://127.0.0.1:8787/devtools/browser for Puppeteer clients; Cloudflare's benchmarks put it at roughly three to seven times less memory and CPU than headless Chromium, with higher wall-clock latency on some real pages. Running it in production requires Workers Paid for Dynamic Workers and Cloudflare Access before exposing a deploy URL, and Cloudflare offers its managed Browser Run APIs as an alternative. Cloudflare open-sourced Kitesurf https://github.com/cloudflare/kitesurf?ref=explainx on November 13, 2026 , fulfilling a promise it made when the agent-first browser engine debuted during Agents Week in August https://explainx.ai/blog/cloudflare-kitesurf-agent-browser-v8-isolates-august-2026 . You can now clone the Rust and WebAssembly stack, run it on 127.0.0.1:8787 , and pnpm run deploy it to your own Workers account under Apache 2.0 . The release matters because many agent harnesses still default to headless Chromium , which is heavy on memory and hard to colocate with cheap inference. Kitesurf keeps HTML parsing, CSS, JavaScript, and screenshots inside Workers , speaks Chrome DevTools Protocol CDP , and pairs naturally with Puppeteer or any CDP client your coding agent already drives. TL;DR: what changed on November 13 | Question | Answer | |---|---| | What shipped? | Public GitHub repo cloudflare/kitesurf , Apache 2.0 , with engine, renderer, DOM shims, and CLI packages | | Why now? | Cloudflare said it always intended to open the engine so builders could audit, patch, and self-host on their accounts | | Local URL | http://127.0.0.1:8787 after pnpm run dev ; health check at /health | | CDP endpoint | ws://127.0.0.1:8787/devtools/browser for Puppeteer-core | | Production gate | Workers Paid for Dynamic Workers; Cloudflare Access mandatory before exposing a deploy URL | | Managed alternative | Browser Run https://developers.cloudflare.com/browser-rendering/?ref=explainx APIs if you do not want to operate Workers | What Kitesurf is and is not Kitesurf is not a Chromium fork. According to the November 13 announcement https://blog.cloudflare.com/kitesurf-open-source/?ref=explainx and the repository README https://github.com/cloudflare/kitesurf?ref=explainx , it parses HTML, applies CSS, executes page JavaScript, and renders screenshots without Chrome or a browser container . It exposes CDP so tools built for Puppeteer can attach. That design trades site compatibility for density . Our August coverage noted Kitesurf often used roughly three to seven times less memory and CPU than headless Chromium in Cloudflare benchmarks, with higher wall-clock latency on some real pages. Open source does not change those trade-offs; it lets you measure them on your workloads and contribute fixes. Kitesurf open source agent browser architecture diagram on Cloudflare Workers Image: Cloudflare https://blog.cloudflare.com/kitesurf-open-source/?ref=explainx Stack inside the repository The blog post and README credit several Rust projects compiled to WebAssembly: | Component | Role | |---|---| | Blitz | HTML parsing, DOM, layout, painting | | Stylo | CSS parsing, cascade, computed styles | | Boa | JavaScript in Wasm when Dynamic Workers cannot run it natively | | Linebender / Krilla | Text layout, 2D graphics, PDF output | Engine , page-script , page-renderer , dom-shim , core , and kitesurf-cli live under packages/ , which is the layout Cloudflare expects contributors to extend. Kitesurf open source repository packages layout for agent browser engine Image: Cloudflare https://blog.cloudflare.com/kitesurf-open-source/?ref=explainx How to run Kitesurf locally today Cloudflare documents a Bazel-first workflow on the README. Requirements include Bazelisk , Node.js 22+ , pinned pnpm 9.15.4 , and on macOS GNU tar . From a clean clone: git clone https://github.com/cloudflare/kitesurf.git cd kitesurf pnpm install --frozen-lockfile pnpm run dev The first compile builds Rust core and vendored crates, so expect a long initial build. Later runs reuse Bazel cache. The engine listens on port 8787 unless you set KITESURF PORT . Puppeteer smoke test The announcement shows puppeteer-core connecting to the local WebSocket: python import puppeteer from "puppeteer-core"; const browser = await puppeteer.connect { browserWSEndpoint: "ws://127.0.0.1:8787/devtools/browser", } ; try { const page = await browser.newPage ; await page.goto "https://example.com/" ; await page.screenshot { path: "page.png" } ; } finally { await browser.disconnect ; } For agent builders, the important line is the CDP endpoint . Harnesses like Chrome DevTools MCP https://explainx.ai/blog/chrome-devtools-mcp-chrome-devtools-for-agents-55k-stars-setup-skills-guide-2026 or custom LangGraph tools can swap the browser URL without rewriting task logic, as long as your pages fit Kitesurf compatibility limits. Chrome DevTools in a tab With pnpm run dev , open http://127.0.0.1:8787/ in Chrome to load the landing UI, paste a URL, and inspect through DevTools. The README also documents chrome://inspect discovery on 127.0.0.1:8787 . Bundled DevTools --config=devtools removes Google's hosted frontend limits but downloads about 250 MB on first build. Deploying to your Cloudflare account From the repository root: pnpm run deploy Wrangler uploads the Worker built by Bazel. The README is blunt: do not leave the Worker public . Without Cloudflare Access Zero Trust or equivalent, anyone who discovers the predictable kitesurf.