Build & Delivery

Benchmarks

Compare Master CSS output size, page CSS delivery, and build characteristics with reproducible benchmark fixtures.

Overview

Benchmarks make Master CSS output and delivery costs inspectable. They are useful for understanding tradeoffs, but they are not universal guarantees for every application.

This page is the public benchmark roadmap and results index for Master CSS. Current results stay close to their methodology, and planned work is listed here before it becomes a measured claim.


Benchmark roadmap

StatusSuiteWhat it answers
AvailablePage CSS sizeHow much inline and external CSS do popular documentation pages transfer?
AvailableCSS output sizeHow large is generated CSS for shared fixtures across Master CSS and Tailwind CSS?
AvailableProduction build performanceHow do cold and repeat production commands compare across Master CSS and Tailwind CSS?
AvailableCSS structure metricsHow many rules, selectors, declarations, at-rules, layers, and selector-complexity signals explain CSS byte differences?
InternalBuild path diagnosticsWhich Master CSS build, startup, extraction, and compiler substeps explain full command cost?
AvailableBrowser CSS costHow does CSS rule volume affect stylesheet parsing, style calculation, layout, paint, and long tasks with fixed DOM, and how does DOM scaling behave as a fixed-CSS control?
AvailableMaster CSS delivery modesWhat are the initial payload, browser load, runtime bootstrap, and progressive adoption costs of static, runtime, and progressive delivery?
AvailableInteraction costHow expensive are class toggles, rule generation, DOM insertion/removal, theme switches, and resize-triggered recalculation?
InternalRuntime mutation diagnosticsWhich MutationObserver and ensure/delete rule substeps explain cleanup-cycle cost in runtime and progressive modes?
InternalBrowser lifecycle and INP-style interactionsDoes a small runtime plus fewer generated CSS rules reduce style recalculation, route, and long-session interaction cost enough to offset runtime work?
ResearchTailwind CSS runtime-equivalent comparisonsTailwind CSS is build-time-first, so runtime claims must be limited to comparable browser CSS costs.

The benchmark target is reproducible comparison, not a single universal score. Each result should include the fixture, command, package versions, machine/browser, sample count, and known limits.


Benchmark guardrails

Benchmarks on this page are advisory. They are meant to make tradeoffs inspectable, not to promise the same result for every application, browser, machine, CDN, or framework integration.

Before a performance or size number becomes a public result, the fixture must first pass correctness checks: rendered output should match the intended UI, computed styles should cover critical assertions, generated output should be attributable to the fixture, and missing-rule checks should fail loudly.

Every published result should include package versions, command, fixture, adapter, machine, operating system, browser version when relevant, warmup and measured rounds, cache mode, viewport/device scale, and known limits. Cold-cache and warm-cache runs should be separated whenever cache behavior changes the interpretation.

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


Current evidence and remaining gap

The current benchmark set already answers the first part of the browser-rendering question. Static comparison snapshots record generated rule, selector, declaration, layer, at-rule, and byte counts. The browser CSS cost suite separately isolates a fixed DOM while deterministic external CSS grows from small to xlarge rule volumes, then records Chromium style recalculation, layout, and paint.

The delivery-mode and interaction suites add the Master CSS runtime side of the question. They measure HTML, CSS, runtime JavaScript, manifest payloads, runtime bootstrap, observe/hydrate time, runtime generated rule count, style raw bytes, post-load class toggles, new-rule generation, DOM append/remove, theme switching, viewport resize, and cleanup cycles. Tailwind CSS remains a static browser-control variant in those suites, not a runtime-equivalent comparison.

Internal runtime diagnostics have also localized one important interaction hotspot: cleanup-cycle cost was dominated by browser style invalidation from runtime stylesheet changes and retained generated stylesheet volume, while MutationObserver delivery and ensureClassRules/deleteClassRules instrumentation were measurable but not the primary cost in that diagnostic run.

The remaining public gap is lifecycle evidence. The browser lifecycle suite now has a committed internal snapshot refreshed from a 2026-06-30 review-grade all-scenario baseline, but this page should not yet claim that runtime rendering produces better real-user interaction performance overall. Segmented five-minute long-session evidence now has committed curated evidence across Master static, runtime, progressive, and Tailwind static browser-control modes; public conclusions still require repeated review and presentation.


Current result: Page CSS size

The current page CSS size benchmark compares the CSS transferred by several official documentation sites. It counts both inline style tags and external stylesheets discovered in the initial HTML response.

698 kB
( Master CSS 22.8 kB + Other inline 0.2 kB + External CSS 2.3 kB )
698 kB
React, 4.3x larger
698 kB
Vue.js, 7.4x larger
698 kB
Angular, 9.1x larger
698 kB
Material UI, 11.0x larger
698 kB
Bootstrap, 11.6x larger
698 kB
Next.js, 16.9x larger
698 kB
Tailwind CSS, 27.7x larger
The total size of inline and external styles on popular documentation sites.

Master CSS keeps this documentation site's page CSS around 6 kB with brotli compression because progressive rendering emits only the rules required by the page. The Master CSS segment is the generated style#master-css; Other inline covers non-Master inline style tags; External CSS covers linked stylesheets.

