{"schemaVersion":1,"status":"Official uniform campaign","provenance":{"publicSource":"https://github.com/microsoft/webui-benchmarks","sourceAccess":"Exported from the official reports in webui-benchmarks. This download is a sanitized extract, not a raw-run archive.","serverMeasuredRounds":1,"browserIsolatedRuns":10,"campaign":{"canonicalWebuiVersion":"3.0.4","responseModes":["complete","progressive"],"uniformOfficialMatrix":true,"sourceCommit":"aee2a043de24f124fd9dddae228285f5964f731a","sourceDigest":"10072f0f646c8d3df1abd139ae0d0f03e90c8b3479d42a9191606fa5cb7a4b46","fixtureDigest":"10072f0f646c8d3df1abd139ae0d0f03e90c8b3479d42a9191606fa5cb7a4b46","evidenceDigest":"fd005660c1af487600a266a0669e905e54cbad73a9e075608ca8a676afd9fdd3","matrixId":"official-ssr-matrix","status":"official-uniform","progressiveMeasuredAt":"2026-10-22T01:29:33.368Z","completeMeasuredAt":"2026-10-22T01:39:47.554Z","browserMeasuredAt":"2026-10-22T01:47:35.884Z"},"missing":["A public cross-framework raw-run archive is not embedded in this sanitized docs extract."],"limitations":["One measured server round does not estimate run-to-run variability. Zero MAD is not evidence of confidence or a statistically established winner.","Browser metrics describe 10 isolated runs. Reported MAD and p95 are descriptive, not confidence bounds; the raw samples are not available here.","Some renderer-private measurements are unavailable. Each row's notes disclose the available and unavailable sample counts; these medians do not all use 10 samples.","Lower memory use is not an overall performance score. JavaScript heap, renderer private bytes, LCP, and server throughput measure different things.","Server throughput uses 64 connections. Saturation warnings in individual notes identify still-rising 128-connection probes; these are not demonstrated maximum throughputs.","The progressive category retains each case's existing behavior, including buffered routes. The dedicated WebUI resumable async data-boundary workload was not measured.","This sanitized extract preserves the five displayed metrics and their notes. It omits bulk server telemetry and unsupported winner summaries; it is not a complete reproducibility package."]},"metrics":[{"id":"jsHeapUsedBytes","label":"JavaScript heap","unit":"MiB","rawUnit":"bytes","direction":"lower","directionLabel":"Lower uses less JS memory","description":"Post-readiness JavaScript heap after explicit Chromium garbage collection. This is not total browser memory.","samples":10,"methodology":"Chromium 156.0.8078.4 · 1,440×900 viewport · 10 randomized cold-cache navigations · fresh foreground process/context/page per sample · native occlusion throttling disabled · no CPU or network throttling"},{"id":"rendererPrivateBytes","label":"Renderer private bytes","unit":"MiB","rawUnit":"bytes","direction":"lower","directionLabel":"Lower uses less renderer memory","description":"Private bytes attributed to the isolated Chromium renderer after readiness. This is separate from JavaScript heap.","samples":10,"methodology":"Chromium 156.0.8078.4 · 1,440×900 viewport · 10 randomized cold-cache navigations · fresh foreground process/context/page per sample · native occlusion throttling disabled · no CPU or network throttling"},{"id":"largestContentfulPaintMs","label":"Largest contentful paint","unit":"ms","rawUnit":"ms","direction":"lower","directionLabel":"Lower paints earlier","description":"Pre-interaction LCP from navigation start in an unthrottled lab setup, not field Core Web Vitals.","samples":10,"methodology":"Chromium 156.0.8078.4 · 1,440×900 viewport · 10 randomized cold-cache navigations · fresh foreground process/context/page per sample · native occlusion throttling disabled · no CPU or network throttling"},{"id":"noStreamingRequestsPerSecond","label":"Complete response","unit":"req/s","rawUnit":"req/s","direction":"higher","directionLabel":"Higher serves more requests","description":"Dynamic SSR throughput with a fully collected HTML response. One measured round cannot establish run-to-run variability.","samples":1,"methodology":"100 todos · 13 component types · 32 warm structural variants · current UTC state materialized per request · 64 connections from 2 load workers · 1 server process/worker pinned to 1 CPU · 1 × 20 s measured round · dynamic SSR · natural bytes"},{"id":"streamingRequestsPerSecond","label":"Progressive response","unit":"req/s","rawUnit":"req/s","direction":"higher","directionLabel":"Higher serves more requests","description":"Dynamic SSR throughput with each case's existing response behavior. Some cases remain buffered; see their notes.","samples":1,"methodology":"100 todos · 13 component types · 32 warm structural variants · current UTC state materialized per request · 64 connections from 2 load workers · 1 server process/worker pinned to 1 CPU · 1 × 20 s measured round · dynamic SSR · natural bytes"}],"rows":[{"caseId":"astro","label":"Astro + Preact","values":{"jsHeapUsedBytes":{"value":2513486,"display":"2.4","detail":"10 isolated runs · MAD <0.01 MiB · p95 2.41 MiB"},"rendererPrivateBytes":{"value":46508032,"display":"44.35","detail":"8 isolated runs · MAD 0.21 MiB · p95 45.09 MiB · 2 unavailable"},"largestContentfulPaintMs":{"value":88,"display":"88","detail":"10 isolated runs · MAD 6 ms · p95 124 ms"},"noStreamingRequestsPerSecond":{"value":31.45,"display":"31.45","detail":"Astro production SSR + @astrojs/preact island (fully collected at the framework's own Node http.Server response boundary before the response completes) · @astrojs/node standalone · MAD 0 req/s · p95 3,243.41 ms · 464,007-464,864 B natural"},"streamingRequestsPerSecond":{"value":64.25,"display":"64.25","detail":"Astro production streaming SSR + @astrojs/preact island · @astrojs/node standalone · MAD 0 req/s · p95 1,012.46 ms · 464,005-464,864 B natural · saturation warning: the 128-connection probe was 6.0% faster"}}},{"caseId":"lit","label":"Lit","values":{"jsHeapUsedBytes":{"value":3005316,"display":"2.87","detail":"10 isolated runs · MAD <0.01 MiB · p95 2.87 MiB"},"rendererPrivateBytes":{"value":59781120,"display":"57.01","detail":"10 isolated runs · MAD 0.23 MiB · p95 57.64 MiB"},"largestContentfulPaintMs":{"value":60,"display":"60","detail":"10 isolated runs · MAD 2 ms · p95 88 ms"},"noStreamingRequestsPerSecond":{"value":82.95,"display":"82.95","detail":"@lit-labs/ssr render (collected RenderResult) · node:http · MAD 0 req/s · p95 691.56 ms · 1,357,852-1,363,128 B natural"},"streamingRequestsPerSecond":{"value":7.95,"display":"7.95","detail":"@lit-labs/ssr RenderResultReadable (declarative shadow DOM) · node:http · MAD 0 req/s · p95 3,321.62 ms · 1,357,852-1,363,128 B natural"}}},{"caseId":"next","label":"Next.js","values":{"jsHeapUsedBytes":{"value":3933198,"display":"3.75","detail":"10 isolated runs · MAD <0.01 MiB · p95 3.75 MiB"},"rendererPrivateBytes":{"value":50515968,"display":"48.18","detail":"10 isolated runs · MAD 0.12 MiB · p95 48.94 MiB"},"largestContentfulPaintMs":{"value":72,"display":"72","detail":"10 isolated runs · MAD 0 ms · p95 84 ms"},"noStreamingRequestsPerSecond":{"value":151.2,"display":"151.2","detail":"Next.js production App Router SSR (fully collected at the framework's own Node http.Server response boundary before the response completes) · next start · MAD 0 req/s · p95 459.38 ms · 313,626-314,199 B natural · saturation warning: the 128-connection probe was 21.9% faster"},"streamingRequestsPerSecond":{"value":154.39999999999998,"display":"154.4","detail":"Next.js production App Router streaming SSR · next start · MAD 0 req/s · p95 452.3 ms · 313,626-314,199 B natural · saturation warning: the 128-connection probe was 6.3% faster"}}},{"caseId":"nuxt","label":"Nuxt","values":{"jsHeapUsedBytes":{"value":3673666,"display":"3.5","detail":"10 isolated runs · MAD <0.01 MiB · p95 3.51 MiB"},"rendererPrivateBytes":{"value":50087936,"display":"47.77","detail":"8 isolated runs · MAD 0.36 MiB · p95 48.17 MiB · 2 unavailable"},"largestContentfulPaintMs":{"value":76,"display":"76","detail":"10 isolated runs · MAD 2 ms · p95 80 ms"},"noStreamingRequestsPerSecond":{"value":80.55,"display":"80.55","detail":"Nuxt production SSR (buffered synchronous route) · nitro node-server · MAD 0 req/s · p95 535.34 ms · 280,315-281,027 B natural · saturation warning: the 128-connection probe was 10.9% faster"},"streamingRequestsPerSecond":{"value":80.7,"display":"80.7","detail":"Nuxt production SSR (buffered synchronous route) · nitro node-server · MAD 0 req/s · p95 514.62 ms · 280,315-281,027 B natural"}}},{"caseId":"preact","label":"Preact","values":{"jsHeapUsedBytes":{"value":2486298,"display":"2.37","detail":"10 isolated runs · MAD <0.01 MiB · p95 2.37 MiB"},"rendererPrivateBytes":{"value":45793280,"display":"43.67","detail":"10 isolated runs · MAD 0.21 MiB · p95 44.15 MiB"},"largestContentfulPaintMs":{"value":64,"display":"64","detail":"10 isolated runs · MAD 0 ms · p95 64 ms"},"noStreamingRequestsPerSecond":{"value":421.70000000000005,"display":"421.7","detail":"preact-render-to-string renderToString · node:http · MAD 0 req/s · p95 182.42 ms · 333,940-334,646 B natural"},"streamingRequestsPerSecond":{"value":430.65,"display":"430.65","detail":"preact-render-to-string renderToReadableStream · node:http · MAD 0 req/s · p95 180.99 ms · 333,940-334,646 B natural · saturation warning: the 128-connection probe was 24.4% faster"}}},{"caseId":"react","label":"React","values":{"jsHeapUsedBytes":{"value":3108046,"display":"2.96","detail":"10 isolated runs · MAD <0.01 MiB · p95 2.97 MiB"},"rendererPrivateBytes":{"value":50526208,"display":"48.19","detail":"6 isolated runs · MAD 0.2 MiB · p95 48.53 MiB · 4 unavailable"},"largestContentfulPaintMs":{"value":68,"display":"68","detail":"10 isolated runs · MAD 2 ms · p95 80 ms"},"noStreamingRequestsPerSecond":{"value":490.54999999999995,"display":"490.55","detail":"react-dom/server renderToString · node:http · MAD 0 req/s · p95 163.49 ms · 334,118-334,824 B natural"},"streamingRequestsPerSecond":{"value":286.3,"display":"286.3","detail":"react-dom/server renderToReadableStream · node:http · MAD 0 req/s · p95 433.81 ms · 334,118-334,824 B natural"}}},{"caseId":"react-tanstack","label":"React + TanStack Router","values":{"jsHeapUsedBytes":{"value":3347234,"display":"3.19","detail":"10 isolated runs · MAD <0.01 MiB · p95 3.22 MiB"},"rendererPrivateBytes":{"value":51081216,"display":"48.71","detail":"7 isolated runs · MAD 0.84 MiB · p95 49.59 MiB · 3 unavailable"},"largestContentfulPaintMs":{"value":68,"display":"68","detail":"10 isolated runs · MAD 0 ms · p95 72 ms"},"noStreamingRequestsPerSecond":{"value":394.70000000000005,"display":"394.7","detail":"react-dom/server renderToString + @tanstack/react-router renderRouterToString · node:http · MAD 0 req/s · p95 198.16 ms · 334,661-335,367 B natural"},"streamingRequestsPerSecond":{"value":330.95,"display":"330.95","detail":"react-dom/server stream + @tanstack/react-router renderRouterToStream · node:http · MAD 0 req/s · p95 244.21 ms · 334,661-335,367 B natural"}}},{"caseId":"solid","label":"Solid","values":{"jsHeapUsedBytes":{"value":4928322,"display":"4.7","detail":"10 isolated runs · MAD <0.01 MiB · p95 4.7 MiB"},"rendererPrivateBytes":{"value":53612544,"display":"51.13","detail":"10 isolated runs · MAD 0.28 MiB · p95 51.92 MiB"},"largestContentfulPaintMs":{"value":108,"display":"108","detail":"10 isolated runs · MAD 4 ms · p95 112 ms"},"noStreamingRequestsPerSecond":{"value":328.20000000000005,"display":"328.2","detail":"solid-js/web renderToString · node:http · MAD 0 req/s · p95 261.11 ms · 378,043-378,863 B natural · saturation warning: the 128-connection probe was 7.2% faster"},"streamingRequestsPerSecond":{"value":247.75,"display":"247.75","detail":"solid-js/web renderToStream · node:http · MAD 0 req/s · p95 319.08 ms · 378,043-378,863 B natural"}}},{"caseId":"sveltekit","label":"SvelteKit","values":{"jsHeapUsedBytes":{"value":5124914,"display":"4.89","detail":"10 isolated runs · MAD <0.01 MiB · p95 4.89 MiB"},"rendererPrivateBytes":{"value":53374976,"display":"50.9","detail":"9 isolated runs · MAD 0.73 MiB · p95 51.85 MiB · 1 unavailable"},"largestContentfulPaintMs":{"value":72,"display":"72","detail":"10 isolated runs · MAD 0 ms · p95 84 ms"},"noStreamingRequestsPerSecond":{"value":279.9,"display":"279.9","detail":"SvelteKit production SSR (buffered synchronous route) · @sveltejs/adapter-node · MAD 0 req/s · p95 277.58 ms · 304,348-304,882 B natural"},"streamingRequestsPerSecond":{"value":267.65,"display":"267.65","detail":"SvelteKit production SSR (buffered synchronous route) · @sveltejs/adapter-node · MAD 0 req/s · p95 282.42 ms · 304,350-304,884 B natural"}}},{"caseId":"vue","label":"Vue","values":{"jsHeapUsedBytes":{"value":2836428,"display":"2.71","detail":"10 isolated runs · MAD <0.01 MiB · p95 2.71 MiB"},"rendererPrivateBytes":{"value":46491648,"display":"44.34","detail":"10 isolated runs · MAD 0.17 MiB · p95 44.9 MiB"},"largestContentfulPaintMs":{"value":68,"display":"68","detail":"10 isolated runs · MAD 0 ms · p95 76 ms"},"noStreamingRequestsPerSecond":{"value":282.05,"display":"282.05","detail":"@vue/server-renderer renderToString · node:http · MAD 0 req/s · p95 290.01 ms · 341,230-341,908 B natural"},"streamingRequestsPerSecond":{"value":124.8,"display":"124.8","detail":"@vue/server-renderer renderToWebStream · node:http · MAD 0 req/s · p95 445.68 ms · 341,230-341,908 B natural · saturation warning: the 128-connection probe was 6.5% faster"}}},{"caseId":"webui-bun-serve","label":"WebUI / Light DOM / Bun.serve","values":{"jsHeapUsedBytes":{"value":2240040,"display":"2.14","detail":"10 isolated runs · MAD <0.01 MiB · p95 2.14 MiB"},"rendererPrivateBytes":{"value":40861696,"display":"38.97","detail":"3 isolated runs · MAD 0.26 MiB · p95 43.59 MiB · 7 unavailable"},"largestContentfulPaintMs":{"value":52,"display":"52","detail":"10 isolated runs · MAD 0 ms · p95 64 ms"},"noStreamingRequestsPerSecond":{"value":685.6500000000001,"display":"685.65","detail":"@microsoft/webui Protocol.render (Light DOM, request-materialized Node-API state) · Bun.serve · MAD 0 req/s · p95 104 ms · 330,439-331,136 B natural"},"streamingRequestsPerSecond":{"value":532,"display":"532","detail":"@microsoft/webui Protocol.streamResponse (Light DOM, request-materialized Node-API state) · Bun.serve · MAD 0 req/s · p95 136.82 ms · 338,351-339,080 B natural"}}},{"caseId":"webui-fast-rust-actix","label":"WebUI / FAST V3 / Rust / Actix","values":{"jsHeapUsedBytes":{"value":5178490,"display":"4.94","detail":"10 isolated runs · MAD <0.01 MiB · p95 4.95 MiB"},"rendererPrivateBytes":{"value":55179264,"display":"52.62","detail":"10 isolated runs · MAD 0.57 MiB · p95 55.12 MiB"},"largestContentfulPaintMs":{"value":72,"display":"72","detail":"10 isolated runs · MAD 2 ms · p95 84 ms"},"noStreamingRequestsPerSecond":{"value":1049.9,"display":"1,049.9","detail":"webui-handler render (Rust, FAST V3, single response) · actix-web · MAD 0 req/s · p95 68.61 ms · 596,629-598,259 B natural"},"streamingRequestsPerSecond":{"value":681.5,"display":"681.5","detail":"webui-handler chunked ResponseWriter (Rust, FAST V3) · actix-web · MAD 0 req/s · p95 98.19 ms · 596,629-598,259 B natural"}}},{"caseId":"webui-node-http","label":"WebUI / Light DOM / Node node:http","values":{"jsHeapUsedBytes":{"value":2240372,"display":"2.14","detail":"10 isolated runs · MAD <0.01 MiB · p95 2.14 MiB"},"rendererPrivateBytes":{"value":45092864,"display":"43","detail":"9 isolated runs · MAD 1.02 MiB · p95 45.42 MiB · 1 unavailable"},"largestContentfulPaintMs":{"value":52,"display":"52","detail":"10 isolated runs · MAD 4 ms · p95 56 ms"},"noStreamingRequestsPerSecond":{"value":556.5,"display":"556.5","detail":"@microsoft/webui Protocol.render (Light DOM, request-materialized Node-API state) · node:http · MAD 0 req/s · p95 188.95 ms · 330,439-331,136 B natural"},"streamingRequestsPerSecond":{"value":488.95,"display":"488.95","detail":"@microsoft/webui Protocol.streamResponse (Light DOM, request-materialized Node-API state) · node:http · MAD 0 req/s · p95 154.42 ms · 338,351-339,080 B natural"}}},{"caseId":"webui-rust-actix","label":"WebUI / Light DOM / Rust / Actix","values":{"jsHeapUsedBytes":{"value":2241320,"display":"2.14","detail":"10 isolated runs · MAD <0.01 MiB · p95 2.14 MiB"},"rendererPrivateBytes":{"value":44460032,"display":"42.4","detail":"8 isolated runs · MAD 0.52 MiB · p95 45.83 MiB · 2 unavailable"},"largestContentfulPaintMs":{"value":52,"display":"52","detail":"10 isolated runs · MAD 4 ms · p95 56 ms"},"noStreamingRequestsPerSecond":{"value":1741.15,"display":"1,741.15","detail":"webui-handler render (Rust) · actix-web · MAD 0 req/s · p95 42.48 ms · 330,439-331,136 B natural"},"streamingRequestsPerSecond":{"value":1569.3000000000002,"display":"1,569.3","detail":"webui-handler StreamingResponse (Rust) · actix-web · MAD 0 req/s · p95 44.62 ms · 338,351-339,080 B natural"}}},{"caseId":"webui-shadowdom-rust-actix","label":"WebUI / Shadow DOM / Rust / Actix","values":{"jsHeapUsedBytes":{"value":2593692,"display":"2.47","detail":"10 isolated runs · MAD <0.01 MiB · p95 2.48 MiB"},"rendererPrivateBytes":{"value":51671040,"display":"49.28","detail":"10 isolated runs · MAD 0.86 MiB · p95 52.29 MiB"},"largestContentfulPaintMs":{"value":72,"display":"72","detail":"10 isolated runs · MAD 4 ms · p95 84 ms"},"noStreamingRequestsPerSecond":{"value":1396.8,"display":"1,396.8","detail":"webui-handler render (Rust, Shadow DOM) · actix-web · MAD 0 req/s · p95 50.02 ms · 484,831-486,252 B natural"},"streamingRequestsPerSecond":{"value":1185.75,"display":"1,185.75","detail":"webui-handler StreamingResponse (Rust, Shadow DOM) · actix-web · MAD 0 req/s · p95 58.25 ms · 492,757-494,210 B natural"}}}]}
