Benchmarking AI-native headless browsers built from scratch

Pierre Tachoire
Cofounder & CTO

TL;DR
We compared Lightpanda , Obscura, Moli and Kitesurf. The gap widens as you add parallel sessions. Lightpanda runs up to 3.9x faster than Moli and 2.6x faster than Obscura. It uses about half the memory of both. Lightpanda passes 80% of the web standards subtests, more than any other AI-native browser.
What we compared: AI-native headless browsers built from scratch
Headless Chrome has been the standard for web automation for years, but it was built for people. Chrome doesn’t scale and isn’t fit for purpose. It uses a lot of memory and CPU, and it gets slower as you add tabs. We wrote more about our thesis for why a lightweight browser for machines is urgently needed in our launch post . Since then, multiple new headless browsers built from scratch have appeared. We call these browsers AI-native because they are built for machines rather than people.
This post compares four AI-native headless browsers:
- Lightpanda is an open-source headless browser written in Zig. It speaks CDP (Chrome DevTools Protocol), WebDriver Classic, WebDriver BiDi and MCP (Model Context Protocol).
- Obscura is an open-source headless browser written in Rust. It speaks CDP and MCP.
- Moli is an open-source headless browser written in Rust by Lexmount. It speaks CDP and WebDriver.
- Cloudflare’s Kitesurf is a closed-source browser written in Rust and compiled to WebAssembly. You use it through Cloudflare Browser Run.
| Lightpanda | Obscura | Moli | Kitesurf | |
|---|---|---|---|---|
| Total time (940 pages, 25 tabs) | 4.5s | 11.5s | 17.4s | - |
| CPU time (940 pages, 25 tabs) | 12s | 29s | 40s | - |
| Peak memory (940 pages, 1 tab + each extra tab) | 37MB + 3MB per extra tab | 40MB + 7MB per extra tab | 92MB + 4-16MB per extra tab | - |
| Web standards (Web Platform Tests subtests passed) | 1.76 million (80%) | 652,000 (30%) | No complete run | No complete run |
| Protocols | CDP, WebDriver, MCP | CDP, MCP | CDP, WebDriver | CDP |
| Local or cloud | Both | Local | Both | Cloud |
| License | AGPL-3.0 | Apache-2.0 | Apache-2.0 or MIT | Closed source |
| Language | Zig | Rust | Rust | Rust, compiled to WebAssembly |
| Date created | February 2023 | April 2026 | August 2026 | May 2026 |
How we measured
This article references two benchmarks for Lightpanda, Obscura and Moli:
- Performance. We ran a script that follows every link of a 940-page demo site. Each run starts a fresh browser. It fetches pages using a pool of concurrent CDP connections, each running one session. The method follows our crawler benchmark .
- Web Platform Tests (WPT). We ran script tests on Lightpanda, Moli, Obscura and Chrome on the same WPT commit (
c182382).
WPT measure Web API support: how closely a browser follows the web standards. It tells you how many Web APIs a page can rely on. WPT doesn’t tell you everything. Whether a browser works on real sites also depends on network, memory and execution speed.
Since Kitesurf is closed source, we used Cloudflare’s published WPT tests and benchmarks.
How mature is each project?
Performance and compatibility only show part of the story. Since a web browser is a complex piece of software, looking in more detail at the codebase provides helpful context on the reliability and maintenance of these tools.
Here are the facts as of October 19, 2026:
| Lightpanda | Obscura | Moli | Kitesurf | |
|---|---|---|---|---|
| Latest version | 1.0.1 | 0.2.5 | 1.1.18 | N/A |
| Releases | 24 | 18 | 30 | N/A |
| Date created | February 2023 | April 2026 | August 2026 | May 2026 |
| Commits | 10,779 | 1,533 | 2,051 | N/A |
| Merged PRs | 3,148 | 552 | 1,222 | N/A |
| Number of contributors | 76 | 85 (92 incl. anonymous) | 17 (21 incl. anonymous) | N/A |
| Open-source | Yes | Yes | Yes | No |
Kitesurf is closed source. We were not able to access information about its releases and commits.
How much memory and CPU does each browser use?
For Lightpanda, Moli and Obscura:
- CPU time is consistently 2.3-3.4x lower for Lightpanda.
- For total time and peak memory, the more tabs you run in parallel, the more Lightpanda saves. At the highest concurrency tested (25 tabs in parallel), its total time is 4.5s against 11.5s for Obscura and 17.4s for Moli. Its peak memory is 109MB against 201MB for Obscura and 230MB for Moli.
The crawl ran on October 19, 2026 with Lightpanda 1.0.1, Moli v1.1.18 and Obscura v0.2.5:

