Skip to content

Benchmarks ​

Live time-series of fps measurements from scripts/run-benchmark.mjs driven by the Benchmark workflow on every push to packages/core/src/** plus a weekly Sunday cron.

The runner is headless Chromium with SwiftShader — the same baseline that produces the numbers in PERFORMANCE.md. Real-GPU runners outperform these numbers; we publish SwiftShader so the floor we promise (T6 in PRODUCT.md) is always more strict than what consumers actually see.

T6 floors ​

Node countFloorTarget
1,00060 fps60 fps
5,00030 fps60 fps
10,00030 fps30 fps

A PR that drops any tier below its floor is a release blocker. The workflow opens a T6 regression issue automatically on first detection.

Latest run ​

Loading…

Time-series — 10K node fps over time ​

—

How a regression gets caught ​

  1. CI runs node scripts/run-benchmark.mjs on the runner.
  2. The script measures and writes the result; if any size dropped below its T6 floor it exits non-zero.
  3. The workflow opens a GitHub issue labeled regression + benchmark + T6 linking to the failing run.
  4. The maintainer triages — either roll back the regressing commit or record a Tenet-exception in HISTORY.md if there's an explicit reason to accept the tradeoff.

Running the benchmark locally ​

bash
pnpm install -w -D playwright                    # one-time
pnpm exec playwright install chromium
node scripts/run-benchmark.mjs                   # measures + appends JSON + floor check
node scripts/run-benchmark.mjs --counts 1000     # custom sizes
node scripts/run-benchmark.mjs --no-write        # dry-run, stdout only

The script writes to docs/public/data/benchmarks.json so that the chart on this page picks it up on the next docs build / refresh.

Released under the MIT License.