The same 940 pages, on this Mac
Same Mac, same 940 pages, pool 25. AginxBrowser 0.6.2 /
cec3741, three cold starts: 52.400s, 51.568s, 51.816s, peak RSS 399–405 MiB, one process. On 2026-10-21 this machine measured Obscura 0.2.5 at 54.83s and 199 MiB, one process, and Lightpanda 1.0.1 at 59.01s and 67.76s and 841 MiB, 25 processes. Those peers were not re-run on Oct 22. The 4.5s figure is their AWS table.
On 2026-10-19 Pierre Tachoire published Benchmarking AI-native headless browsers built from scratch. The table is Lightpanda, Obscura, Moli, and Cloudflare Kitesurf. AginxBrowser is absent. The task crawls the Amiibo demo: follow same-host links from the index through 940 pages, 25 at a time. The method page is their crawler benchmark. The index only exposes links after load.js runs, so a client that reads the raw HTML never sees the next page.
This page adds our column on our machine, using their public task. The numbers stay in three blocks: claims from their machine, receipts from this machine, and tests we did not run.
Who is in the table
| AginxBrowser | Lightpanda | Obscura | Moli | Kitesurf | |
|---|---|---|---|---|---|
| Version we ran | 0.6.2, cec3741 | 1.0.1 | 0.2.5 | Not run. Their article says 1.1.18 | Not run |
| Public interface | HTTP | CDP, WebDriver, MCP | CDP, MCP | Their article says CDP, WebDriver | Their article says CDP through Browser Run |
| Screenshots | In-process paint. This crawl did not request one | Their README says there is no graphical rendering engine | Screenshots, screencast, PDF | Not checked | Not checked |
| License | Apache-2.0 | AGPL-3.0 | Apache-2.0 | Their article says Apache-2.0 or MIT | Closed source |
Protocol and license cells for Moli and Kitesurf are restated from their 2026-10-19 article. This run did not start either product.
Two machines
| Their article | Our receipts | |
|---|---|---|
| Machine | They say AWS m5.xlarge | This Mac, macOS, arm64 |
| Memory | Linux smem PSS, shared pages split | ps RSS, about every 0.1s. Shared pages are counted again |
| Date | 2026-10-19 | Peers on 2026-10-21. Aginx 0.6.2 on 2026-10-22 |
| Driver | Their crawler, CDP | Aginx over HTTP /session. Lightpanda and Obscura used a local darwin/arm64 build of the official crawler, chromedp v0.15.1 |
What this Mac measured
One engine at a time. Proxies unset, as in the receipts. The full Aginx rows set the domain rate and the session page cap to 0. The default server returns HTTP 429 at 20 pages per minute per registrable domain. On 0.6.2 / cec3741 that default stop was 20 pages, 204 URLs known, 5.971s, peak RSS 364176 KB. That row is the product rule, not the result below.
| Date | Engine | Shape | Wall | Peak RSS |
|---|---|---|---|---|
| Oct 21 | Aginx 0.6.0 3dd366b |
1 process, 25 HTTP sessions | 88.425s | 414912 KB (405 MiB) |
| Oct 22 | Aginx 0.6.2 2426b37 |
Same. stealth + screenshot, TLS chrome145 |
65.827s, 62.349s | 416048 KB, 417424 KB |
| Oct 22 | Aginx 0.6.2 cec3741 |
Same | 52.400s, 51.568s, 51.816s | 414416 KB, 408208 KB, 414752 KB |
| Oct 22 | Aginx 0.6.2 9df4dd8 |
Same, plus the V8 flags below. One run | 53.402s | 409712 KB |
| Oct 21 | Lightpanda 1.0.1 | 25 processes (--fork) |
59.01s, 67.76s | 861184 KB, 861712 KB (841 MiB) |
| Oct 21 | Obscura 0.2.5 | 1 process, 25 CDP targets | 54.83s | 203424 KB (199 MiB) |
Quote 0.6.2 from the cec3741 triple. The three runs sit within a second, 940/940, with no fetch-deadline lines and no loadAmiibo is not defined. Sampled CPU, including process start, was 17.57s, 17.75s, and 21.99s. The 0.6.0 run was 17.03s.
Lightpanda used chromedp.Nodes. The first CPU sample is void: it was 0 because the processes had already exited. The second run's CPU sum while the processes were alive is 11.62s, a lower bound. Obscura did not finish under official chromedp.Nodes. The finished 54.83s polled Runtime.evaluate, CPU 11.35s. That row and the Lightpanda rows are different link queries. Both finished 940/940.
The Oct 22 wall times sit under the Oct 21 same-Mac Obscura 54.83s and Lightpanda 59.01s / 67.76s. Those two were not re-run on Oct 22, so the order is only the finished receipts. Peak RSS stayed about 400 MiB. Obscura on this Mac was 199 MiB. Lightpanda was 841 MiB across 25 processes.
The crawl client did not request a screenshot. The 52 seconds do not include writing a PNG. Aginx paints screenshots in-process and does not start Chrome for that. This task did not time that path.
One run with Obscura's young-generation flags
Obscura 0.2.5's CLI sets --max-semi-space-size=4 --optimize-for-size before the first isolate. Their environment docs say --optimize-for-size then forces the semi-space cap to 1 MiB. We did not change source. AGINXBROWSER_V8_FLAGS passed that pair to the release binary already on disk. A throwaway start printed --max-semi-space-size=1, with --optimize-for-size on, and the old-space ceiling still at 3072.
/health on that run was 0.6.2 / 9df4dd8, one layout-tree commit after cec3741. 940/940, 53.402s, sampler peak 409712 KB, end-of-crawl ps 409760 KB, CPU 19.40s. The peak stayed in the 400 MiB band. Those flags did not move this crawl toward Obscura's 199 MiB. The 0.6.2 wall time to quote remains the triple above.
Their published table stays on their machine
These are the pool-25 claims in the article. We did not re-run them on AWS.
| Engine | Wall | CPU | Peak memory |
|---|---|---|---|
| Lightpanda 1.0.1 | 4.5s | 12s | 109MB PSS |
| Obscura 0.2.5 | 11.5s | 29s | 201MB PSS |
| Moli 1.1.18 | 17.4s | 40s | 230MB PSS |
4.5 seconds and the 52 seconds on this Mac are not the same network or the same machine. RSS and PSS do not go in one cell. Kitesurf is closed source. Their article quotes Cloudflare's own Chrome comparison. We did not re-run those figures.
Which from-scratch browser is faster
On this Mac, for these 940 pages, the finished order is Aginx 0.6.2 / cec3741 at 51.6–52.4s, Obscura 0.2.5 at 54.83s, and Lightpanda 1.0.1 at 59.01s and 67.76s. The first date is Oct 22. The other two are Oct 21. Moli and Kitesurf are not in the same-machine table.
Which one uses less memory
Same-machine peak RSS, low to high: Obscura 199 MiB, Aginx about 400 MiB, Lightpanda 841 MiB. Aginx and Obscura were one process. The Lightpanda row is 25 processes. A second Aginx run with Obscura's young-generation flags still peaked at 409712 KB. The 109MB, 201MB, and 230MB figures are PSS on another machine.
Does Playwright attach by changing the endpoint
No. Aginx's public interface is HTTP: /fetch, /screenshot, and navigate, click, and eval on a session. A public CDP server is not built. Lightpanda, Obscura, Moli, and Kitesurf present CDP. That is an interface choice.
Is this the 7.6× Chrome number
Different task. The README's 7.6× against Chrome is 20 text pages from 2026-08-28. This page compares from-scratch engines on the 940-page Amiibo crawl only. Those multiples do not belong in the same sentence.
Does a default server crawl all 940 pages
No. The default is 20 pages per minute per registrable domain, plus a session page cap. The full 940 needs AGINXBROWSER_DOMAIN_RATE_PER_MIN=0 and AGINXBROWSER_SESSION_PAGE_LIMIT=0. The 429 body tells the operator to do that. The product default stays at 20.
Not run
- Moli, Kitesurf, Chrome, and Web Platform Tests.
- Pool widths 1 and 5.
- Obscura under
chromedp.Nodes. The finished run usedRuntime.evaluate. - A same-day re-run of the peers. The order uses their Oct 21 receipts.
- Screenshot time. The speed table has no PNG.
- A site-by-site "this origin works" matrix. Dated corners that are already published live in docs/RECEIPTS.md.
Raw JSON is in bench/peer-crawl-20261021/ and bench/peer-crawl-20261022/. The 0.6.0 full run is aginx-p25.json. The 0.6.2 triple is aginx-p25-cec-a.json, aginx-p25-cec-b.json, and aginx-p25-cec-c.json. The young-generation run is aginx-p25-v8flags.json.
After install, the health check is local port 8089.
curl -fsSL https://browser.aginx.net/install.sh -o install.sh && less install.sh && bash install.sh
Repository
Previous receipt