Navigation

Evidence

Benchmarks

See how much of the CSS a page delivers matches it, compare generated CSS for the same UI, and check build and runtime costs with their limits.

On this page

#Overview

These measurements first answer two questions: how much of the CSS a documentation page delivers matches that page, and how much CSS the same UI generates with Master CSS and with Tailwind CSS. A technical appendix covers build time, Chromium's response to CSS volume and the cost of each Master CSS rendering mode. Check each section's conditions and limits before applying a result to another application.

The snapshots were recorded on November 4, 2026 on one machine (Apple M5 Max, macOS) with Chromium 156. Master CSS packages were built from revision add10eec6. The browser lifecycle snapshots come from 3fc239c6c, recorded earlier that day; add10eec6 changes the compiler and the static build hosts, not the runtime, the preset or the engine. The Master CSS documentation pages were measured from the production build of the same checkout; the other documentation sites were fetched from their public pages on the same day.

MetricValueDetail
Documentation page CSS23.1 / 28.9 kB Master CSS site, Brotli: listed page / five-page median.
Matched style rules55% Master CSS site, five-page median; the highest of 7 sites.
Same UI, generated CSS1.9 / 2.6 kB Master CSS / Tailwind CSS, docs fixture, Brotli.
Cold production command206 / 52 ms Master CSS / Tailwind CSS, docs fixture, including startup.
Runtime download48.7 kB Runtime JS 33.3 kB + compiled program 15.4 kB, Brotli.
Progressive first load2 requests HTML and runtime JS; the program loads only when a class needs it.
Post-load correctness54 / 54 Interactions passing computed-style and cleanup checks.
Long-session style work5.0 / 12.2 s Master CSS runtime / Tailwind CSS static, one five-minute run each.
Headline results computed from the committed snapshots. The sections below give each result’s conditions and complete data.

#Documentation page CSS

Question answered: how large are the inline style bodies and linked stylesheets discovered from each documentation page’s initial HTML, and how many of their style rules match that page?

Raw
Master CSSMaster CSS 0.8 kB + Other inline 1.0 kB + External CSS 108.6 kB
110.4 kB
Angular1.4× Master CSS
151.8 kB
Vue.js1.7× Master CSS
186.3 kB
Material UI2.5× Master CSS
277.4 kB
Bootstrap2.7× Master CSS
293.9 kB
Next.js4.3× Master CSS
479.9 kB
Tailwind CSS6.0× Master CSS
657.7 kB

Both views use the same scale and the committed page snapshot.

Recorded CSS body sizes from documentation page snapshots. Brotli sums independently compressed bodies.

The chart sums the inline style bodies and linked stylesheets of each site’s listed page; each body is compressed independently for the Brotli view. A single page can misrepresent a site, so the table adds four more documentation pages per site and reports the range.

SiteListed page (Brotli)Five-page median (Brotli)Five-page range (Brotli)Five-page median (raw)Matched style rules, medianMatched style rules, range
Angular23.3 kB23.3 kB23.2 kB – 24.5 kB151.8 kB49%43% – 53%
Material UI27.1 kB27.6 kB26.9 kB – 36.2 kB292.2 kB40%38% – 48%
Master CSS23.1 kB28.9 kB23.1 kB – 34.2 kB130.6 kB55%46% – 60%
Bootstrap32.6 kB32.6 kB32.6 kB – 32.6 kB293.9 kB13%11% – 13%
Vue.js33.4 kB33.4 kB33.4 kB – 33.4 kB186.3 kB26%22% – 28%
Tailwind CSS58.4 kB58.4 kB58.4 kB – 58.4 kB657.7 kB8%7% – 9%
Next.js61.4 kB61.4 kB61.4 kB – 61.4 kB479.9 kB13%11% – 14%
Five documentation pages per site. Matched style rules have a selector that matches an element of the loaded page at a 1280 × 800 viewport.
MetricValueDetail
Pages74 every page the sitemap lists
CSS, Brotli29.7 kB (23.1 kB – 34.4 kB) median (minimum – maximum)
CSS, raw133.7 kB (110.4 kB – 156.3 kB) median (minimum – maximum)
Matched style rules51% (38% – 60%) median (minimum – maximum)
Every documentation page the Master CSS site lists in its sitemap, measured the same way.

The Master CSS documentation pages combine two kinds of CSS. The per-page style#master-css body holds the utilities the page uses; on the listed page it is under 1 kB. The linked stylesheets hold the site’s design system components, the preset base and the tokens they reference; they make up most of the bytes. Each linked stylesheet belongs to a component and arrives whole, so pages that use more components link more files and the total varies from page to page. A page that renders only part of a component, such as the closed search dialog or a few of the article components, still receives all of that component’s rules; that is where most of its unmatched rules come from. Several of the other sites deliver the same stylesheet on every page.

Matched rules measure how precisely a page’s CSS fits that page, independently of its size. A rule counts when its selector, without state pseudo-classes and pseudo-elements, matches an element after load; rules for other viewports, color schemes or later interactions count as unmatched only when their element is absent. The share is a property of each site’s own stylesheets, not of the CSS framework alone.

Limits: these are collected CSS body sizes, not browser transfer or timing measurements. The collector does not follow CSS import graphs or count JavaScript-injected styles. Compression of complete responses, cache reuse, headers, CDN behavior, fonts, images and application runtime work are outside the comparison. Each site’s CSS also reflects its own design and build choices, so this sample does not isolate the cost of a CSS framework; the static fixtures below compare frameworks on the same UI.


#Same UI, generated CSS

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

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; production command timing is in the technical appendix.

MetricValueDetail
Fixtures4
CSS output4/4 Goodfixtures where Master CSS is smaller than Tailwind CSS by brotli bytes in the CLI setup
Build command4/4 Checkfixtures where Tailwind CSS has the lower cold production command median in the CLI setup
Build samples5 measured command rounds per variant
CSS structureAST rules, 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.9 kB
Tailwind CSS
2.6 kB
Brotli-compressed CSS output for the docs fixture using the CLI setup.
Master CSS1.5x fewer
153
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.6 kB2.0 kB1.7 kB1
MinimalMaster CSS static Vite5.6 kB2.0 kB1.7 kB1
MinimalTailwind CSS CLI9.3 kB2.7 kB2.3 kB1
MinimalTailwind CSS Vite7.9 kB2.5 kB2.1 kB1
DocsMaster CSS static CLI6.4 kB2.3 kB1.9 kB1
DocsMaster CSS static Vite6.4 kB2.3 kB1.9 kB1
DocsTailwind CSS CLI12.2 kB3.1 kB2.6 kB1
DocsTailwind CSS Vite10.2 kB2.9 kB2.5 kB1
DashboardMaster CSS static CLI6.7 kB2.3 kB1.9 kB1
DashboardMaster CSS static Vite6.7 kB2.3 kB1.9 kB1
DashboardTailwind CSS CLI10.7 kB2.9 kB2.4 kB1
DashboardTailwind CSS Vite8.9 kB2.7 kB2.3 kB1
Stress CSSMaster CSS static CLI12.6 kB3.1 kB2.0 kB1
Stress CSSMaster CSS static Vite12.6 kB3.1 kB2.1 kB1
Stress CSSTailwind CSS CLI17.3 kB3.7 kB2.6 kB1
Stress CSSTailwind CSS Vite12.9 kB3.5 kB2.4 kB1
Raw, gzip, and brotli CSS byte data and the number of CSS files for every measured fixture and setup.
FixtureVariantRulesSelectorsDeclarationsCustom propertiesAt-rulesLayer blocksUnlayered rulesCombinatorsMax specificityMax complexity
MinimalMaster CSS static CLI86138134216410202
MinimalMaster CSS static Vite86138134216410202
MinimalTailwind CSS CLI861311744113413109
MinimalTailwind CSS Vite991321994112413109
DocsMaster CSS static CLI102154153247410202
DocsMaster CSS static Vite102154153247410202
DocsTailwind CSS CLI1021472265624413109
DocsTailwind CSS Vite1161492515623413109
DashboardMaster CSS static CLI108160161276410202
DashboardMaster CSS static Vite108160161276410202
DashboardTailwind CSS CLI1051501954213413209
DashboardTailwind CSS Vite1181512204212413209
Stress CSSMaster CSS static CLI301353352256410202
Stress CSSMaster CSS static Vite301353352256410202
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.

Every measured setup writes one CSS file. A Master CSS static build inlines the stylesheets its entry imports, the preset included, so a page receives the generated CSS in one request, as it does from Tailwind CSS. A stylesheet that keeps an external import, a namespace or a qualified import of a file with its own imports stays a separate file; none of the fixtures has one.

Limits: these numbers do not measure browser parsing, style recalculation, layout, paint, interaction cost, watch mode, or HMR. The fixtures use utility classes only; the page CSS sample shows how much authored component CSS can add.


#Changes since the July snapshots

The previous snapshots, dated July 1, 2026, measured a revision whose engine has since moved to Rust and whose class syntax has since changed. To separate code changes from the machine, the browser and the benchmark harness, the July revision cd5a3972a was rebuilt and its own benchmark runner run again on the same machine and Chromium build as the current measurements. Production builds alternated between the two checkouts three times, so background load on the machine affected both sides alike.

That rerun reproduced the July static CSS output byte for byte, so the earlier figures were valid for their revision. The current fixtures express the same rendered values in the current class syntax; every class in them generates CSS, and the CLI's --strict mode accepts them.

MeasurementAreaJul 2, 2026Nov 4, 2026Change
Master CSS CLI CSS (Brotli)Static CSS output1.8 kB1.9 kB+5%
Master CSS CLI CSS filesStatic CSS output11Same
Master CSS Vite CSS filesStatic CSS output11Same
Tailwind CSS CLI CSS (Brotli, control)Static CSS output2.6 kB2.6 kB+2%
Master CSS CLI cold buildProduction build155.8 ms274.2 ms+76%
Master CSS Vite cold buildProduction build230.9 ms340.1 ms+47%
Tailwind CSS CLI cold build (control)Production build88.2 ms77.0 ms−13%
Tailwind CSS Vite cold build (control)Production build150.8 ms129.2 ms−14%
Runtime JS (Brotli)Runtime delivery22.8 kB33.3 kB+46%
Runtime default data (Brotli)Runtime delivery9.8 kB15.4 kB+57%
Runtime bootstrapRuntime delivery10.3 ms8.7 ms−16%
Runtime observeRuntime delivery4.7 ms4.5 ms−4%
Runtime navigation readyRuntime delivery40.8 ms39.2 ms−4%
Progressive requests on loadProgressive delivery32−33%
Progressive hydration data (Brotli)Progressive delivery1.6 kB464 B0.3×
Progressive bootstrapProgressive delivery13.2 ms5.4 ms0.4×
Progressive observe and hydrateProgressive delivery2.1 ms0.3 ms0.1×
Progressive navigation readyProgressive delivery40.4 ms39.0 ms−3%
Tailwind CSS static navigation ready (control)Progressive delivery23.9 ms25.8 ms+8%
Runtime first-time class: mutation workInteraction0.3 ms0.5 ms+67%
Progressive first-time class: mutation workInteraction0.6 ms0.3 ms0.5×
Tailwind CSS existing-class toggle ready (control)Interaction46.6 ms61.0 ms+31%
Medians from each revision's own runner on the same machine and Chromium build. Production builds ran with the same Node.js version on both sides; each build median pools 15 commands from three alternating runs.

On this machine, the current revision starts the browser runtime faster and hydrates progressive pages with less data, while downloading a larger runtime and taking longer for a cold production command. Generated CSS for the docs fixture grew by about 5% and, as in July, arrives as one file. Each checkout installs its own Tailwind CSS and Vite versions, so the Tailwind CSS controls reflect those upgrades as well as run-to-run noise.

Interaction readiness is about the same for every mode, including Tailwind CSS, on both revisions. It is bounded by the harness's frame waits rather than by Master CSS work, so readings move in steps of about one frame (17 ms); the lower Tailwind CSS reading on the July revision is one such step.


#Technical appendix

These suites explain the costs behind the results above: production commands, Chromium's response to CSS volume, and what each Master CSS rendering mode sends and does in the browser. Read them when choosing a rendering mode or diagnosing build time.

#Core hypothesis

The delivery question is whether the browser work saved by loading fewer CSS rules can offset the cost of generating rules at runtime. Compare the whole page lifecycle: initial loading, later interactions and long-session cleanup.

Runtime and progressive rendering add JavaScript work to generate rules from observed classes. When that class set is smaller than a static source-derived set, they can reduce initial CSS and CSSOM rule volume. Whether that reduction offsets startup and mutation work depends on the workload. 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. Read the measurements in this order when evaluating that delivery tradeoff:

  1. Page CSS and static CSS output show how many bytes, files, selectors, declarations, and rules a page or 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 large are the CSS bodies discovered from each documentation page, and how much of them does the page use?Page CSS size snapshot
How large is generated static CSS for the same UI?Static CSS output and CSS structure snapshots
How long does a production command take?Production build
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
What changed between revisions?Revision comparison

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.

Check correctness alongside timing: a smaller or faster result is useful only if the fixture renders the intended UI. The tables include computed-style and progressive-adoption checks where the suite records them.

#Production build

Question answered: how long does a complete cold or repeated production command take for each static fixture and setup?

Master CSS
206 ms
Tailwind CSS3.9x faster
52.3 ms
Cold production command median for the docs fixture using the CLI setup.
FixtureVariantCold medianRepeat medianSamples
MinimalMaster CSS static CLI209 ms204 ms5
MinimalMaster CSS static Vite269 ms254 ms5
MinimalTailwind CSS CLI50.7 ms47.3 ms5
MinimalTailwind CSS Vite97.5 ms91.9 ms5
DocsMaster CSS static CLI206 ms203 ms5
DocsMaster CSS static Vite269 ms258 ms5
DocsTailwind CSS CLI52.3 ms49.3 ms5
DocsTailwind CSS Vite101 ms91.1 ms5
DashboardMaster CSS static CLI213 ms209 ms5
DashboardMaster CSS static Vite307 ms263 ms5
DashboardTailwind CSS CLI56.1 ms51.6 ms5
DashboardTailwind CSS Vite110 ms96.6 ms5
Stress CSSMaster CSS static CLI235 ms216 ms5
Stress CSSMaster CSS static Vite287 ms276 ms5
Stress CSSTailwind CSS CLI52.8 ms50.5 ms5
Stress CSSTailwind CSS Vite105 ms98.8 ms5
Cold and repeat production command timing data for every measured fixture and setup.

Interpretation: build timings include process, CLI or Vite, and package startup for each command path, so a small fixture mostly measures fixed startup cost. Repeat production build means a second command in the same workspace; it is not 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
Fixtures4 minimal, docs, dashboard, and stress-css diagnostic fixtures
Source reports4 startup, build, compiler, and extraction diagnostics
EnvironmentApple M5 Max, v26.3.0 darwin 27.0.0 arm64, 18 CPUs
CLI command vs extraction216.5 ms / 52.2 ms `docs` fixture full command envelope versus CLI CSS extraction
Vite overhead vs scanner init194.7 ms / 6.06 ms Check`docs` fixture Master Vite command overhead versus scanner init
Registration and compose47.3 ms / 53.4 ms `docs` fixture stylesheet entry registration versus the first full public compose
Curated Master CSS build-path diagnostics snapshot.

CLI path

Docs fixture medians
Full CLI command3 samples
216.5 ms
CLI startup probe3 samples
210.8 ms
Scanner import probe3 samples
15.8 ms
Source scan3 samples
1.15 ms
CSS extraction3 samples
52.2 ms

Vite path

Docs fixture medians
Master Vite command overhead3 samples
194.7 ms
@master/css-vite import probe3 samples
27.1 ms
Vite core module import probe3 samples
82.6 ms
Vite scanner init3 samples
6.06 ms
Vite bundle CSS extraction3 samples
1.42 ms

Stylesheet pipeline

Docs fixture medians of separate public operations
Stylesheet registration3 samples
47.3 ms
First full compose3 samples
53.4 ms
Repeated full compose3 samples
31.8 ms
Compose without native CSS3 samples
46.5 ms
Compose without generated CSS3 samples
29.1 ms
Diagnostic medians for the docs fixture. Startup probes are directional and are not additive flamegraphs.
FixtureCLI commandCLI extractionVite overheadVite importVite scannerRegistrationFirst composePipeline totalFinal CSS
Minimal227.1 ms54 ms211.9 ms28.3 ms6.46 ms48.5 ms53.4 ms217.2 ms5.6 kB
Docs216.5 ms52.2 ms194.7 ms27.1 ms6.06 ms47.3 ms53.4 ms218.9 ms6.4 kB
Dashboard211.1 ms55.9 ms204.5 ms26.5 ms6 ms47.3 ms56.1 ms230 ms6.7 kB
Stress CSS220.8 ms61 ms206.3 ms26.7 ms6.02 ms47.4 ms68.6 ms263.1 ms12.6 kB
Complete build-path diagnostic snapshot data for every measured fixture.

Interpretation: module imports and source scanning take a few milliseconds of an ordinary fixture command. Registering the stylesheet entry and composing the output take tens of milliseconds each, and a repeated compose on the same setup still costs about three fifths of the first. A CPU profile of one CLI run (node --cpu-prof) attributes the largest share of the command, about a third, to compiling the imported preset stylesheet graph, work that does not depend on the fixture’s classes; small fixtures therefore pay nearly the same fixed cost as larger ones.

Limits: diagnostic probes measure separate envelopes and substeps. Do not add their timings together as if they were a single production trace.

#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 levels4 fixed visible DOM while deterministic external CSS grows
Largest CSS45.6 kB 90,042 declarations in the warm-cache xlarge-css variant
DOM controls3 fixed CSS while repeated DOM items grow
Largest DOM21,012 measured DOM nodes in the warm-cache large-dom variant
BrowserChromium 156.0.8078.4 headless browser used for the committed trace snapshot
Trace samples3 measured browser rounds per warm-cache variant
Curated browser CSS cost snapshot.

Style recalculation

Warm-cache median
Small CSS1.6 kB, 792 decls
0.4 ms
Medium CSS5.4 kB, 7,542 decls
0.4 ms
Large CSS16.4 kB, 30,042 decls
0.4 ms
XLarge CSS45.6 kB, 90,042 decls
0.4 ms

Layout

Warm-cache median
Small CSS1.6 kB, 792 decls
0.7 ms
Medium CSS5.4 kB, 7,542 decls
0.8 ms
Large CSS16.4 kB, 30,042 decls
0.7 ms
XLarge CSS45.6 kB, 90,042 decls
0.8 ms

Paint

Warm-cache median
Small CSS1.6 kB, 792 decls
0.6 ms
Medium CSS5.4 kB, 7,542 decls
0.6 ms
Large CSS16.4 kB, 30,042 decls
0.5 ms
XLarge CSS45.6 kB, 90,042 decls
0.6 ms
Warm-cache trace medians while CSS rule volume grows and visible DOM stays fixed.

Style recalculation

Warm-cache median
Small DOM712 nodes
0.9 ms
Medium DOM7,012 nodes
6.2 ms
Large DOM21,012 nodes
17.7 ms

Layout

Warm-cache median
Small DOM712 nodes
1.6 ms
Medium DOM7,012 nodes
15.7 ms
Large DOM21,012 nodes
55.4 ms

Paint

Warm-cache median
Small DOM712 nodes
1.4 ms
Medium DOM7,012 nodes
4.6 ms
Large DOM21,012 nodes
10.6 ms
Warm-cache trace medians while DOM volume grows and CSS stays fixed.
AxisVariantCacheCSS brotliRulesDeclarationsDOM nodesStyle recalcLayoutPaintSamples
CSS volumeSmall CSSCold cache1.6 kB2637922050.6 ms3.8 ms0.9 ms3
CSS volumeSmall CSSWarm cache1.6 kB2637922050.4 ms0.7 ms0.6 ms3
CSS volumeMedium CSSCold cache5.4 kB2,5137,5422051 ms4.4 ms1.1 ms3
CSS volumeMedium CSSWarm cache5.4 kB2,5137,5422050.4 ms0.8 ms0.6 ms3
CSS volumeLarge CSSCold cache16.4 kB10,01330,0422051.7 ms3.9 ms0.9 ms3
CSS volumeLarge CSSWarm cache16.4 kB10,01330,0422050.4 ms0.7 ms0.5 ms3
CSS volumeXLarge CSSCold cache45.6 kB30,01390,0422053.7 ms3.9 ms0.8 ms3
CSS volumeXLarge CSSWarm cache45.6 kB30,01390,0422050.4 ms0.8 ms0.6 ms3
DOM scalingSmall DOMCold cache0.5 kB15507121 ms4.7 ms1.7 ms3
DOM scalingSmall DOMWarm cache0.5 kB15507120.9 ms1.6 ms1.4 ms3
DOM scalingMedium DOMCold cache0.5 kB15507,0126.4 ms19.9 ms4 ms3
DOM scalingMedium DOMWarm cache0.5 kB15507,0126.2 ms15.7 ms4.6 ms3
DOM scalingLarge DOMCold cache0.5 kB155021,01218.1 ms51.7 ms8.7 ms3
DOM scalingLarge DOMWarm cache0.5 kB155021,01217.7 ms55.4 ms10.6 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, program 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
Fixtures4 static fixture set measured across every delivery mode
Modes4 Master static, runtime, progressive, and Tailwind static
BrowserChromium 156.0.8078.4 headless browser used for local trace measurements
Trace samples3 measured browser rounds per variant
Progressive adoption4/4 Goodfixtures where progressive runtime adopted server-rendered CSS
Curated Master CSS delivery modes snapshot.

Representative fixture

The primary charts show the docs fixture.

The payload chart counts the complete HTML response and each external asset requested during the initial load once. Inline CSS and the injected hydration manifest are already inside that HTML, so they are not separate segments. Empty asset fields do not add compression-container bytes to the total.

Master CSS static2 requests3.9 kB
  • HTML2 kB
  • External CSS1.9 kB
Master CSS runtime3 requests50.9 kB
  • HTML2.2 kB
  • Runtime JS33.3 kB
  • Runtime program15.4 kB
Master CSS progressive2 requests36.7 kB
  • HTML3.5 kB
  • Runtime JS33.3 kB
Tailwind CSS static2 requests4.5 kB
  • HTML1.9 kB
  • External CSS2.6 kB
Recorded response assets, compressed separately with Brotli, for the docs fixture. All bars share a zero-based scale ending at the largest total; segments show each asset's contribution.

These totals are estimates from the recorded asset fields, not measured network transfer sizes. They exclude headers and transport overhead, and every page’s HTML includes the benchmark harness scripts. The detailed table retains separately compressed inline CSS and hydration fragments as diagnostics; adding those columns to the response total would count their content twice.

Navigation to ready

Median
Master CSS static3 samples
25 ms
Master CSS runtime3 samples
39.2 ms
Master CSS progressive3 samples
39 ms
Tailwind CSS static3 samples
25.8 ms

Style recalculation

Median
Master CSS static3 samples
0.9 ms
Master CSS runtime3 samples
0.7 ms
Master CSS progressive3 samples
0.6 ms
Tailwind CSS static3 samples
1 ms

Layout

Median
Master CSS static3 samples
6.9 ms
Master CSS runtime3 samples
3.7 ms
Master CSS progressive3 samples
3.6 ms
Tailwind CSS static3 samples
7.7 ms

Paint

Median
Master CSS static3 samples
1.3 ms
Master CSS runtime3 samples
0.7 ms
Master CSS progressive3 samples
0.7 ms
Tailwind CSS static3 samples
1.2 ms
Local Chromium load timing medians for the docs fixture.

Runtime bootstrap

Median
Master CSS runtime3 samples
8.7 ms
Master CSS progressive3 samples
5.4 ms

Runtime observe

Median
Master CSS runtime3 samples
4.5 ms
Master CSS progressive3 samples
0.3 ms
Runtime bootstrap and observe medians for Master runtime and progressive modes.
FixtureModeResponse assetsHTMLExternal CSSInline CSS (in HTML)Runtime JSRuntime programHydration (in HTML)RulesDeclarationsNavigation readyStyle recalcLayoutPaintRuntime bootstrapRuntime observeProgressive adopted
MinimalMaster CSS static3.1 kB1.4 kB1.7 kB0 kB0 kB0 kB0 kB8613424.6 ms0.8 ms5.4 ms0.8 ms0 ms0 ms0
MinimalMaster CSS runtime50.4 kB1.7 kB0 kB0 kB33.3 kB15.4 kB0 kB0039.6 ms0.6 ms3 ms0.4 ms8.9 ms4.2 ms0
MinimalMaster CSS progressive36 kB2.7 kB0 kB0.8 kB33.3 kB0 kB0.4 kB496739.8 ms0.5 ms2.8 ms0.4 ms4.2 ms0.3 ms1
MinimalTailwind CSS static3.7 kB1.4 kB2.3 kB0 kB0 kB0 kB0 kB8617423.1 ms0.7 ms4.6 ms0.6 ms0 ms0 ms0
DocsMaster CSS static3.9 kB2 kB1.9 kB0 kB0 kB0 kB0 kB10215325 ms0.9 ms6.9 ms1.3 ms0 ms0 ms0
DocsMaster CSS runtime50.9 kB2.2 kB0 kB0 kB33.3 kB15.4 kB0 kB0039.2 ms0.7 ms3.7 ms0.7 ms8.7 ms4.5 ms0
DocsMaster CSS progressive36.7 kB3.5 kB0 kB1 kB33.3 kB0 kB0.5 kB658639 ms0.6 ms3.6 ms0.7 ms5.4 ms0.3 ms1
DocsTailwind CSS static4.5 kB1.9 kB2.6 kB0 kB0 kB0 kB0 kB10222625.8 ms1 ms7.7 ms1.2 ms0 ms0 ms0
DashboardMaster CSS static3.8 kB1.9 kB1.9 kB0 kB0 kB0 kB0 kB10816123.7 ms8 ms2.7 ms1.4 ms0 ms0 ms0
DashboardMaster CSS runtime50.9 kB2.2 kB0 kB0 kB33.3 kB15.4 kB0 kB0040.7 ms5.8 ms2 ms0.9 ms9.1 ms4.6 ms0
DashboardMaster CSS progressive36.7 kB3.4 kB0 kB1 kB33.3 kB0 kB0.5 kB719442.4 ms5.4 ms1.8 ms0.8 ms6.2 ms0.4 ms1
DashboardTailwind CSS static4.3 kB1.9 kB2.4 kB0 kB0 kB0 kB0 kB10519523.1 ms9 ms2.7 ms1.2 ms0 ms0 ms0
Stress CSSMaster CSS static4.3 kB2.2 kB2 kB0 kB0 kB0 kB0 kB30135224.1 ms1.3 ms5.9 ms1.1 ms0 ms0 ms0
Stress CSSMaster CSS runtime51.2 kB2.5 kB0 kB0 kB33.3 kB15.4 kB0 kB0039.4 ms1.1 ms3.6 ms0.6 ms12.6 ms7.9 ms0
Stress CSSMaster CSS progressive37.4 kB4.1 kB0 kB1.1 kB33.3 kB0 kB0.5 kB26428539.3 ms1 ms3.6 ms0.7 ms6.1 ms0.7 ms1
Stress CSSTailwind CSS static4.8 kB2.3 kB2.6 kB0 kB0 kB0 kB0 kB30036923.3 ms1.9 ms5.8 ms1 ms0 ms0 ms0
Complete delivery mode snapshot data for every measured fixture and mode.

Interpretation: runtime mode delivers no generated CSS but fetches the browser runtime and its compiled default program before the page is styled. Progressive mode begins with server/build-time CSS in the HTML and adopts it with the runtime; it fetches the program only when a class is missing from the hydration data, which did not happen during these initial loads.

Limits: these numbers measure initial local fixture loads only. Post-load mutation belongs to the interaction suite. Master static and Tailwind static load one CLI-generated stylesheet each, built from equivalent fixture intent, not identical class strings. Runtime and progressive pages load the self-contained global runtime bundle; a bundler integration can load a smaller progressive entry, measured by the runtime size contract. See Rendering modes for how each mode starts.

#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
Fixtures3 dynamic, dashboard, and stress-dom interaction fixtures
Variants54 supported fixture, mode, and scenario combinations
BrowserChromium 156.0.8078.4 headless browser used for local trace measurements
Samples3 measured rounds per default interaction variant
Progressive adoption3/3 Goodfixtures with at least one adopted progressive interaction variant
Curated interaction cost snapshot.

Existing class toggle

Mutation-ready median
Master CSS static64 elements
59 ms
Master CSS runtime64 elements
62.6 ms
Master CSS progressive64 elements
61.1 ms
Tailwind CSS static64 elements
61 ms

New class toggle

Mutation-ready median
Master CSS runtime64 elements
62.2 ms
Master CSS progressive64 elements
60.8 ms

DOM append/remove

Mutation-ready median
Master CSS static48 elements
60.6 ms
Master CSS runtime48 elements
63.6 ms
Master CSS progressive48 elements
59.5 ms
Tailwind CSS static48 elements
58.8 ms
Mutation-ready medians for primary dynamic fixture scenarios.

Existing class runtime update

Runtime mutation median
Master CSS runtime+0 snapshot rules
0 ms
Master CSS progressive+0 snapshot rules
0 ms

New class runtime update

Runtime mutation median
Master CSS runtime+4 snapshot rules
0.5 ms
Master CSS progressive+69 snapshot rules
0.3 ms

Cleanup-cycle runtime update

Runtime mutation median
Master CSS runtime+3 snapshot rules
0.6 ms
Master CSS progressive+68 snapshot rules
0.5 ms
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 static59 ms0 ms00 kB0.3 ms0 ms0.3 ms309641103
DynamicExisting class toggleMaster CSS runtime62.6 ms0 ms00 kB0.2 ms0 ms0.3 ms310641103
DynamicExisting class toggleMaster CSS progressive61.1 ms0 ms00 kB0.3 ms0 ms0.3 ms311641113
DynamicExisting class toggleTailwind CSS static61 ms0 ms00 kB0.3 ms0 ms0.3 ms309641103
DynamicNew class toggleMaster CSS runtime62.2 ms0.5 ms40.2 kB0.8 ms0.5 ms0.4 ms310641103
DynamicNew class toggleMaster CSS progressive60.8 ms0.3 ms690.2 kB0.8 ms0.5 ms0.4 ms311641113
DynamicDOM append/removeMaster CSS static60.6 ms0 ms00 kB0.3 ms0.1 ms0.2 ms309481103
DynamicDOM append/removeMaster CSS runtime63.6 ms0 ms00 kB0.3 ms0.1 ms0.2 ms310481103
DynamicDOM append/removeMaster CSS progressive59.5 ms0 ms00 kB0.3 ms0.1 ms0.2 ms311481113
DynamicDOM append/removeTailwind CSS static58.8 ms0 ms00 kB0.3 ms0.1 ms0.2 ms309481103
DynamicTheme switchMaster CSS static62.9 ms0 ms00 kB0.3 ms0 ms0.3 ms309641103
DynamicTheme switchMaster CSS runtime60.8 ms0.1 ms10.1 kB0.5 ms0 ms0.3 ms310641103
DynamicTheme switchMaster CSS progressive62.6 ms0.2 ms660.1 kB0.5 ms0 ms0.3 ms311641113
DynamicTheme switchTailwind CSS static62.3 ms0 ms00 kB0.3 ms0 ms0.3 ms309641103
DynamicViewport resizeMaster CSS static112.7 ms0 ms00 kB0.4 ms0.7 ms0.7 ms309641103
DynamicViewport resizeMaster CSS runtime112.1 ms0 ms00 kB0.3 ms0.7 ms0.7 ms310641103
DynamicViewport resizeMaster CSS progressive110.1 ms0 ms00 kB0.3 ms0.7 ms0.7 ms311641113
DynamicViewport resizeTailwind CSS static112.5 ms0 ms00 kB0.6 ms0.7 ms0.8 ms309641103
DynamicMutation cleanup cycleMaster CSS static329.4 ms0 ms00 kB1.1 ms1.5 ms3.2 ms3091921103
DynamicMutation cleanup cycleMaster CSS runtime329.9 ms0.6 ms30.1 kB1.6 ms1.8 ms3.1 ms3101921103
DynamicMutation cleanup cycleMaster CSS progressive330.2 ms0.5 ms680.1 kB1.6 ms1.6 ms2.8 ms3111921113
DynamicMutation cleanup cycleTailwind CSS static328.3 ms0 ms00 kB1.1 ms1.3 ms3.3 ms3091921103
DashboardExisting class toggleMaster CSS static61.3 ms0 ms00 kB0.5 ms0 ms0.6 ms9811601103
DashboardExisting class toggleMaster CSS runtime62.8 ms0 ms00 kB0.5 ms0 ms0.5 ms9821601103
DashboardExisting class toggleMaster CSS progressive60.3 ms0 ms00 kB0.5 ms0 ms0.5 ms9831601113
DashboardExisting class toggleTailwind CSS static60.5 ms0 ms00 kB0.7 ms0 ms0.7 ms9811601103
DashboardDOM append/removeMaster CSS static61.1 ms0 ms00 kB0.4 ms0.1 ms0.3 ms981801103
DashboardDOM append/removeMaster CSS runtime60.9 ms0 ms00 kB0.4 ms0.1 ms0.3 ms982801103
DashboardDOM append/removeMaster CSS progressive61.1 ms0 ms00 kB0.4 ms0.1 ms0.3 ms983801113
DashboardDOM append/removeTailwind CSS static63.4 ms0 ms00 kB0.5 ms0.1 ms0.4 ms981801103
DashboardTheme switchMaster CSS static61.2 ms0 ms00 kB0.5 ms0 ms0.5 ms9811601103
DashboardTheme switchMaster CSS runtime61.2 ms0.2 ms10.1 kB0.8 ms0 ms0.5 ms9821601103
DashboardTheme switchMaster CSS progressive63.1 ms0.2 ms660.1 kB0.8 ms0 ms0.5 ms9831601113
DashboardTheme switchTailwind CSS static64 ms0 ms00 kB0.6 ms0 ms0.7 ms9811601103
DashboardViewport resizeMaster CSS static113.4 ms0 ms00 kB0.4 ms1.9 ms1.4 ms9811601103
DashboardViewport resizeMaster CSS runtime110.7 ms0 ms00 kB0.3 ms1.8 ms1.2 ms9821601103
DashboardViewport resizeMaster CSS progressive110.3 ms0 ms00 kB0.3 ms1.9 ms1.3 ms9831601113
DashboardViewport resizeTailwind CSS static110.3 ms0 ms00 kB0.5 ms1.8 ms1.5 ms9811601103
Stress DOMExisting class toggleMaster CSS static63.5 ms0 ms00 kB1.7 ms0 ms0.8 ms3,6216001103
Stress DOMExisting class toggleMaster CSS runtime61 ms0 ms00 kB1.8 ms0 ms0.7 ms3,6226001103
Stress DOMExisting class toggleMaster CSS progressive63.6 ms0 ms00 kB1.8 ms0 ms0.8 ms3,6236001113
Stress DOMExisting class toggleTailwind CSS static61.6 ms0 ms00 kB2.2 ms0 ms1 ms3,6216001103
Stress DOMDOM append/removeMaster CSS static62.9 ms0 ms00 kB0.6 ms0.1 ms0.5 ms3,6211601103
Stress DOMDOM append/removeMaster CSS runtime60.6 ms0 ms00 kB0.6 ms0.1 ms0.6 ms3,6221601103
Stress DOMDOM append/removeMaster CSS progressive63.2 ms0 ms00 kB0.5 ms0.1 ms0.5 ms3,6231601113
Stress DOMDOM append/removeTailwind CSS static63.4 ms0 ms00 kB0.7 ms0.1 ms0.6 ms3,6211601103
Stress DOMViewport resizeMaster CSS static112.8 ms0 ms00 kB0.6 ms6.5 ms2.7 ms3,6216001103
Stress DOMViewport resizeMaster CSS runtime108.1 ms0 ms00 kB0.4 ms6.2 ms2.7 ms3,6226001103
Stress DOMViewport resizeMaster CSS progressive112.4 ms0 ms00 kB0.4 ms6.1 ms2.7 ms3,6236001113
Stress DOMViewport resizeTailwind CSS static110.3 ms0 ms00 kB0.6 ms6 ms2.9 ms3,6216001103
Stress DOMMutation cleanup cycleMaster CSS static262.8 ms0 ms00 kB1.8 ms2.7 ms7.7 ms3,6214801103
Stress DOMMutation cleanup cycleMaster CSS runtime262.3 ms0.3 ms30.1 kB5.9 ms7.4 ms7.4 ms3,6224801103
Stress DOMMutation cleanup cycleMaster CSS progressive261.8 ms0.5 ms680.1 kB6.2 ms7.6 ms7.4 ms3,6234801113
Stress DOMMutation cleanup cycleTailwind CSS static263.1 ms0 ms00 kB2 ms2.6 ms7.5 ms3,6214801103
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. Readiness includes the harness’s frame waits and is nearly identical across modes, so compare runtime mutation work and style recalculation for the cost a mode adds. The rule delta counts rules in the runtime’s public snapshot. While a progressive page defers its engine, that snapshot holds no rules; the first class missing from the hydration data starts the engine, which adopts the server-rendered rules into its state, so that interaction’s delta also counts the adopted rules. Compare runtime mutation work and style recalculation for its CSSOM cost.

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

#Browser lifecycle and long sessions

Question answered: how much rendering and runtime work accumulated during each recorded five-minute session?

The lifecycle suite compares Master CSS static, runtime and progressive setups with a Tailwind CSS static control. The charts below select the five-minute long-session scenario. Each mode has one measured run; a median with one sample is that single observation, not evidence of repeatability.

The table’s elapsed time covers the entire scripted session and its final settling frames. The source metric is named inp-style-interaction-ms, but for this scenario it is approximately five minutes by construction. It does not measure an individual input delay or Web Vitals INP.

MetricValueDetail
Snapshot variants64 7 scenarios across 4 modes
Evidence modes4/4 Goodsegmented five-minute long-session reports
BrowserChromium 156.0.8078.4 headless browser used for local trace measurements
Long-session samples1 measured five-minute rounds per mode in committed evidence
Computed style checks4/4 Goodfive-minute evidence variants with computed-style-valid = 1
Progressive adoption1/1 GoodMaster progressive long-session evidence variant
Coverage and correctness checks for browser lifecycle evidence.

Style recalculation

Five-minute runs · n=1
Master CSS static
6,644 ms
Master CSS runtime
5,047.7 ms
Master CSS progressive
8,913.1 ms
Tailwind CSS static
12,181.7 ms

Layout

Five-minute runs · n=1
Master CSS static
1,307.4 ms
Master CSS runtime
1,119 ms
Master CSS progressive
1,659.5 ms
Tailwind CSS static
1,718.1 ms

Paint

Five-minute runs · n=1
Master CSS static
5,760.7 ms
Master CSS runtime
4,698.8 ms
Master CSS progressive
7,194.2 ms
Tailwind CSS static
6,998.8 ms

Long tasks

Five-minute runs · n=1
Master CSS static
0
Master CSS runtime
1
Master CSS progressive
0
Tailwind CSS static
0

CSSOM rules

Five-minute runs · n=1
Master CSS static
98
Master CSS runtime
59
Master CSS progressive
59
Tailwind CSS static
112

Runtime mutation work

Five-minute runs · n=1
Master CSS static0 rules
0 ms
Master CSS runtime78 rules
211.3 ms
Master CSS progressive78 rules
312.6 ms
Tailwind CSS static0 rules
0 ms
Browser rendering and runtime work observed during one five-minute run per mode.
ModeSession elapsedStyle recalcLayoutPaintLong tasksCSSOM rulesRuntime rulesRuntime mutationJS heapComputed styleProgressive adoptedSamples
Master CSS static300,115.9 ms6,644 ms1,307.4 ms5,760.7 ms09800 ms1,796.3 kB101
Master CSS runtime300,102.5 ms5,047.7 ms1,119 ms4,698.8 ms15978211.3 ms5,358 kB101
Master CSS progressive300,119.9 ms8,913.1 ms1,659.5 ms7,194.2 ms05978312.6 ms4,808.1 kB111
Tailwind CSS static300,117.2 ms12,181.7 ms1,718.1 ms6,998.8 ms011200 ms1,479.7 kB101
Complete five-minute long-session evidence for every mode.

Interpretation: compare total style recalculation with the runtime mutation work each mode adds. A single run per mode cannot establish a stable speedup. Compare repeated runs on the same machine before drawing conclusions about layout, paint, responsiveness or overall performance.

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.


#Data sources

The charts read committed snapshots under benchmarks/**/snapshot.json and benchmarks/browser-lifecycle/long-session-evidence.json, dated November 4, 2026. Fixtures, metric families, publication rules, recorded commands and validation steps are in the benchmarks README. Reproducing a result requires the matching source revision and lockfile, not just a current package installation.