snypd.rocks

Benchmarks

TL;DR

60 rows, 33 of them gated: a gated row over its budget fails the build. Today none is. Version 0.1.4 on Bun 1.4.0, taken 2026-09-15, tokens counted with o200k_base.

23 ms

MCP cold start, release binary (source)

510 tokens

to read one page as markdown (source)

0 KB

JavaScript on the page (source)

How to read this page

Every row is a value, a budget and a note saying how the value was taken. A budget is a design statement — the number the product promises, written in snypd.yaml under bench.budgets so a site can tighten it. CI passes a timed row at 80 % of its budget, because a runner is noisy and a promise met on a bad afternoon is the promise; a counted row — tokens, kilobytes, actions — passes at the budget exactly. report rows have no budget: they are published so the next decision has a number, and a budget is set from them once there is one worth setting. The numbers are CI's, not a laptop's; the record this page is generated from is committed on every run that changes it.

Build

A cold build from nothing — no dist/, no index — at three sizes, and the incremental build a single edit costs. parse rows are the share of each build spent turning markdown into the typed tree.

MetricValueBudget
build.cold.100292.5 ms2000 ms ✅
build.cold.100.parse222.3 msreport-only
build.cold.100.parse.bun2.3 msreport-only
build.cold.10002748 ms20000 ms ✅
build.cold.1000.parse2161.2 msreport-only
build.cold.1000.parse.bun22.8 msreport-only
build.cold.1000027720.5 ms200000 ms ✅
build.cold.10000.parse21751.3 msreport-only
build.cold.10000.parse.bun232.8 msreport-only
build.incremental.10013.1 ms300 ms ✅
build.noop.1009.3 msreport-only

How each was taken:

Lint

Editorial lint over the same corpora, warm and cold.

MetricValueBudget
lint.1009.7 ms100 ms ✅
lint.100.cold205.2 msreport-only
lint.100067 ms1000 ms ✅
lint.1000.cold2057.1 msreport-only

How each was taken:

The MCP server

Spawn to initialize on the release binary — the number that decides whether an agent's first turn waits.

MetricValueBudget
mcp.coldStart.binary23 ms50 ms ✅
mcp.coldStart21.4 msreport-only

How each was taken:

Install

What bunx @snypd/cli init pulls, and how much of it is snypd rather than the runtime it ships in.

MetricValueBudget
install.download.mb36.31 MBreport-only
install.binary.mb83.97 MBreport-only
install.code.mb5.26 MB8 MB ✅

How each was taken:

Serving

Time to first byte for a static dist/, for the preview server, and for the Desk it serves at /_snypd.

MetricValueBudget
serve.ttfb0.11 msreport-only
preview.ttfb0.09 ms50 ms ✅
desk.ttfb2.12 msreport-only

How each was taken:

Tokens

What a page costs an agent to read, and what a site costs one to learn — counted with the tokenizer named above.

MetricValueBudget
tokens.page.md510 tokens2500 tokens ✅
tokens.page.html1610 tokensreport-only
tokens.page.reduction68.3 %report-only
tokens.learn4605 tokens6000 tokens ✅
tokens.page.html.editorial1663 tokensreport-only
tokens.page.reduction.editorial69.3 %report-only
tokens.learn.editorial4779 tokens6000 tokens ✅
tokens.tools2230 tokens3000 tokens ✅
tokens.tools.full4256 tokensreport-only

How each was taken:

The agent surface

The eight things a page has to offer a machine reader, and whether every one of them is there.

MetricValueBudget
surface.completeness100 %≥ 100 % ✅

How each was taken:

Visual primitives

Chart, diagram and flow at their worst shapes: render time and SVG weight, zero JS, zero CSS.

MetricValueBudget
viz.chart.renderMs0.1 ms3 ms ✅
viz.chart.svgKb7.6 KB12 KB ✅
viz.diagram.renderMs0.88 ms15 ms ✅
viz.diagram.svgKb13.2 KB25 KB ✅
viz.flow.renderMs0.66 ms15 ms ✅
viz.flow.svgKb14.5 KB25 KB ✅

How each was taken:

Suggestions

content.suggest_blocks over a hand-labelled corpus: how often it finds the chart inside the table, and how often it invents one.

MetricValueBudget
suggest.precision1≥ 0.8 ✅
suggest.recall1report-only
suggest.ms3.37 msreport-only

How each was taken:

The page in a browser

Six routes at 1280 and 390 px in headless Chrome: JavaScript on the wire, the webfont, axe violations, bytes and vitals.

MetricValueBudget
page.js.kb0 KB0 KB ✅
page.font.kb30.43 KB31 KB ✅
page.a11y.violations0 violations0 violations ✅
page.bytes.kb67.44 KBreport-only
page.lcp68 msreport-only
page.cls00.05 ✅

How each was taken:

The Desk in a browser

The same suite over /_snypd, with a draft in flight, and the first run of a scaffolded site.

MetricValueBudget
desk.js.kb0 KB0 KB ✅
desk.font.kb30.46 KB31 KB ✅
desk.a11y.violations0 violations0 violations ✅
desk.bytes.kb56.27 KBreport-only
desk.lcp76 msreport-only
desk.cls00.05 ✅
desk.first.js.kb0 KB0 KB ✅
desk.first.font.kb30.46 KB31 KB ✅
desk.first.a11y.violations0 violations0 violations ✅
desk.first.bytes.kb58.73 KBreport-only
desk.first.lcp76 msreport-only
desk.first.cls00.05 ✅

How each was taken: