Skip to main content

Supported

Two Next majors, both bundlers. Outside that range crust refuses to run rather than emit output derived from artifacts whose shape has not been verified.
Manifest shapes and artifact locations are undocumented and move on minor releases. A nightly CI job runs the fixtures against next@canary, so breakage surfaces before an issue does.

Non-goals

These are permanent. They were written down before the first user arrived, because saying no in month three is only easy if you said it in month zero.
No error tracking, no distributed tracing, no alerting. The optional span aggregator groups render time by route and stops there.
crust measures what your build produced and what your users’ browsers reported. It does not produce a score.
Next.js App Router only. A Pages Router app gets a clear refusal; a hybrid app gets its app/ routes analysed with a warning that pages/ is invisible to every number.
No accounts, no SaaS dashboard. Snapshots live in your repository.
It reads build output. It never changes how your app builds in production.
Until three separate people request the same option. Zero-config is a feature, and config surface is permanent API you cannot remove. The two JSON escape hatches in .perf/ are data, not configuration.

Known limits

  • Per-file attribution needs productionBrowserSourceMaps. Without it, route totals and shell analysis still work; attribution reports itself unavailable.
  • Taint propagation is module-level, not function-level. It errs toward reporting dynamism.
  • The stamping transform is not built. Component-level runtime attribution would need it; source maps cover file-level attribution instead, and measure better on Turbopack than webpack.
  • Server components rendered from props or children are reported as unknown rather than guessed at.

Maintenance

MIT. Supports Next 15–16, best-effort, issues triaged weekly. That is the commitment — stating it plainly is more useful than an implied promise nobody wrote down.