- Total time: time to crawl all 940 pages.
- CPU time: CPU used by the browser, summed over all cores.
- Average CPU load: 100% = one full core.
- Peak memory: memory used by all browser processes, with shared pages split between them, sampled every 50ms.
Since Kitesurf is closed source, we can’t run the same benchmark on it. We have to use the numbers that Cloudflare publishes comparing Kitesurf and Chrome: 37MB of memory and 411ms of CPU for Kitesurf, against 266MB and 1.33s for Browser Run, Cloudflare’s Chrome-based service. A page takes longer, though: 967ms against 884ms. Kitesurf is lighter than Chrome but not faster. Lightpanda is both: in the public crawl benchmark , it is about 16x lighter and 9x faster than Chrome.
Which protocols and clients work with each browser?
All four speak CDP , making them compatible with Playwright and Puppeteer by changing one endpoint.
Lightpanda is the only one of the four that speaks CDP, WebDriver and MCP natively, with no driver in between .
| Lightpanda | Obscura | Moli | Kitesurf | |
|---|---|---|---|---|
| CDP | Yes | Yes | Yes | Yes, through Browser Run |
| WebDriver Classic | Yes | – | Yes | – |
| WebDriver BiDi | Yes | – | Yes | – |
| MCP server | Yes | Yes | – | Through MCP clients |
| Built-in agent | Yes | – | – | – |
| HTTP API | Yes | – | – | Yes, REST quick actions |
A dash means the feature is not supported (per the project’s README or docs on October 19, 2026).
See the web automation stack explained for how these tools fit together.
Which Web APIs does each browser support?
Since almost half of websites require JavaScript execution to render pages, browsers have to implement the corresponding Web APIs. The Web Platform Tests are the shared test suite that browser vendors use to check compatibility. Each test file holds many subtests. Results are public on wpt.fyi , and Chrome passes 98% of subtests.
- Lightpanda passes 80% of the subtests in the WPT. That is 1.76 million of the 2.2 million subtests. Every Lightpanda run is public on our WPT dashboard .
- Obscura reports 67.6% here, but this only concerns a subset of tests (893,328 of the 2.2 million in the suite). On the full suite, run on our infrastructure, Obscura 0.2.5 passes 30%.
- Moli: our WPT run had not finished after 10 hours, so there is no complete result.
- Kitesurf announced 1,516,781 passing subtests out of 1,543,950 (98.2% of those it ran, 69% of the 2.2 million in the suite), from kitesurf.dev/wpt. That run only covers 30% of the WPT test files (11,765 of 38,772).
Not all subtests are relevant to an AI-native browser built for machines. The chart below keeps the WPT folders that matter for web agents, listed under the chart, and shows them by the usual WPT areas.

Each axis is the share of the area’s subtests that a browser passes, 100% being all of them. A subtest a browser did not run counts as failed. That is why Moli, whose run is partial, scores 0% on HTML and Fetch & network. Kitesurf runs its own selection of tests, which explains its low scores on Storage and Fetch & network. We could not reproduce Kitesurf’s results, so its scores are computed from the results it publishes.
WPT folders in the selection
The selection keeps the WPT folders that matter for web agents:
- Page loading:
/html/semantics/scripting-1,/html/syntax,/html/semantics/embedded-content - Forms and interaction:
/html/semantics/forms,/html/semantics/interactive-elements,/html/editing,/html/interaction,/focus,/uievents - Cookies and storage:
/cookies,/webstorage,/IndexedDB - Network:
/fetch,/xhr,/cors,/websockets,/referrer-policy,/mixed-content - Navigation:
/html/browsers/history,/html/browsers/browsing-the-web,/html/browsers/the-window-object,/html/semantics/links,/navigation-api,/url - Page scripting:
/dom,/shadow-dom,/custom-elements,/html/webappapis,/html/dom,/domparsing,/intersection-observer - Files and text:
/FileAPI,/encoding
It leaves out four subfolders of /encoding: /encoding/legacy-mb-japanese, /encoding/legacy-mb-korean, /encoding/legacy-mb-tchinese and /encoding/legacy-mb-schinese. These legacy Japanese, Korean and Chinese encodings hold 1.1 million subtests, about 30 times as many as the rest of the URL and encoding area. Including these tests artificially inflates the number of total passing tests, which are not significantly relevant in context.
How do you install and host each browser?
You can run Lightpanda, Obscura and Moli yourself, without Chrome installed. Lightpanda is the only one that offers an install script, a Docker image, and pip and npm packages, making it the most versatile option to plug into your existing tooling.
| Lightpanda | Obscura | Moli | Kitesurf | |
|---|---|---|---|---|
| Run locally | One-line install script, Homebrew, Arch AUR, .deb package, Docker image lightpanda/browser, pip and npm packages, binaries, build from source | Release archives, nixpkgs, Docker image h4ckf0r0day/obscura, build from source | Install script, release archives | Not available |
| Run in the cloud | Lightpanda Cloud | Not available | Lexmount Browser | Cloudflare Browser Run |
Lightpanda vs Obscura, Moli and Kitesurf
Lightpanda vs Obscura
Lightpanda and Obscura both have engines written from scratch, and both embed V8, the JavaScript engine in Chrome.
Performance and Web API compatibility are the main differences. At the highest concurrency tested (25 tabs), Lightpanda uses 1.8x less memory and 2.5x less CPU. It finishes the crawl 2.6x faster. Lightpanda passes 2.7x as many subtests on the full web platform suite.
Obscura doesn’t support WebDriver. Lightpanda supports both WebDriver Classic and BiDi.
Lightpanda vs Moli
At the highest concurrency tested (25 tabs), Lightpanda finishes the crawl 3.9x faster and uses 3.4x less CPU. It passes 80% of the web standards subtests, whereas our WPT run of Moli never finished after more than 10 hours.
For Selenium scripts or any other WebDriver library, Lightpanda and Moli are the only two options among these AI-native headless browsers, with Lightpanda faster and lighter at scale.
Lightpanda vs Kitesurf
Since Kitesurf is closed source, we cannot validate its performance benchmarks. Cloudflare only reports on its own selection of tests (11,765 of 38,772), rather than the full web platform test suite (more than three times as many files).
Lightpanda is open-source and you can choose whether to run it locally or in our managed cloud. Kitesurf only runs on Cloudflare.
Run Lightpanda on your own pages
If you want a lightweight and fast browser, install Lightpanda and start the server:
curl -fsSL https://pkg.lightpanda.io/install.sh | bash
lightpanda serveThen follow the quickstart for Puppeteer, Playwright and other clients .
FAQ
What is the best headless Chrome alternative?
Lightpanda beats all open-source AI-native headless browsers on Web API compatibility, speed, memory and CPU usage. The memory gains on Lightpanda versus other headless browsers grow with the number of parallel sessions.
Is Lightpanda faster than headless Chrome, Obscura and Moli?
Yes. In the public crawl benchmark , Lightpanda is about 9x faster and uses about 16x less memory than Chrome. In a separate 940-page crawl, it finishes 3.9x faster than Moli and 2.6x faster than Obscura when many sessions run in parallel. The more tasks you run in parallel, the larger the Lightpanda speed gains are.
Which headless browser uses the least memory?
Lightpanda is the least memory intensive AI-native headless browser. In a crawl of 940 pages it used about half the memory of Moli and Obscura (109MB against 230MB and 201MB), and the gap grows with the number of parallel sessions. Kitesurf is closed source and reports 37MB per page, but the figures cannot be reproduced.
Can I use Playwright, Puppeteer or Selenium with Lightpanda, Obscura, Moli or Kitesurf?
Playwright and Puppeteer work with all four, because all four speak CDP: you only have to change the endpoint in your scripts. Selenium works only with Lightpanda and Moli, which implement WebDriver. Lightpanda is the only AI-native headless browser that natively speaks every web automation protocol: CDP, WebDriver and MCP.
Which headless browsers have an MCP server?
Lightpanda has a native MCP server in the same binary: run lightpanda mcp from any MCP host, such as Claude Desktop or Cursor, and your agent can navigate, read, click and fill pages. Obscura also ships an MCP server. Kitesurf works with MCP clients through Cloudflare, and Moli does not document an MCP server.

Pierre Tachoire
Cofounder & CTO
Pierre has more than twenty years of software engineering experience, including many years spent dealing with browser quirks, fingerprinting, and scraping performance. He led engineering at BlueBoard with Francis and saw the same issues first hand when building automation on top of traditional browsers. He also runs Clermont'ech, a community where local engineers share ideas and projects.