The same 940 pages, on this Mac

AginxBrowser engineering notes · 2026-10-22 · 中文

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

AginxBrowserLightpandaObscuraMoliKitesurf
Version we ran0.6.2, cec37411.0.10.2.5Not run. Their article says 1.1.18Not run
Public interfaceHTTPCDP, WebDriver, MCPCDP, MCPTheir article says CDP, WebDriverTheir article says CDP through Browser Run
ScreenshotsIn-process paint. This crawl did not request oneTheir README says there is no graphical rendering engineScreenshots, screencast, PDFNot checkedNot checked
LicenseApache-2.0AGPL-3.0Apache-2.0Their article says Apache-2.0 or MITClosed 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 articleOur receipts
MachineThey say AWS m5.xlargeThis Mac, macOS, arm64
MemoryLinux smem PSS, shared pages splitps RSS, about every 0.1s. Shared pages are counted again
Date2026-10-19Peers on 2026-10-21. Aginx 0.6.2 on 2026-10-22
DriverTheir crawler, CDPAginx 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.

DateEngineShapeWallPeak 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.

EngineWallCPUPeak memory
Lightpanda 1.0.14.5s12s109MB PSS
Obscura 0.2.511.5s29s201MB PSS
Moli 1.1.1817.4s40s230MB 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

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