Build & Delivery

Benchmarks

Read reproducible Master CSS benchmarks for the runtime/CSSOM tradeoff: small runtime, fewer CSS rules, browser cost, and lifecycle behavior.

Overview

Benchmarks make Master CSS output, build, delivery, browser, and interaction costs inspectable. They are scoped evidence, not universal guarantees for every application.

This page collects the public benchmark snapshots used to explain Master CSS performance tradeoffs. Each result stays tied to the fixture, command, package versions, browser, machine, sample count, and limits that produced it.


Core hypothesis

The central performance question is not whether a runtime is faster than no runtime in isolation. It is whether small Runtime plus very few CSS rules can produce lower whole-browser cost than zero Runtime plus many CSS rules over the page lifecycle.

For Master CSS, runtime and progressive rendering trade a small amount of JavaScript work for lower delivered CSS, smaller CSSOM/rule volume, and fewer rules for the browser to consider during style recalculation. Tailwind CSS is useful here as a zero-runtime static CSS control: it does not provide a runtime-equivalent implementation, but it does represent the large static CSS side of the tradeoff.

The current evidence should be read as directional. It can support the hypothesis in measured fixtures when runtime/progressive modes reduce CSSOM/rule volume and style recalculation enough to offset runtime bootstrap, observe, and mutation work. It does not establish that every application will be faster.

Selector matching is not directly measured as a stable Chromium metric in these suites. It is inferred from delivered selectors, CSSOM rule count, runtime-generated rule count, and trace-derived style recalculation.


How to read these results

Benchmarks are useful when they answer a narrow question. This page builds the runtime/CSSOM hypothesis in a validation ladder:

  1. Static CSS output and structure show how many bytes, selectors, declarations, and rules each static setup delivers.
  2. Browser CSS cost calibrates how Chromium responds when CSS rule volume grows while DOM is fixed.
  3. Delivery modes show what Master static, runtime, progressive, and Tailwind static send and do on initial load.
  4. Interaction cost measures post-load DOM and class changes, including runtime rule work.
  5. Browser lifecycle evidence combines long-session browser work, CSSOM/rule volume, and runtime instrumentation.

Read each chart as evidence for the measured fixture and command, then compare it with the complete table and committed snapshot before applying the result to another app.

QuestionPrimary evidence
How much CSS does the documentation site transfer?Page CSS size snapshot
How large is generated static CSS?Static CSS output and CSS structure snapshots
Where does Master CSS build time go?Build path diagnostics
What does CSS rule volume cost in Chromium?Browser CSS cost calibration
What does each delivery mode send and do on first load?Master CSS delivery modes
What happens after load when classes and DOM change?Interaction cost
Does runtime work change long-session browser cost?Browser lifecycle evidence

Tailwind CSS is not a runtime-equivalent comparison. In runtime-oriented suites, it is the static browser-control baseline for the zero-runtime, larger-static-CSS side of the hypothesis.

Lower numbers are not automatically better in every context. A smaller CSS artifact can shift work into runtime, a faster cold command can hide less useful output, and a local Chromium trace does not replace real production telemetry.

Before publishing or acting on a number, the fixture must first pass correctness checks: rendered output should match the intended UI, computed-style assertions should pass, generated output should be attributable to the fixture, and missing-rule checks should fail loudly.

No benchmark result is permission to change CSS output, cascade order, hydration behavior, runtime behavior, extraction behavior, or public APIs. If a result exposes a real hot path, the fix still needs the owning package tests and compatibility review.


Current results

Page CSS size

Question answered: how much inline and external CSS do popular documentation pages transfer in the initial HTML response?

698 kB
( Master CSS 23.4 kB + Other inline 0.2 kB + External CSS 2.3 kB )
698 kB
React, 4.2x larger
698 kB
Vue.js, 7.2x larger
698 kB
Angular, 8.9x larger
698 kB
Material UI, 10.7x larger
698 kB
Bootstrap, 11.4x larger
698 kB
Next.js, 16.4x larger
698 kB
Tailwind CSS, 27.0x larger
The total size of inline and external styles on popular documentation sites.

This snapshot counts inline style tags and external stylesheets discovered from each page's initial HTML. Master CSS stays near 6 kB brotli on this documentation site because progressive rendering emits the page rules first, then lets runtime rendering handle later dynamic classes.

Limits: this is a page transfer measurement, not a browser timing metric. Browser cache state, CDN behavior, JavaScript-loaded styles, fonts, images, and application runtime work are outside the snapshot.

Static CSS output, structure, and production build

Question answered: how do equivalent static Master CSS and Tailwind CSS v4 fixtures compare for generated CSS bytes, CSS AST structure, and full production command timing?

The curated snapshot combines css-output-size, build-performance, and css-structure results. The headline charts use the docs fixture and CLI variants so the first view stays focused on static artifact output.

MetricValueDetail
Fixtures4
CSS output4/4fixtures where Master CSS is smaller than Tailwind CSS by brotli bytes in the CLI setup
Build command4/4fixtures where Tailwind CSS has the lower cold production command median in the CLI setup
Build samples3measured command rounds per variant
CSS structureASTrules, selectors, declarations, layers, at-rules, and selector scores are parsed from generated CSS
Curated static comparison snapshot across all measured fixtures.

Representative fixture

The docs fixture represents a dense article and documentation layout with navigation, code blocks, and tables.

Master CSS1.4x smaller
1.8 kB
Tailwind CSS
2.6 kB
Brotli-compressed CSS output for the docs fixture using the CLI setup.
Master CSS
196 ms
Tailwind CSS2x faster
99.5 ms
Cold production command median for the docs fixture using the CLI setup.
Master CSS1.6x fewer
142
Tailwind CSS
226
Generated declaration counts for the docs fixture from a CSS AST parse.

