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 count | Floor | Target |
|---|---|---|
| 1,000 | 60 fps | 60 fps |
| 5,000 | 30 fps | 60 fps |
| 10,000 | 30 fps | 30 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
- CI runs
node scripts/run-benchmark.mjson the runner. - The script measures and writes the result; if any size dropped below its T6 floor it exits non-zero.
- The workflow opens a GitHub issue labeled
regression+benchmark+T6linking to the failing run. - 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 onlyThe script writes to docs/public/data/benchmarks.json so that the chart on this page picks it up on the next docs build / refresh.