The page CSS size snapshot is generated from benchmarks/docs-page-css-size. It fetches each documentation page, parses the initial HTML, follows link[rel*="stylesheet"], and records raw and brotli-compressed byte counts.


Current result: Static CSS output, structure, and production build

The current Tailwind CSS comparison uses equivalent static fixtures for Master CSS and Tailwind CSS v4. It reports generated CSS artifact size, AST-derived CSS structure metrics, and full production command elapsed time for CLI and Vite setups.

Snapshot summary

This curated snapshot is generated from css-output-size, build-performance, and css-structure on Apple M3 Max with Node v24.15.0. View the committed snapshot data.

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
Summary of the curated static comparison snapshot across all measured fixtures.

Representative fixture

The primary charts show the docs fixture so the visual comparison stays focused. This fixture represents a dense article and documentation layout with navigation, code blocks, and tables.

The primary charts compare Master CSS and Tailwind CSS using CLI output so the headline view stays focused on static artifact output. CLI setup means Master CSS static CLI versus Tailwind CSS CLI. Vite setup data remains available in the expanded detail tables.

Brotli CSS output

Master CSS versus Tailwind CSS compressed output for the docs fixture. Lower is smaller generated CSS, not browser style cost.

Master CSS1.4x smaller
1.8 kB
Tailwind CSS
2.6 kB
Brotli-compressed CSS output for the docs fixture using the CLI setup.

Cold production command

Master CSS versus Tailwind CSS full production command timing for the docs fixture. Lower is faster and this is not watch mode.

Master CSS
194 ms
Tailwind CSS2x faster
96.3 ms
Cold production command median for the docs fixture using the CLI setup.

CSS structure

Master CSS versus Tailwind CSS declaration counts for the docs fixture. These AST-derived metrics are structure signals, not browser style-calculation timings.

Master CSS1.6x fewer
142
Tailwind CSS
226
Generated declaration counts for the docs fixture from a CSS AST parse.

Complete data tables

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

CSS bytes

Raw, gzip, and brotli byte counts for each generated CSS artifact.

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.1 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
Complete CSS byte data for every measured fixture and CLI/Vite setup.

Production build

Median elapsed time for cold and repeat production commands.

FixtureVariantCold medianRepeat medianSamples
MinimalMaster CSS static CLI182 ms179 ms3
MinimalMaster CSS static Vite276 ms253 ms3
MinimalTailwind CSS CLI95.1 ms93.4 ms3
MinimalTailwind CSS Vite160 ms163 ms3
DocsMaster CSS static CLI194 ms188 ms3
DocsMaster CSS static Vite265 ms266 ms3
DocsTailwind CSS CLI96.3 ms95.0 ms3
DocsTailwind CSS Vite162 ms163 ms3
DashboardMaster CSS static CLI192 ms186 ms3
DashboardMaster CSS static Vite268 ms269 ms3
DashboardTailwind CSS CLI95.8 ms93.7 ms3
DashboardTailwind CSS Vite165 ms163 ms3
Stress CSSMaster CSS static CLI209 ms203 ms3
Stress CSSMaster CSS static Vite282 ms279 ms3
Stress CSSTailwind CSS CLI96.6 ms96.2 ms3
Stress CSSTailwind CSS Vite166 ms163 ms3
Complete production command timing data for every measured fixture and CLI/Vite setup.

CSS structure table

Rule, selector, declaration, at-rule, layer, and selector-shape counts parsed from generated CSS artifacts.

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
Complete CSS structure data for every measured fixture and CLI/Vite setup.

These numbers do not measure browser parsing, style recalculation, layout, paint, interaction cost, watch mode, or HMR. CSS structure metrics explain generated output shape; they are not browser timing metrics. Tailwind CSS and Master CSS fixtures target equivalent rendered UI intent, not identical class strings.


Current result: Browser CSS cost

The browser CSS cost benchmark 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.

Snapshot summary

This curated snapshot is generated from browser-css-cost. It keeps the CSS and DOM axes separate so later delivery-mode results can explain whether a cost comes from upfront rule volume, DOM size, or runtime work.

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
Summary of the curated browser CSS cost snapshot.

CSS rule volume

The primary curve keeps visible DOM fixed and varies deterministic external CSS rule volume. The charts show warm-cache median Chromium trace timings for style recalculation, layout, and paint.

Style recalculation

Warm-cache median
Small CSS
0.5 ms1.6 kB, 792 decls
Medium CSS
0.4 ms5.4 kB, 7,542 decls
Large CSS
0.4 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 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.7 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 timing medians while CSS rule volume grows and visible DOM stays fixed.

DOM scaling control

The secondary control keeps CSS fixed and increases repeated DOM items. This helps separate DOM, style, and layout scaling from CSS payload size.

Style recalculation

Warm-cache median
Small DOM
1.1 ms712 nodes
Medium DOM
8 ms7,012 nodes
Large DOM
23.1 ms21,012 nodes

Layout

Warm-cache median
Small DOM
2.1 ms712 nodes
Medium DOM
19.9 ms7,012 nodes
Large DOM
63 ms21,012 nodes

Paint

Warm-cache median
Small DOM
1.4 ms712 nodes
Medium DOM
5.7 ms7,012 nodes
Large DOM
13.7 ms21,012 nodes
Warm-cache trace timing medians while DOM volume grows and CSS stays fixed.

Browser cost data table

The complete table includes cold-cache and warm-cache variants for both axes.

AxisVariantCacheCSS brotliRulesDeclarationsDOM nodesStyle recalcLayoutPaintSamples
CSS volumeSmall CSSCold cache1.6 kB2637922050.6 ms4.1 ms1.1 ms3
CSS volumeSmall CSSWarm cache1.6 kB2637922050.5 ms1 ms0.6 ms3
CSS volumeMedium CSSCold cache5.4 kB2,5137,5422050.9 ms4.1 ms1.1 ms3
CSS volumeMedium CSSWarm cache5.4 kB2,5137,5422050.4 ms1 ms0.7 ms3
CSS volumeLarge CSSCold cache16.4 kB10,01330,0422051.9 ms4.1 ms1 ms3
CSS volumeLarge CSSWarm cache16.4 kB10,01330,0422050.4 ms1 ms0.6 ms3
CSS volumeXLarge CSSCold cache45.6 kB30,01390,0422053.9 ms3.9 ms1.1 ms3
CSS volumeXLarge CSSWarm cache45.6 kB30,01390,0422050.5 ms1 ms0.6 ms3
DOM scalingSmall DOMCold cache0.5 kB15507121.2 ms5.3 ms2 ms3
DOM scalingSmall DOMWarm cache0.5 kB15507121.1 ms2.1 ms1.4 ms3
DOM scalingMedium DOMCold cache0.5 kB15507,0128.1 ms24.6 ms6.2 ms3
DOM scalingMedium DOMWarm cache0.5 kB15507,0128 ms19.9 ms5.7 ms3
DOM scalingLarge DOMCold cache0.5 kB155021,01223.4 ms69 ms13.8 ms3
DOM scalingLarge DOMWarm cache0.5 kB155021,01223.1 ms63 ms13.7 ms3
Complete browser CSS cost snapshot data for CSS volume and DOM scaling variants.

These numbers do not measure runtime rule generation, interaction mutation cost, HMR, real application JavaScript, Firefox, WebKit, CDN behavior, or public real-world page variance. Chromium trace event names can change across browser versions, so browser-cost conclusions should be read with the fixture source, package versions, browser version, sample count, and committed snapshot data.


Current result: Master CSS delivery modes

The Master CSS delivery modes benchmark compares initial payload, local Chromium load cost, runtime bootstrap, manifest loading, and progressive adoption across Master CSS static, runtime, progressive, and Tailwind CSS static variants.

Snapshot summary

This curated snapshot is generated from master-delivery-modes. It uses the static fixture set and reports local Chromium medians beside payload bytes and delivered CSS structure.

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
Summary of the curated Master CSS delivery modes snapshot.

Representative fixture

The primary charts show the docs fixture so the visual comparison stays focused on a dense article and documentation layout.

Initial payload

Payload composition includes HTML, external CSS, inline CSS, runtime JavaScript, manifest JSON, and progressive hydration manifest bytes. Values use brotli compression.

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.7 kB
Manifest JSON9.9 kB
Hydration manifest0 kB
Master CSS progressive
38.6 kB3 requests
HTML3.6 kB
External CSS0 kB
Inline CSS0.9 kB
Runtime JS22.7 kB
Manifest JSON9.9 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.

Browser load

Load timing charts show local Chromium medians for navigation-ready, style recalculation, layout, and paint.

Navigation to ready

Median
Master CSS static
23.7 ms3 samples
Master CSS runtime
40.5 ms3 samples
Master CSS progressive
43.3 ms3 samples
Tailwind CSS static
24.5 ms3 samples

Style recalculation

Median
Master CSS static
1 ms3 samples
Master CSS runtime
1 ms3 samples
Master CSS progressive
0.7 ms3 samples
Tailwind CSS static
1.3 ms3 samples

Layout

Median
Master CSS static
8.2 ms3 samples
Master CSS runtime
4.8 ms3 samples
Master CSS progressive
5 ms3 samples
Tailwind CSS static
9.3 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.4 ms3 samples
Local Chromium load timing medians for the docs fixture.

Runtime bootstrap

Runtime bootstrap and observe timings apply to Master runtime and progressive modes.

Runtime bootstrap

Median
Master CSS runtime
14.9 ms3 samples
Master CSS progressive
19.9 ms3 samples

Runtime observe

Median
Master CSS runtime
6.4 ms3 samples
Master CSS progressive
3 ms3 samples
Master runtime bootstrap and observe medians for the docs fixture.

Complete data table

The full table keeps every measured fixture and delivery mode for verification.

FixtureModePayloadHTMLExternal CSSInline CSSRuntime JSManifest JSONHydration manifestRulesDeclarationsNavigation readyStyle recalcLayoutPaintRuntime bootstrapRuntime observeProgressive adopted
MinimalMaster CSS static2.3 kB0.7 kB1.6 kB0 kB0 kB0 kB0 kB8412423.6 ms0.7 ms6.5 ms1 ms0 ms0 ms0
MinimalMaster CSS runtime33.7 kB1.1 kB0 kB0 kB22.7 kB9.9 kB0 kB0038.6 ms0.7 ms3.8 ms0.5 ms14 ms5.8 ms0
MinimalMaster CSS progressive36.9 kB2.6 kB0 kB0.6 kB22.7 kB9.9 kB1.1 kB465632.4 ms0.5 ms3.7 ms0.6 ms15.9 ms1.5 ms1
MinimalTailwind CSS static2.9 kB0.7 kB2.2 kB0 kB0 kB0 kB0 kB8617420.8 ms0.9 ms6.5 ms0.8 ms0 ms0 ms0
DocsMaster CSS static3 kB1.2 kB1.8 kB0 kB0 kB0 kB0 kB9814223.7 ms1 ms8.2 ms1.5 ms0 ms0 ms0
DocsMaster CSS runtime34.2 kB1.6 kB0 kB0 kB22.7 kB9.9 kB0 kB0040.5 ms1 ms4.8 ms1 ms14.9 ms6.4 ms0
DocsMaster CSS progressive38.6 kB3.6 kB0 kB0.9 kB22.7 kB9.9 kB1.6 kB607443.3 ms0.7 ms5 ms1 ms19.9 ms3 ms1
DocsTailwind CSS static3.7 kB1.1 kB2.6 kB0 kB0 kB0 kB0 kB10222624.5 ms1.3 ms9.3 ms1.4 ms0 ms0 ms0
DashboardMaster CSS static2.9 kB1.1 kB1.8 kB0 kB0 kB0 kB0 kB10314726 ms10.9 ms3.3 ms1.8 ms0 ms0 ms0
DashboardMaster CSS runtime34.2 kB1.6 kB0 kB0 kB22.7 kB9.9 kB0 kB0041.7 ms7.5 ms2.8 ms1.1 ms14.1 ms6.4 ms0
DashboardMaster CSS progressive38.4 kB3.5 kB0 kB0.8 kB22.7 kB9.9 kB1.5 kB668038.4 ms8.1 ms2.7 ms1.2 ms18.9 ms3.1 ms1
DashboardTailwind CSS static3.5 kB1.1 kB2.4 kB0 kB0 kB0 kB0 kB10619524.8 ms10.9 ms3 ms1.5 ms0 ms0 ms0
Stress CSSMaster CSS static3.5 kB1.5 kB2.1 kB0 kB0 kB0 kB0 kB31636424.2 ms1.8 ms7.3 ms1.4 ms0 ms0 ms0
Stress CSSMaster CSS runtime34.5 kB1.9 kB0 kB0 kB22.7 kB9.9 kB0 kB0044.9 ms1.6 ms4.4 ms0.9 ms19 ms11.6 ms0
Stress CSSMaster CSS progressive41.3 kB5.2 kB0 kB1.1 kB22.7 kB9.9 kB2.4 kB27929735.2 ms1.5 ms4.5 ms1 ms19.7 ms2.1 ms1
Stress CSSTailwind CSS static4 kB1.5 kB2.5 kB0 kB0 kB0 kB0 kB30036925.6 ms2.4 ms7.5 ms1.2 ms0 ms0 ms0
Complete Master CSS delivery mode snapshot data for every measured fixture and mode.

These numbers measure initial local fixture loads only. They do not measure post-load mutation, route transitions, HMR, dev workflow, Vite injection cost, CDN behavior, Firefox, WebKit, or public real-world page variance. Master static and Tailwind static use CLI-generated CSS from equivalent rendered fixture intent, not identical class strings.


Current result: Interaction cost

The interaction cost benchmark measures post-load user-facing changes in local Chromium: class toggles, runtime rule generation, DOM append/remove, theme switches, viewport resize, and repeated mutation cleanup.

Snapshot summary

This curated snapshot is generated from interaction-cost. It uses dynamic, dashboard, and stress-dom fixtures across supported Master CSS static, runtime, progressive, and Tailwind CSS static variants.

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
Summary of the curated interaction cost snapshot.

Representative fixture

The primary charts show the dynamic fixture because it covers class toggles, new-rule generation, DOM mutation, and cleanup-cycle behavior.

Mutation readiness

Mutation-ready timing is measured from the interaction start until the page completes the post-mutation settle frame and correctness assertions.

Existing class toggle

Mutation-ready median
Master CSS static
27.6 ms64 elements
Master CSS runtime
22.2 ms64 elements
Master CSS progressive
23.3 ms64 elements
Tailwind CSS static
28.3 ms64 elements

New class toggle

Mutation-ready median
Master CSS runtime
32.8 ms64 elements
Master CSS progressive
24.6 ms64 elements

DOM append/remove

Mutation-ready median
Master CSS static
28.2 ms48 elements
Master CSS runtime
21.8 ms48 elements
Master CSS progressive
27.7 ms48 elements
Tailwind CSS static
27.1 ms48 elements
Mutation-ready medians for primary dynamic fixture scenarios.

Runtime update cost

Runtime update charts isolate Master runtime/progressive stylesheet work during interaction 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.7 ms1 rules

Cleanup-cycle runtime update

Runtime mutation median
Master CSS runtime
0.2 ms2 rules
Master CSS progressive
0.9 ms2 rules
Runtime rule-update medians for Master runtime and progressive dynamic fixture scenarios.

Complete data table

The full table keeps every supported fixture, mode, and scenario combination for verification.

FixtureScenarioModeReadyRuntime updateRule deltaStyle byte deltaStyle recalcLayoutPaintDOM nodesAffectedComputed styleCleanupProgressive adoptedSamples
DynamicExisting class toggleMaster CSS static27.6 ms0 ms00 kB0.3 ms0 ms0.4 ms308641101
DynamicExisting class toggleMaster CSS runtime22.2 ms0 ms00 kB0.3 ms0 ms0.4 ms309641101
DynamicExisting class toggleMaster CSS progressive23.3 ms0 ms00 kB0.3 ms0 ms0.4 ms310641111
DynamicExisting class toggleTailwind CSS static28.3 ms0 ms00 kB0.4 ms0 ms0.4 ms308641101
DynamicNew class toggleMaster CSS runtime32.8 ms0.1 ms10.1 kB0.7 ms0 ms1.5 ms309641101
DynamicNew class toggleMaster CSS progressive24.6 ms0.7 ms10 kB0.8 ms0 ms0.6 ms310641111
DynamicDOM append/removeMaster CSS static28.2 ms0 ms00 kB0 ms0 ms0 ms308481101
DynamicDOM append/removeMaster CSS runtime21.8 ms0 ms00 kB0 ms0 ms0 ms309481101
DynamicDOM append/removeMaster CSS progressive27.7 ms0 ms00 kB0 ms0 ms0 ms310481111
DynamicDOM append/removeTailwind CSS static27.1 ms0 ms00 kB0 ms0 ms0 ms308481101
DynamicTheme switchMaster CSS static28.6 ms0 ms00 kB0.3 ms0 ms0.4 ms308641101
DynamicTheme switchMaster CSS runtime20.5 ms0.1 ms10.1 kB0.5 ms0 ms0.4 ms309641101
DynamicTheme switchMaster CSS progressive24.5 ms0.4 ms10 kB0.5 ms0 ms0.4 ms310641111
DynamicTheme switchTailwind CSS static28.1 ms0 ms00 kB0.4 ms0 ms0.4 ms308641101
DynamicViewport resizeMaster CSS static60.5 ms0 ms00 kB0.5 ms0.8 ms0.9 ms308641101
DynamicViewport resizeMaster CSS runtime54.7 ms0 ms00 kB0.2 ms0.8 ms0.9 ms309641101
DynamicViewport resizeMaster CSS progressive59 ms0 ms00 kB0.2 ms0.8 ms0.9 ms310641111
DynamicViewport resizeTailwind CSS static61.6 ms0 ms00 kB0.3 ms0.9 ms0.9 ms308641101
DynamicMutation cleanup cycleMaster CSS static161.3 ms0 ms00 kB1.1 ms1.5 ms3.7 ms3081921101
DynamicMutation cleanup cycleMaster CSS runtime154.5 ms0.2 ms20.1 kB1.8 ms1.4 ms3.6 ms3091921101
DynamicMutation cleanup cycleMaster CSS progressive157.7 ms0.9 ms20 kB1.7 ms1.4 ms3.6 ms3101921111
DynamicMutation cleanup cycleTailwind CSS static160.9 ms0 ms00 kB1.3 ms1.4 ms3.8 ms3081921101
DashboardExisting class toggleMaster CSS static26.2 ms0 ms00 kB0.7 ms0 ms0.7 ms9801601101
DashboardExisting class toggleMaster CSS runtime29 ms0 ms00 kB0.7 ms0 ms0.9 ms9811601101
DashboardExisting class toggleMaster CSS progressive23.4 ms0 ms00 kB0.7 ms0 ms0.8 ms9821601111
DashboardExisting class toggleTailwind CSS static27.3 ms0 ms00 kB0.9 ms0 ms0.8 ms9801601101
DashboardDOM append/removeMaster CSS static33.3 ms0 ms00 kB0 ms0 ms0 ms980801101
DashboardDOM append/removeMaster CSS runtime27.1 ms0 ms00 kB0 ms0 ms0 ms981801101
DashboardDOM append/removeMaster CSS progressive21.8 ms0 ms00 kB0 ms0 ms0 ms982801111
DashboardDOM append/removeTailwind CSS static27.8 ms0 ms00 kB0 ms0 ms0 ms980801101
DashboardTheme switchMaster CSS static28.7 ms0 ms00 kB0.6 ms0 ms0.8 ms9801601101
DashboardTheme switchMaster CSS runtime26.9 ms0.1 ms10.1 kB1 ms0 ms0.8 ms9811601101
DashboardTheme switchMaster CSS progressive26.6 ms0.4 ms10 kB1 ms0 ms0.7 ms9821601111
DashboardTheme switchTailwind CSS static25 ms0 ms00 kB0.8 ms0 ms0.5 ms9801601101
DashboardViewport resizeMaster CSS static61.5 ms0 ms00 kB0.3 ms2.2 ms1.7 ms9801601101
DashboardViewport resizeMaster CSS runtime54.5 ms0 ms00 kB0.2 ms2.2 ms1.6 ms9811601101
DashboardViewport resizeMaster CSS progressive55.1 ms0 ms00 kB0.2 ms2.1 ms1.7 ms9821601111
DashboardViewport resizeTailwind CSS static56.3 ms0 ms00 kB0.3 ms2.1 ms1.9 ms9801601101
Stress DOMExisting class toggleMaster CSS static25.1 ms0 ms00 kB2.2 ms0 ms1.1 ms3,6206001101
Stress DOMExisting class toggleMaster CSS runtime25.9 ms0 ms00 kB2.2 ms0 ms1.1 ms3,6216001101
Stress DOMExisting class toggleMaster CSS progressive29.6 ms0 ms00 kB2.2 ms0 ms1.1 ms3,6226001111
Stress DOMExisting class toggleTailwind CSS static24.8 ms0 ms00 kB3.1 ms0 ms0.9 ms3,6206001101
Stress DOMDOM append/removeMaster CSS static26.4 ms0 ms00 kB0 ms0 ms0 ms3,6201601101
Stress DOMDOM append/removeMaster CSS runtime26.7 ms0 ms00 kB0 ms0 ms0 ms3,6211601101
Stress DOMDOM append/removeMaster CSS progressive22.5 ms0 ms00 kB0 ms0 ms0 ms3,6221601111
Stress DOMDOM append/removeTailwind CSS static26.9 ms0 ms00 kB0 ms0 ms0 ms3,6201601101
Stress DOMViewport resizeMaster CSS static61.7 ms0 ms00 kB0.4 ms7.8 ms3.4 ms3,6206001101
Stress DOMViewport resizeMaster CSS runtime59.5 ms0 ms00 kB0.5 ms7.7 ms3.4 ms3,6216001101
Stress DOMViewport resizeMaster CSS progressive61.7 ms0 ms00 kB0.4 ms7.8 ms3.5 ms3,6226001111
Stress DOMViewport resizeTailwind CSS static57 ms0 ms00 kB0.4 ms7.2 ms3.7 ms3,6206001101
Stress DOMMutation cleanup cycleMaster CSS static125 ms0 ms00 kB2 ms2.8 ms9.3 ms3,6204801101
Stress DOMMutation cleanup cycleMaster CSS runtime129.9 ms0.2 ms20.1 kB6.9 ms3.1 ms9.7 ms3,6214801101
Stress DOMMutation cleanup cycleMaster CSS progressive126.2 ms1 ms20 kB7.1 ms2.9 ms9.5 ms3,6224801111
Stress DOMMutation cleanup cycleTailwind CSS static127.4 ms0 ms00 kB2.5 ms2.8 ms9.5 ms3,6204801101
Complete interaction cost snapshot data for supported fixture, mode, and scenario combinations.

These numbers measure local Chromium post-load fixture interactions only. They do not measure route transitions, HMR, dev workflow, CDN behavior, Firefox, WebKit, or public real-world application variance. Tailwind CSS static variants are browser controls for style/layout/paint work; they do not have a client-side runtime rule-generation equivalent.


Fixture matrix

Future fixture-based suites should use equivalent UI output rather than identical class strings.

FixturePurposeExpected stress
minimalSmall useful page or landing sectionFramework overhead, cold-start cost, and minimum payload
docsDense article, navigation, code blocks, tablesReal documentation layout, typography, and nested content
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, generated outputs, and the exact commands used to produce results.


Metrics

AreaMetrics
TransferRaw, gzip, and brotli bytes for CSS, HTML, runtime JS, manifest JSON, hydration manifest, request count, cacheability
CSS structureRule count, declaration count, selector count, cascade layers, media/container/support blocks, custom properties, selector complexity
DOMDOM node count, affected element count, average class count per element where stable
Runtime JavaScriptRuntime bootstrap, observe/hydrate, rule generation, insert/delete rule work, MutationObserver callback count and duration
BuildCold build, warm rebuild, changed-file rebuild cost, startup diagnostics, scanner time
Browser loadCSS rule-volume curve with fixed DOM, fixed-CSS DOM scaling control, stylesheet parse/attach, style recalculation, layout, paint, long tasks, memory where stable
InteractionClass toggle cost, new-rule generation, existing-rule toggle, DOM append/remove, theme switch, viewport/container resize
LifecycleRoute navigation, CSSOM growth, retained generated rule volume, long-session memory, GC pressure where Chromium exposes stable signals
User metricsFCP, LCP, and INP-style interaction latency when local fixture variance is low enough to explain
CorrectnessOutput hash, screenshot smoke, computed-style assertions, missing-rule checks, generated file inventory
PayloadRuntime bundle, manifest JSON, hydration manifest, inline style#master-css, external CSS, per-route HTML variance

Browser timings should be measured with fixed viewport, device scale, browser version, warmup rounds, and measured rounds. Chromium tracing is the primary public path for browser-cost metrics. These numbers are advisory because browser scheduling, hardware, memory pressure, and cache state affect them.

CSS structure metrics are published beside byte size and production build timing. They explain how generated byte differences relate to rule count, selector count, declaration count, at-rule shape, layer distribution, and selector complexity before browser-cost claims are introduced.


Master CSS delivery modes

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

Progressive begins with server/build-time CSS in the HTML and adds a runtime handoff, so its benchmark needs both first-response payload metrics and post-hydration mutation metrics.

The delivery-mode suite measures initial payload, local Chromium page load, runtime bootstrap, manifest loading, and progressive style adoption across Master CSS static, runtime, progressive, and Tailwind CSS static variants. It does not measure post-load mutation; those interaction costs stay in the next suite.


Tailwind CSS comparisons

Tailwind CSS comparisons should use pinned Tailwind CSS v4 tooling and official entrypoints:

The available Tailwind CSS suites compare static outputs and production build behavior. Runtime claims should be avoided unless the benchmark is explicitly measuring browser CSS cost from static CSS output, because Tailwind CSS does not perform the same client-side class observation work as Master CSS runtime rendering.

Tailwind CSS and Master CSS fixtures should render equivalent UI, but they do not need identical class strings. Setup labels should be explicit: recommended/default setup and utility-only setup are separate results if both are measured. Dynamic-class fixtures should document extraction limits and capability differences separately from raw benchmark wins.


Browser CSS cost

Large CSS can affect the browser even when no JavaScript framework is involved. The browser-cost suite keeps the CSS and DOM axes separate so later delivery-mode comparisons can explain whether a result came from upfront rule volume, DOM size, or runtime work.

Primary: CSS rule volume

The primary calibration keeps visible DOM fixed and varies deterministic external CSS rule volume:

  • small-css, medium-css, large-css, and xlarge-css external stylesheets.
  • A fixed repeated DOM item count for every CSS volume level.
  • Raw, gzip, and brotli CSS bytes for each volume level.
  • Rule, selector, and declaration counts parsed from the generated CSS.
  • Initial stylesheet attachment and parse cost.
  • Style recalculation, layout, and paint while the visible DOM stays fixed.
  • Long tasks where Chromium exposes stable trace data.

This curve is the main input for judging how much upfront CSS a delivery mode asks the browser to load before interaction.

Secondary: DOM scaling control

The stress-dom control stays in the suite, but it answers a different question. It keeps CSS fixed and varies DOM volume:

  • small-dom, medium-dom, and large-dom repeated item counts.
  • Measured DOM node count after the page reaches the benchmark-ready marker.
  • The same fixed CSS bytes and CSS structure metadata for each DOM scale.
  • Style recalculation, layout, paint, navigation-ready time, and long tasks while CSS volume stays fixed.

This control is useful for interpreting runtime scan, mutation, route transition, and layout sensitivity later. It is not the main input for comparing CSS delivery modes because delivery modes primarily change when and how many CSS rules are loaded or generated.

This suite uses local fixture pages, Playwright, and browser tracing with fixed viewport, fixed device scale, and disabled unrelated network variance. It reports medians plus raw samples as ignored artifacts, with cold-cache and warm-cache results separated when cache state affects the measurement.


Interaction cost

The interaction-cost suite measures changes users can feel:

  • Toggle state classes on many elements.
  • Toggle classes that are already represented in CSS versus classes that require new rule generation.
  • Insert and remove repeated components.
  • Switch light/dark or theme mode.
  • Resize viewport and container-query layouts.
  • Repeat mutation cycles to catch cleanup and memory issues.

For Master CSS runtime and progressive modes, the suite reports both DOM work and runtime stylesheet work. For static Tailwind CSS output, the comparable measurement is the browser's style/layout/paint cost after the DOM or class change.

The internal runtime mutation diagnostics suite narrows the cleanup-cycle hotspot to dynamic and stress-dom fixtures in Master runtime and progressive modes. It records MutationObserver delivery counts, ensureClassRules/deleteClassRules call shape, temporary class cleanup, retained rule state, and Chromium trace timings so optimization work can target the confirmed source of cost.


Browser lifecycle suite

The internal browser lifecycle suite tests the lifecycle version of the runtime tradeoff: does a small amount of runtime work buy enough reduction in generated CSS rules to lower style recalculation, selector matching proxies, and user-visible interaction latency over time?

This suite should keep Tailwind CSS as a static browser-control setup and Master CSS as static, runtime, and progressive setups. It should publish only measured comparisons that share equivalent rendered UI intent and should keep "INP" labels reserved for measurements that match the platform metric closely enough; otherwise use INP-style interaction latency.

A curated internal snapshot is generated from the all-scenario browser-lifecycle baseline and has been refreshed from the 2026-06-30 review-grade run. Committed five-minute long-session evidence also covers Master static, runtime, progressive, and Tailwind static browser-control modes. A same-machine repeat review has passed coverage, correctness, sample-count, and long-session duration gates, but the suite remains internal until the deltas have final claim and narrative review; the current data should be used for benchmark validation rather than public performance claims.

Internal evidence: Browser lifecycle

This internal evidence summarizes the committed all-scenario snapshot and the committed five-minute segmented long-session evidence. It is not an Available benchmark result, and the latency value remains INP-style interaction latency rather than 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 the internal browser lifecycle evidence.

The five-minute evidence keeps Tailwind CSS as a static browser-control mode. It shows local fixture medians for browser work and runtime instrumentation, while selector matching remains an inference from CSSOM/rule volume plus style recalculation.

Style recalculation

Five-minute median
Master CSS static
13,395.8 ms
Master CSS runtime
6,773.4 ms
Master CSS progressive
6,761.9 ms
Tailwind CSS static
12,101.9 ms

Layout

Five-minute median
Master CSS static
2,823.7 ms
Master CSS runtime
1,193 ms
Master CSS progressive
1,178.1 ms
Tailwind CSS static
1,353.6 ms

Paint

Five-minute median
Master CSS static
13,357.1 ms
Master CSS runtime
6,006.2 ms
Master CSS progressive
5,975.8 ms
Tailwind CSS static
6,553.9 ms

Long tasks

Five-minute median
Master CSS static
28
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
36.2 ms47 rules
Master CSS progressive
42.4 ms47 rules
Tailwind CSS static
0 ms0 rules
Committed 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,051.7 ms13,395.8 ms2,823.7 ms13,357.1 ms28200 ms1,429.7 kB101
Master CSS runtime300,066.3 ms6,773.4 ms1,193 ms6,006.2 ms004736.2 ms4,121.5 kB101
Master CSS progressive300,059.6 ms6,761.9 ms1,178.1 ms5,975.8 ms004742.4 ms3,527 kB111
Tailwind CSS static300,060.2 ms12,101.9 ms1,353.6 ms6,553.9 ms02200 ms1,798.3 kB101
Complete committed five-minute long-session evidence for every mode.

Lifecycle scenarios

ScenarioInternal measurement
Initial loadRuntime initialization, stylesheet parse/attach, CSSOM creation, FCP, LCP, style recalculation, layout, paint, and long tasks.
Large DOMStart with 1,000, 5,000, and 10,000 node scales before treating 50,000 nodes as publishable; measure style recalculation, layout, paint, and memory where stable.
Large appendAdd 100, 500, and 1,000 elements before larger counts; separate existing-rule append from new-rule generation.
Repeated class togglesToggle selected, active, expanded, and hover-equivalent states across many elements and rounds; measure runtime cost and browser recalculation cost separately.
Theme switchCompare class swap, data attribute, and CSS variable variants for light/dark changes.
Route navigationNavigate between home, dashboard, and settings fixtures; track generated CSS growth, retained rules, runtime reparse/observe work, and CSSOM size after each route.
Long sessionSimulate repeated add, remove, toggle, resize, scroll, and route operations for at least five minutes; track retained rules, memory, long tasks, and GC pressure when Chromium exposes stable signals.

Lifecycle limits

Selector matching time should remain an inference unless Chromium exposes a stable trace metric for it. CSSOM memory and GC pressure should be reported only when the collection method is stable enough to reproduce on the same browser version. Lifecycle reports should keep raw traces internal and publish curated snapshots only after repeated same-machine runs.


Implementation phases

PhaseWork
1Keep this roadmap updated, add guardrails, and mark the page CSS size benchmark as available.
2Add shared fixture manifests, adapter names, normalized report schemas, ignored raw artifacts, and curated JSON/Markdown output.
3Available: implement and publish curated CSS output and production build benchmarks for Master CSS static output versus Tailwind CSS CLI/Vite.
4Available: publish CSS structure metrics from the curated static comparison snapshot.
5Available: implement and publish browser load cost suites with Playwright/browser tracing, correctness checks, and stable fixture pages.
6Available: implement and publish Master CSS static, runtime, and progressive delivery benchmarks with local Chromium payload/load/adoption measurements.
7Available: implement and publish interaction cost suites with Playwright/browser tracing, correctness checks, and stable fixture pages.
8Internal: diagnose runtime mutation cleanup hotspots before optimizing runtime/progressive interaction behavior.
9Internal: reduce retained generated stylesheet volume after runtime mutation diagnostics.
10Available: refresh the published interaction-cost snapshot after retained stylesheet optimization.
11Build: replace stale core TypeScript project references with the @master/css facade project.
12Internal: investigated queued runtime stylesheet invalidation and abandoned the runtime optimization path because diagnostics did not show meaningful improvement.
13Internal: summarize build path diagnostics across CLI startup, Vite integration, compiler, and extraction substeps.
14Planned: decide whether to optimize startup/build path costs or publish a curated public build-path result.
15Internal: implement browser lifecycle and INP-style interaction benchmarks for initial load, large DOM, append, repeated toggles, theme switching, route navigation, and long-session behavior; segmented five-minute long-session runs and same-machine repeat review have passed internal gates, and public conclusions wait for final claim and narrative review.

Future normalized reports should stay internal to the benchmark workspace unless they become a documented public data format. A report should include schemaVersion, suite, generatedAt, environment, packages, fixtures, variants, metrics, samples, summary, limits, and artifacts.


Methodology and limits

Use the raw numbers to inspect source size and the brotli numbers to approximate compressed transfer size. Browser cache state, CDN behavior, JavaScript-loaded styles, fonts, images, and application runtime work are outside the page CSS size snapshot.

Fixture-based benchmark results should be compared on the same machine, with the same package versions, the same browser version, and the same sample settings. Raw benchmark history should stay ignored; only curated snapshots should be committed and rendered publicly.

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


  • Master UI


© 2026 Aoyue Design LLC.MIT License
Trademark Policy