Complete data

The complete tables keep every measured fixture and both CLI/Vite setup variants.

FixtureVariantRawGzipBrotliFiles
MinimalMaster CSS static CLI5.1 kB1.9 kB1.6 kB1
MinimalMaster CSS static Vite5.1 kB1.9 kB1.6 kB1
MinimalTailwind CSS CLI9.2 kB2.6 kB2.2 kB1
MinimalTailwind CSS Vite7.7 kB2.4 kB2.1 kB1
DocsMaster CSS static CLI5.8 kB2.2 kB1.8 kB1
DocsMaster CSS static Vite5.8 kB2.2 kB1.8 kB1
DocsTailwind CSS CLI12.0 kB3.0 kB2.6 kB1
DocsTailwind CSS Vite10.0 kB2.8 kB2.4 kB1
DashboardMaster CSS static CLI6.0 kB2.1 kB1.8 kB1
DashboardMaster CSS static Vite6.0 kB2.1 kB1.8 kB1
DashboardTailwind CSS CLI10.5 kB2.8 kB2.4 kB1
DashboardTailwind CSS Vite8.7 kB2.6 kB2.3 kB1
Stress CSSMaster CSS static CLI11.7 kB3.1 kB2.0 kB1
Stress CSSMaster CSS static Vite11.7 kB3.1 kB2.1 kB1
Stress CSSTailwind CSS CLI17.1 kB3.7 kB2.5 kB1
Stress CSSTailwind CSS Vite12.7 kB3.4 kB2.3 kB1
Raw, gzip, and brotli CSS byte data for every measured fixture and setup.
FixtureVariantCold medianRepeat medianSamples
MinimalMaster CSS static CLI190 ms186 ms3
MinimalMaster CSS static Vite263 ms260 ms3
MinimalTailwind CSS CLI95.2 ms98.0 ms3
MinimalTailwind CSS Vite160 ms160 ms3
DocsMaster CSS static CLI196 ms188 ms3
DocsMaster CSS static Vite284 ms267 ms3
DocsTailwind CSS CLI99.5 ms95.7 ms3
DocsTailwind CSS Vite164 ms162 ms3
DashboardMaster CSS static CLI200 ms189 ms3
DashboardMaster CSS static Vite274 ms268 ms3
DashboardTailwind CSS CLI99.7 ms95.4 ms3
DashboardTailwind CSS Vite165 ms170 ms3
Stress CSSMaster CSS static CLI218 ms207 ms3
Stress CSSMaster CSS static Vite282 ms279 ms3
Stress CSSTailwind CSS CLI101 ms103 ms3
Stress CSSTailwind CSS Vite174 ms168 ms3
Cold and repeat production command timing data for every measured fixture and setup.
FixtureVariantRulesSelectorsDeclarationsCustom propertiesAt-rulesLayer blocksUnlayered rulesCombinatorsMax specificityMax complexity
MinimalMaster CSS static CLI84135124115310112
MinimalMaster CSS static Vite84135124115310112
MinimalTailwind CSS CLI861311744113413109
MinimalTailwind CSS Vite991321994112413109
DocsMaster CSS static CLI98149142146310112
DocsMaster CSS static Vite98149142146310112
DocsTailwind CSS CLI1021472265625413109
DocsTailwind CSS Vite1161492515623413109
DashboardMaster CSS static CLI103154147155310202
DashboardMaster CSS static Vite103154147155310202
DashboardTailwind CSS CLI1061511954213413109
DashboardTailwind CSS Vite1181512204212413209
Stress CSSMaster CSS static CLI316367364205310112
Stress CSSMaster CSS static Vite316367364205310112
Stress CSSTailwind CSS CLI3003453692811413109
Stress CSSTailwind CSS Vite3123463932810413109
Rule, selector, declaration, at-rule, layer, and selector-shape data parsed from generated CSS.

Interpretation: CSS structure metrics explain why byte counts differ before browser-cost claims are introduced. Tailwind CSS and Master CSS fixtures target equivalent rendered UI intent, not identical class strings.

Limits: these numbers do not measure browser parsing, style recalculation, layout, paint, interaction cost, watch mode, or HMR.

Build path diagnostics

Question answered: which Master CSS startup, integration, extraction, and compiler substeps explain full command cost?

This snapshot combines startup-diagnostics, build-diagnostics, compiler-diagnostics, and extraction-diagnostics. It explains the Master CSS build path; it is not a cross-framework production benchmark.

MetricValueDetail
Fixtures4minimal, docs, dashboard, and stress-css diagnostic fixtures
Source reports4startup, build, compiler, and extraction diagnostics
EnvironmentApple M3 Max, v24.15.0darwin 25.5.0 arm64, 16 CPUs
CLI command vs extraction198.3 ms / 16 ms`docs` fixture full command envelope versus CLI CSS extraction
Vite overhead vs scanner init145.8 ms / 5.33 ms`docs` fixture Master Vite command overhead versus scanner init
Compiler and extraction13.5 ms / 12.9 ms`docs` fixture diagnostic compiler total and diagnostic extraction total
Curated Master CSS build-path diagnostics snapshot.

CLI path

Docs fixture medians
Full CLI command
198.3 ms3 samples
CLI startup probe
203.5 ms3 samples
Scanner import probe
74.4 ms3 samples
Source scan
17.9 ms3 samples
CSS extraction
16 ms3 samples

Vite path

Docs fixture medians
Master Vite command overhead
145.8 ms3 samples
@master/css.vite import probe
76 ms3 samples
Vite core module import probe
105.3 ms3 samples
Vite scanner init
5.33 ms3 samples
Vite bundle CSS extraction
16.2 ms3 samples

Compiler and extraction

Docs fixture medians
Production createExtractedCSS
15.8 ms3 samples
Diagnostic compiler total
13.5 ms3 samples
Render compiled CSS
6.21 ms3 samples
Diagnostic extraction total
12.9 ms3 samples
Engine rule generation
1.89 ms3 samples
Diagnostic medians for the docs fixture. Startup probes are directional and are not additive flamegraphs.
FixtureCLI commandCLI extractionVite overheadVite importVite scannerCompiler totalExtraction totalFinal CSS
Minimal190.3 ms15 ms145.8 ms72.5 ms5.69 ms11.8 ms12 ms5.1 kB
Docs198.3 ms16 ms145.8 ms76 ms5.33 ms13.5 ms12.9 ms5.8 kB
Dashboard193.1 ms17.3 ms150.6 ms71.7 ms5.11 ms13.5 ms13 ms6 kB
Stress CSS215.5 ms21.2 ms163.7 ms79.5 ms6.11 ms17.4 ms18.3 ms11.7 kB
Complete build-path diagnostic snapshot data for every measured fixture.

Interpretation: ordinary fixture command cost is currently dominated by cold process/module startup and integration startup overhead, while normal-fixture compiler and extraction medians are smaller.

Limits: diagnostic probes explain envelopes and substeps. They do not justify changing generated CSS, cascade order, extraction correctness, runtime behavior, or public APIs.

Browser CSS cost

Question answered: how does CSS rule volume affect Chromium style recalculation, layout, and paint when DOM is fixed, and how does DOM scaling behave when CSS is fixed?

This suite uses local fixture pages, deterministic external CSS, Playwright, and Chromium tracing. It is a browser-only calibration suite, not a Master CSS versus Tailwind CSS comparison.

MetricValueDetail
CSS levels4fixed visible DOM while deterministic external CSS grows
Largest CSS45.6 kB90,042 declarations in the warm-cache xlarge-css variant
DOM controls3fixed CSS while repeated DOM items grow
Largest DOM21,012measured DOM nodes in the warm-cache large-dom variant
BrowserChromium 149.0.7827.55headless browser used for the committed trace snapshot
Trace samples3measured browser rounds per warm-cache variant
Curated browser CSS cost snapshot.

Style recalculation

Warm-cache median
Small CSS
0.5 ms1.6 kB, 792 decls
Medium CSS
0.5 ms5.4 kB, 7,542 decls
Large CSS
0.5 ms16.4 kB, 30,042 decls
XLarge CSS
0.5 ms45.6 kB, 90,042 decls

Layout

Warm-cache median
Small CSS
1 ms1.6 kB, 792 decls
Medium CSS
1.1 ms5.4 kB, 7,542 decls
Large CSS
1 ms16.4 kB, 30,042 decls
XLarge CSS
1 ms45.6 kB, 90,042 decls

Paint

Warm-cache median
Small CSS
0.6 ms1.6 kB, 792 decls
Medium CSS
0.8 ms5.4 kB, 7,542 decls
Large CSS
0.6 ms16.4 kB, 30,042 decls
XLarge CSS
0.6 ms45.6 kB, 90,042 decls
Warm-cache trace medians while CSS rule volume grows and visible DOM stays fixed.

Style recalculation

Warm-cache median
Small DOM
1.1 ms712 nodes
Medium DOM
8.3 ms7,012 nodes
Large DOM
23.8 ms21,012 nodes

Layout

Warm-cache median
Small DOM
2.2 ms712 nodes
Medium DOM
20.4 ms7,012 nodes
Large DOM
64.6 ms21,012 nodes

Paint

Warm-cache median
Small DOM
1.8 ms712 nodes
Medium DOM
5.8 ms7,012 nodes
Large DOM
14.5 ms21,012 nodes
Warm-cache trace medians while DOM volume grows and CSS stays fixed.
AxisVariantCacheCSS brotliRulesDeclarationsDOM nodesStyle recalcLayoutPaintSamples
CSS volumeSmall CSSCold cache1.6 kB2637922050.6 ms4.5 ms1.2 ms3
CSS volumeSmall CSSWarm cache1.6 kB2637922050.5 ms1 ms0.6 ms3
CSS volumeMedium CSSCold cache5.4 kB2,5137,5422051 ms4.3 ms1.2 ms3
CSS volumeMedium CSSWarm cache5.4 kB2,5137,5422050.5 ms1.1 ms0.8 ms3
CSS volumeLarge CSSCold cache16.4 kB10,01330,0422052 ms4.1 ms1.2 ms3
CSS volumeLarge CSSWarm cache16.4 kB10,01330,0422050.5 ms1 ms0.6 ms3
CSS volumeXLarge CSSCold cache45.6 kB30,01390,0422054.1 ms4.2 ms1.2 ms3
CSS volumeXLarge CSSWarm cache45.6 kB30,01390,0422050.5 ms1 ms0.6 ms3
DOM scalingSmall DOMCold cache0.5 kB15507121.2 ms5.4 ms2 ms3
DOM scalingSmall DOMWarm cache0.5 kB15507121.1 ms2.2 ms1.8 ms3
DOM scalingMedium DOMCold cache0.5 kB15507,0128.2 ms24.9 ms5.9 ms3
DOM scalingMedium DOMWarm cache0.5 kB15507,0128.3 ms20.4 ms5.8 ms3
DOM scalingLarge DOMCold cache0.5 kB155021,01224.2 ms70.9 ms14.9 ms3
DOM scalingLarge DOMWarm cache0.5 kB155021,01223.8 ms64.6 ms14.5 ms3
Complete browser CSS cost data for CSS volume and DOM scaling variants.

Interpretation: the CSS volume curve is the main input for judging how much upfront CSS a delivery mode asks Chromium to load before interaction. The DOM scaling control helps separate DOM, style, and layout scaling from CSS payload size.

Limits: these numbers do not measure runtime rule generation, real application JavaScript, Firefox, WebKit, CDN behavior, or public real-world page variance. Chromium trace event names can change across browser versions.

Master CSS delivery modes

Question answered: what initial payload, local Chromium load cost, runtime bootstrap cost, manifest loading, and progressive adoption behavior does each delivery mode produce?

The suite compares Master CSS static, runtime, progressive, and Tailwind CSS static browser-control variants across the static fixture set.

MetricValueDetail
Fixtures4static fixture set measured across every delivery mode
Modes4Master static, runtime, progressive, and Tailwind static
BrowserChromium 149.0.7827.55headless browser used for local trace measurements
Trace samples3measured browser rounds per variant
Progressive adoption4/4fixtures where progressive runtime adopted server-rendered CSS
Curated Master CSS delivery modes snapshot.

Representative fixture

The primary charts show the docs fixture.

Master CSS static
3 kB2 requests
HTML1.2 kB
External CSS1.8 kB
Inline CSS0 kB
Runtime JS0 kB
Manifest JSON0 kB
Hydration manifest0 kB
Master CSS runtime
34.2 kB3 requests
HTML1.6 kB
External CSS0 kB
Inline CSS0 kB
Runtime JS22.8 kB
Manifest JSON9.8 kB
Hydration manifest0 kB
Master CSS progressive
38.6 kB3 requests
HTML3.6 kB
External CSS0 kB
Inline CSS0.9 kB
Runtime JS22.8 kB
Manifest JSON9.8 kB
Hydration manifest1.6 kB
Tailwind CSS static
3.7 kB2 requests
HTML1.1 kB
External CSS2.6 kB
Inline CSS0 kB
Runtime JS0 kB
Manifest JSON0 kB
Hydration manifest0 kB
Brotli-compressed initial payload composition for the docs fixture.

Navigation to ready

Median
Master CSS static
22.8 ms3 samples
Master CSS runtime
38.7 ms3 samples
Master CSS progressive
37.5 ms3 samples
Tailwind CSS static
22.9 ms3 samples

Style recalculation

Median
Master CSS static
1.1 ms3 samples
Master CSS runtime
0.9 ms3 samples
Master CSS progressive
0.7 ms3 samples
Tailwind CSS static
1.1 ms3 samples

Layout

Median
Master CSS static
8.7 ms3 samples
Master CSS runtime
5.1 ms3 samples
Master CSS progressive
4.5 ms3 samples
Tailwind CSS static
8 ms3 samples

Paint

Median
Master CSS static
1.5 ms3 samples
Master CSS runtime
1 ms3 samples
Master CSS progressive
1 ms3 samples
Tailwind CSS static
1.3 ms3 samples
Local Chromium load timing medians for the docs fixture.

Runtime bootstrap

Median
Master CSS runtime
13.9 ms3 samples
Master CSS progressive
17.7 ms3 samples

Runtime observe

Median
Master CSS runtime
6.5 ms3 samples
Master CSS progressive
2.6 ms3 samples
Runtime bootstrap and observe medians for Master runtime and progressive modes.
FixtureModePayloadHTMLExternal CSSInline CSSRuntime JSManifest JSONHydration manifestRulesDeclarationsNavigation readyStyle recalcLayoutPaintRuntime bootstrapRuntime observeProgressive adopted
MinimalMaster CSS static2.3 kB0.7 kB1.6 kB0 kB0 kB0 kB0 kB8412421.9 ms0.6 ms5.9 ms0.8 ms0 ms0 ms0
MinimalMaster CSS runtime33.6 kB1.1 kB0 kB0 kB22.8 kB9.8 kB0 kB0039.1 ms0.7 ms3.7 ms0.5 ms14 ms5.6 ms0
MinimalMaster CSS progressive36.9 kB2.6 kB0 kB0.6 kB22.8 kB9.8 kB1.1 kB465631.4 ms0.5 ms3.6 ms0.6 ms15.3 ms1.4 ms1
MinimalTailwind CSS static2.9 kB0.7 kB2.2 kB0 kB0 kB0 kB0 kB8617419.5 ms0.9 ms6 ms0.7 ms0 ms0 ms0
DocsMaster CSS static3 kB1.2 kB1.8 kB0 kB0 kB0 kB0 kB9814222.8 ms1.1 ms8.7 ms1.5 ms0 ms0 ms0
DocsMaster CSS runtime34.2 kB1.6 kB0 kB0 kB22.8 kB9.8 kB0 kB0038.7 ms0.9 ms5.1 ms1 ms13.9 ms6.5 ms0
DocsMaster CSS progressive38.6 kB3.6 kB0 kB0.9 kB22.8 kB9.8 kB1.6 kB607437.5 ms0.7 ms4.5 ms1 ms17.7 ms2.6 ms1
DocsTailwind CSS static3.7 kB1.1 kB2.6 kB0 kB0 kB0 kB0 kB10222622.9 ms1.1 ms8 ms1.3 ms0 ms0 ms0
DashboardMaster CSS static2.9 kB1.1 kB1.8 kB0 kB0 kB0 kB0 kB10314721.8 ms9.3 ms2.8 ms1.7 ms0 ms0 ms0
DashboardMaster CSS runtime34.1 kB1.6 kB0 kB0 kB22.8 kB9.8 kB0 kB0039.1 ms7.3 ms2.5 ms1 ms13.2 ms6.2 ms0
DashboardMaster CSS progressive38.4 kB3.5 kB0 kB0.8 kB22.8 kB9.8 kB1.5 kB668035.2 ms6.7 ms2.4 ms1.1 ms16.9 ms2.9 ms1
DashboardTailwind CSS static3.5 kB1.1 kB2.4 kB0 kB0 kB0 kB0 kB10619523.3 ms10.2 ms2.7 ms1.4 ms0 ms0 ms0
Stress CSSMaster CSS static3.5 kB1.5 kB2 kB0 kB0 kB0 kB0 kB31636421.8 ms1.7 ms6.9 ms1.3 ms0 ms0 ms0
Stress CSSMaster CSS runtime34.4 kB1.9 kB0 kB0 kB22.8 kB9.8 kB0 kB0042.8 ms1.6 ms4 ms0.9 ms17.6 ms10.3 ms0
Stress CSSMaster CSS progressive41.3 kB5.3 kB0 kB1.1 kB22.8 kB9.8 kB2.4 kB27929734.5 ms1.4 ms4 ms0.9 ms18.7 ms2 ms1
Stress CSSTailwind CSS static4 kB1.5 kB2.5 kB0 kB0 kB0 kB0 kB30036922.5 ms2.5 ms7.2 ms1.2 ms0 ms0 ms0
Complete delivery mode snapshot data for every measured fixture and mode.

Interpretation: progressive begins with server/build-time CSS in the HTML and adds a runtime handoff. Runtime mode starts smaller on CSS output but pays browser runtime and manifest costs when classes are discovered in the DOM.

Limits: these numbers measure initial local fixture loads only. Post-load mutation belongs to the interaction suite. Master static and Tailwind static use CLI-generated CSS from equivalent fixture intent, not identical class strings.

Interaction cost

Question answered: how expensive are post-load class toggles, first-time runtime rule generation, DOM append/remove, theme switches, viewport resize, and cleanup cycles?

The suite measures local Chromium interactions across dynamic, dashboard, and stress-dom fixtures. Tailwind CSS static variants act as browser controls for style/layout/paint work; they do not have a client-side runtime rule-generation equivalent.

MetricValueDetail
Fixtures3dynamic, dashboard, and stress-dom interaction fixtures
Variants54supported fixture, mode, and scenario combinations
BrowserChromium 149.0.7827.55headless browser used for local trace measurements
Samples1measured rounds per default interaction variant
Progressive adoption3/3fixtures with at least one adopted progressive interaction variant
Curated interaction cost snapshot.

Existing class toggle

Mutation-ready median
Master CSS static
27.4 ms64 elements
Master CSS runtime
23.9 ms64 elements
Master CSS progressive
22.8 ms64 elements
Tailwind CSS static
29.4 ms64 elements

New class toggle

Mutation-ready median
Master CSS runtime
24 ms64 elements
Master CSS progressive
23.9 ms64 elements

DOM append/remove

Mutation-ready median
Master CSS static
27.8 ms48 elements
Master CSS runtime
22.2 ms48 elements
Master CSS progressive
24.1 ms48 elements
Tailwind CSS static
28.1 ms48 elements
Mutation-ready medians for primary dynamic fixture scenarios.

Existing class runtime update

Runtime mutation median
Master CSS runtime
0 ms0 rules
Master CSS progressive
0 ms0 rules

New class runtime update

Runtime mutation median
Master CSS runtime
0.1 ms1 rules
Master CSS progressive
0.8 ms1 rules

Cleanup-cycle runtime update

Runtime mutation median
Master CSS runtime
0.5 ms2 rules
Master CSS progressive
1.1 ms2 rules
Runtime rule-update medians for Master runtime and progressive dynamic fixture scenarios.
FixtureScenarioModeReadyRuntime updateRule deltaStyle byte deltaStyle recalcLayoutPaintDOM nodesAffectedComputed styleCleanupProgressive adoptedSamples
DynamicExisting class toggleMaster CSS static27.4 ms0 ms00 kB0.3 ms0 ms0.4 ms308641101
DynamicExisting class toggleMaster CSS runtime23.9 ms0 ms00 kB0.3 ms0 ms0.4 ms309641101
DynamicExisting class toggleMaster CSS progressive22.8 ms0 ms00 kB0.3 ms0 ms0.4 ms310641111
DynamicExisting class toggleTailwind CSS static29.4 ms0 ms00 kB0.5 ms0 ms0.5 ms308641101
DynamicNew class toggleMaster CSS runtime24 ms0.1 ms10.1 kB1.3 ms0 ms1.3 ms309641101
DynamicNew class toggleMaster CSS progressive23.9 ms0.8 ms10 kB0.8 ms0 ms0.6 ms310641111
DynamicDOM append/removeMaster CSS static27.8 ms0 ms00 kB0 ms0 ms0 ms308481101
DynamicDOM append/removeMaster CSS runtime22.2 ms0 ms00 kB0 ms0 ms0 ms309481101
DynamicDOM append/removeMaster CSS progressive24.1 ms0 ms00 kB0 ms0 ms0 ms310481111
DynamicDOM append/removeTailwind CSS static28.1 ms0 ms00 kB0 ms0 ms0 ms308481101
DynamicTheme switchMaster CSS static28.5 ms0 ms00 kB0.3 ms0 ms0.4 ms308641101
DynamicTheme switchMaster CSS runtime28 ms0.2 ms10.1 kB0.6 ms0 ms0.4 ms309641101
DynamicTheme switchMaster CSS progressive21.2 ms0.5 ms10 kB0.5 ms0 ms0.5 ms310641111
DynamicTheme switchTailwind CSS static29.3 ms0 ms00 kB0.4 ms0 ms0.4 ms308641101
DynamicViewport resizeMaster CSS static58.5 ms0 ms00 kB0.5 ms0.8 ms1.3 ms308641101
DynamicViewport resizeMaster CSS runtime59.6 ms0 ms00 kB0.2 ms0.8 ms0.9 ms309641101
DynamicViewport resizeMaster CSS progressive57.7 ms0 ms00 kB0.2 ms0.9 ms0.9 ms310641111
DynamicViewport resizeTailwind CSS static51.8 ms0 ms00 kB0.2 ms0.8 ms0.9 ms308641101
DynamicMutation cleanup cycleMaster CSS static161.1 ms0 ms00 kB1.1 ms1.4 ms3.4 ms3081921101
DynamicMutation cleanup cycleMaster CSS runtime155.5 ms0.5 ms20.1 kB1.8 ms1.5 ms3.6 ms3091921101
DynamicMutation cleanup cycleMaster CSS progressive160.5 ms1.1 ms20 kB1.8 ms1.6 ms3.9 ms3101921111
DynamicMutation cleanup cycleTailwind CSS static167.3 ms0 ms00 kB1.4 ms1.5 ms4.1 ms3081921101
DashboardExisting class toggleMaster CSS static26.9 ms0 ms00 kB0.7 ms0 ms0.9 ms9801601101
DashboardExisting class toggleMaster CSS runtime32 ms0 ms00 kB0.7 ms0 ms0.8 ms9811601101
DashboardExisting class toggleMaster CSS progressive26.6 ms0 ms00 kB0.7 ms0 ms0.8 ms9821601111
DashboardExisting class toggleTailwind CSS static25.1 ms0 ms00 kB1 ms0 ms1 ms9801601101
DashboardDOM append/removeMaster CSS static25.2 ms0 ms00 kB0 ms0 ms0 ms980801101
DashboardDOM append/removeMaster CSS runtime30 ms0 ms00 kB0 ms0 ms0 ms981801101
DashboardDOM append/removeMaster CSS progressive21.9 ms0 ms00 kB0 ms0 ms0 ms982801111
DashboardDOM append/removeTailwind CSS static32.8 ms0 ms00 kB0 ms0 ms0.4 ms980801101
DashboardTheme switchMaster CSS static27.2 ms0 ms00 kB0.6 ms0 ms0.8 ms9801601101
DashboardTheme switchMaster CSS runtime25.8 ms0.1 ms10.1 kB1 ms0 ms0.8 ms9811601101
DashboardTheme switchMaster CSS progressive27.2 ms0.5 ms10 kB1 ms0 ms0.8 ms9821601111
DashboardTheme switchTailwind CSS static26.1 ms0 ms00 kB0.8 ms0 ms1 ms9801601101
DashboardViewport resizeMaster CSS static54.6 ms0 ms00 kB0.2 ms2.2 ms1.7 ms9801601101
DashboardViewport resizeMaster CSS runtime55.3 ms0 ms00 kB0.2 ms2.2 ms1.7 ms9811601101
DashboardViewport resizeMaster CSS progressive58.9 ms0 ms00 kB0.3 ms2.4 ms1.7 ms9821601111
DashboardViewport resizeTailwind CSS static56.1 ms0 ms00 kB0.3 ms2.2 ms2 ms9801601101
Stress DOMExisting class toggleMaster CSS static26.9 ms0 ms00 kB2.4 ms0 ms1.2 ms3,6206001101
Stress DOMExisting class toggleMaster CSS runtime29.2 ms0 ms00 kB2.2 ms0 ms1.2 ms3,6216001101
Stress DOMExisting class toggleMaster CSS progressive23.4 ms0 ms00 kB2.3 ms0 ms1.1 ms3,6226001111
Stress DOMExisting class toggleTailwind CSS static29.9 ms0 ms00 kB3.3 ms0 ms1.3 ms3,6206001101
Stress DOMDOM append/removeMaster CSS static28.7 ms0 ms00 kB0 ms0 ms0 ms3,6201601101
Stress DOMDOM append/removeMaster CSS runtime24.2 ms0 ms00 kB0 ms0 ms0 ms3,6211601101
Stress DOMDOM append/removeMaster CSS progressive24.4 ms0 ms00 kB0 ms0 ms0 ms3,6221601111
Stress DOMDOM append/removeTailwind CSS static31.8 ms0 ms00 kB0 ms0 ms0 ms3,6201601101
Stress DOMViewport resizeMaster CSS static58.2 ms0 ms00 kB0.4 ms7.6 ms3.5 ms3,6206001101
Stress DOMViewport resizeMaster CSS runtime58.6 ms0 ms00 kB0.4 ms7.5 ms3.4 ms3,6216001101
Stress DOMViewport resizeMaster CSS progressive56 ms0 ms00 kB0.4 ms7.6 ms3.6 ms3,6226001111
Stress DOMViewport resizeTailwind CSS static57.7 ms0 ms00 kB0.5 ms7.4 ms3.9 ms3,6206001101
Stress DOMMutation cleanup cycleMaster CSS static128.1 ms0 ms00 kB2 ms2.8 ms9 ms3,6204801101
Stress DOMMutation cleanup cycleMaster CSS runtime126.6 ms0.3 ms20.1 kB6.8 ms2.7 ms8.8 ms3,6214801101
Stress DOMMutation cleanup cycleMaster CSS progressive132.8 ms1 ms20 kB7 ms2.8 ms8.9 ms3,6224801111
Stress DOMMutation cleanup cycleTailwind CSS static133 ms0 ms00 kB2.8 ms3.1 ms10.7 ms3,6204801101
Complete interaction cost data for supported fixture, mode, and scenario combinations.

Interpretation: runtime and progressive modes should be read in two layers: user-visible mutation readiness, then runtime stylesheet work. Existing-rule toggles, first-time class generation, DOM changes, and cleanup cycles answer different performance questions.

Limits: these numbers do not measure route transitions, HMR, dev workflow, CDN behavior, Firefox, WebKit, or public real-world application variance.

Browser lifecycle and INP-style interactions

Question answered: can small runtime/progressive work plus low CSSOM/rule volume lower whole-browser lifecycle cost compared with zero-runtime static CSS?

The suite is the closest current test of the core hypothesis. It keeps Tailwind CSS as the zero-runtime static browser-control setup and compares it with Master CSS static, runtime, and progressive setups across lifecycle scenarios. The latency value is an INP-style local fixture measurement, not real Web Vitals INP.

MetricValueDetail
Snapshot variants647 scenarios across 4 modes
Evidence modes4/4segmented five-minute long-session reports
BrowserChromium 149.0.7827.55headless browser used for local trace measurements
Long-session samples1measured five-minute rounds per mode in committed evidence
Computed style checks4/4five-minute evidence variants with computed-style-valid = 1
Progressive adoption1/1Master progressive long-session evidence variant
Coverage and correctness checks for browser lifecycle evidence.

Style recalculation

Five-minute median
Master CSS static
7,770 ms
Master CSS runtime
6,205.9 ms
Master CSS progressive
5,353.3 ms
Tailwind CSS static
9,107.8 ms

Layout

Five-minute median
Master CSS static
1,513.8 ms
Master CSS runtime
1,443.3 ms
Master CSS progressive
1,363.8 ms
Tailwind CSS static
1,495.1 ms

Paint

Five-minute median
Master CSS static
6,508.5 ms
Master CSS runtime
5,861 ms
Master CSS progressive
5,231 ms
Tailwind CSS static
5,761.9 ms

Long tasks

Five-minute median
Master CSS static
0
Master CSS runtime
0
Master CSS progressive
0
Tailwind CSS static
0

CSSOM rules

Five-minute median
Master CSS static
2
Master CSS runtime
0
Master CSS progressive
0
Tailwind CSS static
22

Runtime mutation work

Five-minute median
Master CSS static
0 ms0 rules
Master CSS runtime
70.7 ms47 rules
Master CSS progressive
78.7 ms47 rules
Tailwind CSS static
0 ms0 rules
Five-minute long-session medians for browser rendering and runtime work.
ModeINP-style latencyStyle recalcLayoutPaintLong tasksCSSOM rulesRuntime rulesRuntime mutationJS heapComputed styleProgressive adoptedSamples
Master CSS static300,058.8 ms7,770 ms1,513.8 ms6,508.5 ms0200 ms1,750.1 kB101
Master CSS runtime300,062.5 ms6,205.9 ms1,443.3 ms5,861 ms004770.7 ms6,119.4 kB101
Master CSS progressive300,058.3 ms5,353.3 ms1,363.8 ms5,231 ms004778.7 ms5,944.2 kB111
Tailwind CSS static300,062.2 ms9,107.8 ms1,495.1 ms5,761.9 ms02200 ms1,798.1 kB101
Complete five-minute long-session evidence for every mode.

Interpretation: current five-minute local Chromium evidence directionally supports the hypothesis for style recalculation: Master runtime and progressive show lower style recalculation medians than the Tailwind static browser control while carrying measured runtime mutation work. Layout, paint, long-task, and INP-style latency medians remain measured data, not wins, because they do not establish the same directional advantage.

Limits: selector matching time remains an inference from CSSOM/rule volume plus style recalculation unless Chromium exposes a stable trace metric for it. CSSOM memory and GC pressure are reported only when the collection method is stable enough to reproduce on the same browser version.


Methodology and limits

Fixture matrix

Fixture-based suites compare equivalent UI output, not identical class strings.

FixturePurposeStress area
minimalSmall useful page or landing sectionFramework overhead, cold-start cost, and minimum payload
docsDense article, navigation, code blocks, tablesDocumentation layout, typography, nested content, and CSS output shape
dashboardRepeated cards, tables, filters, charts, statesRule reuse, duplicated utilities, and large DOM
dynamicInsert, remove, and toggle classes during interactionRuntime mutation, extraction limits, and recalculation cost
stress-cssControlled small, medium, and large CSS outputsBrowser style calculation as CSS volume grows
stress-domLarge DOM with fixed CSSDOM/style/layout scaling isolated from CSS output size

Each fixture should publish source markup, Master CSS setup, Tailwind CSS setup when relevant, generated outputs, and exact commands.

Metric families

AreaExamples
TransferRaw, gzip, and brotli bytes for CSS, HTML, runtime JavaScript, manifest JSON, hydration manifest, and request count
CSS structureRule count, selector count, declaration count, cascade layers, at-rules, custom properties, and selector complexity
BuildCold command, repeat command, startup probes, scanner time, extraction time, and compiler time
Browser loadNavigation-ready time, stylesheet parse/attach, style recalculation, layout, paint, long tasks, and cache mode
RuntimeBootstrap, observe/hydrate, rule generation, CSSOM insertion/deletion, MutationObserver delivery, retained generated rules, and cleanup cycles
InteractionExisting-class toggles, new-rule generation, DOM append/remove, theme switch, viewport/container resize, and INP-style local latency
CorrectnessOutput hash, screenshot smoke, computed-style assertions, missing-rule checks, generated file inventory, cleanup validity, and progressive adoption

Browser timings should be measured with fixed viewport, device scale, browser version, warmup rounds, measured rounds, and separated cold/warm cache modes when cache state changes interpretation.

Delivery modes

ModeBenchmark focus
RuntimeRuntime bundle size, manifest delivery, initial DOM scan, CSSOM insertion/deletion, mutation handling, and repeated mutation cleanup
StaticGenerated stylesheet size, source scanning, source include/exclude behavior, safelist/blocklist, warm rebuild, and mixed authored CSS
ProgressiveInline first-page CSS, hydration manifest size, runtime adoption success/fallback, and post-hydration dynamic classes

Runtime and progressive rendering optimize what CSS is delivered up front. They do not make browser style calculation free: when an interaction creates many first-time utility rules, the browser still needs to account for those new stylesheet rules before it can paint the updated DOM.

Tailwind CSS comparisons

Tailwind CSS comparisons use pinned Tailwind CSS v4 tooling and official entrypoints for static output, production build, and static browser-control measurements.

Runtime-equivalent claims should be avoided because Tailwind CSS does not perform the same client-side class observation work as Master CSS runtime rendering. In the runtime/CSSOM hypothesis, Tailwind CSS represents the zero-runtime static baseline, not a runtime competitor.

Publication rules

Curated snapshots are committed; raw reports are not. Raw reports, traces, diagnostics, screenshots, downloaded history, and temporary workspaces stay under benchmarks/.results/**.

Every public result should include the fixture, adapter or mode, package versions, command, machine, operating system, browser version when relevant, viewport/device scale, warmup rounds, measured rounds, cache mode, sample count, and known limits.

Allowed public claim language is intentionally narrow: use "directional evidence," "supports the hypothesis in this fixture," and "static browser-control baseline." Avoid "proves," "overall faster," and "runtime wins" unless future same-machine repeat evidence passes an explicit direction and threshold gate for the named metric.

Real Web Vitals and Lighthouse scores are outside the current benchmark source. The benchmark suite prefers direct output, build, trace, and interaction measurements that can be tied back to a specific fixture and command.


Data sources

Curated snapshots are committed under benchmarks/**/snapshot.json and benchmarks/browser-lifecycle/long-session-evidence.json.

ResultCommitted dataSnapshot command
Page CSS sizedocs-page-css-size/snapshot.jsonUPDATE_BENCHMARK_SNAPSHOT=true pnpm --filter ./benchmarks bench:docs-page-css-size
Static CSS output, structure, and production buildtailwind-static-comparison/snapshot.jsonpnpm --filter ./benchmarks bench:css-output-size, pnpm --filter ./benchmarks bench:build-performance, pnpm --filter ./benchmarks bench:css-structure, then pnpm --filter ./benchmarks snapshot:tailwind-static-comparison
Build path diagnosticsbuild-path-diagnostics/snapshot.jsonBENCHMARK_ROUNDS=3 pnpm --filter ./benchmarks bench:startup-diagnostics, BENCHMARK_ROUNDS=3 pnpm --filter ./benchmarks bench:build-diagnostics, BENCHMARK_ROUNDS=3 pnpm --filter ./benchmarks bench:compiler-diagnostics, BENCHMARK_ROUNDS=3 pnpm --filter ./benchmarks bench:extraction-diagnostics, then pnpm --filter ./benchmarks snapshot:build-path-diagnostics
Browser CSS costbrowser-css-cost/snapshot.jsonpnpm --filter ./benchmarks bench:browser-css-cost, then pnpm --filter ./benchmarks snapshot:browser-css-cost
Master CSS delivery modesmaster-delivery-modes/snapshot.jsonpnpm --filter ./benchmarks bench:master-delivery-modes, then pnpm --filter ./benchmarks snapshot:master-delivery-modes
Interaction costinteraction-cost/snapshot.jsonINTERACTION_COST_ROUNDS=3 INTERACTION_COST_WARMUP_ROUNDS=1 pnpm --filter ./benchmarks bench:interaction-cost, then pnpm --filter ./benchmarks snapshot:interaction-cost
Browser lifecyclebrowser-lifecycle/snapshot.jsonBROWSER_LIFECYCLE_ROUNDS=3 BROWSER_LIFECYCLE_WARMUP_ROUNDS=1 BROWSER_LIFECYCLE_REPORT_LABEL=baseline-review-$(date +%F) BENCHMARK_COMMAND_TIMEOUT_MS=900000 pnpm --filter ./benchmarks bench:browser-lifecycle, then pnpm --filter ./benchmarks snapshot:browser-lifecycle
Five-minute lifecycle evidencebrowser-lifecycle/long-session-evidence.jsonRun bench:browser-lifecycle once per mode with BROWSER_LIFECYCLE_SCENARIOS=long-session, BROWSER_LIFECYCLE_MODES=<mode>, BROWSER_LIFECYCLE_ROUNDS=1, BROWSER_LIFECYCLE_WARMUP_ROUNDS=1, BROWSER_LIFECYCLE_LONG_SESSION_MS=300000, BROWSER_LIFECYCLE_MEASURE_TIMEOUT_MS=420000, BROWSER_LIFECYCLE_REPORT_LABEL=long-session-5m-<mode>, and BENCHMARK_COMMAND_TIMEOUT_MS=900000, then pnpm --filter ./benchmarks evidence:browser-lifecycle

Lifecycle publication checks are pnpm --filter ./benchmarks check:browser-lifecycle, node benchmarks/browser-lifecycle/check-readiness.mjs --profile long-session-evidence browser-lifecycle/long-session-evidence.json, and node benchmarks/browser-lifecycle/compare-stability.mjs after same-machine repeat reports.



© 2026 Aoyue Design LLC.MIT License
Trademark Policy