kitesurf · bench

← back to latest

Viewing archived run 2026-06-05 · commit c8a9da7. View latest →

Backend comparison — median wall time

One grouped bar per page, one bar per backend. Bar height = median wall time from the orchestrator's performance.now() span. Hover a bar for median/p95/p99. Missing or all-errored cells render as a thin grey stub.

screenshot · wall

0.0ms 1250ms 2500ms 3750ms 5000ms kitesurf · median 662ms · p95 1113ms · p99 1113mscontainer · median 367ms · p95 394ms · p99 394ms Example Domainexample-comkitesurf · median 876ms · p95 920ms · p99 920mscontainer · median 740ms · p95 784ms · p99 784ms Hacker Newshacker-newskitesurf · median 1773ms · p95 2184ms · p99 2184mscontainer · median 989ms · p95 1064ms · p99 1064ms Cloudflare Developer Docscf-developerskitesurf · median 2128ms · p95 2643ms · p99 2643mscontainer · median 1222ms · p95 1338ms · p99 1338ms The Cloudflare Blogcf-blogkitesurf · median 1189ms · p95 2271ms · p99 2271mscontainer · median 879ms · p95 1009ms · p99 1009ms Wikipedia Portalwikipedia-portalkitesurf · median 1920ms · p95 2167ms · p99 2167mscontainer · median 1734ms · p95 1837ms · p99 1837ms Der Spiegelspiegelkitesurf · median 2603ms · p95 3502ms · p99 3502mscontainer · median 2408ms · p95 2688ms · p99 2688ms El Mundoelmundokitesurf · median 671ms · p95 728ms · p99 728mscontainer · median 494ms · p95 557ms · p99 557ms TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 735ms · p95 1067ms · p99 1067mscontainer · median 520ms · p95 557ms · p99 557ms TodoMVC · Reacttodomvc-reactkitesurf · median 1011ms · p95 2238ms · p99 2238mscontainer · median 527ms · p95 547ms · p99 547ms TodoMVC · Vuetodomvc-vuekitesurf · median 1215ms · p95 1829ms · p99 1829mscontainer · median 539ms · p95 623ms · p99 623ms TodoMVC · Angulartodomvc-angularkitesurf · median 709ms · p95 1506ms · p99 1506mscontainer · median 421ms · p95 442ms · p99 442ms TodoMVC · Preacttodomvc-preact ks (kitesurf)ct (container)

html · wall

0.0ms 625ms 1250ms 1875ms 2500ms kitesurf · median 582ms · p95 1208ms · p99 1208mscontainer · median 161ms · p95 181ms · p99 181ms Example Domainexample-comkitesurf · median 1036ms · p95 1091ms · p99 1091mscontainer · median 532ms · p95 884ms · p99 884ms Hacker Newshacker-newskitesurf · median 2097ms · p95 2144ms · p99 2144mscontainer · median 1000ms · p95 1029ms · p99 1029ms Cloudflare Developer Docscf-developerskitesurf · median 1607ms · p95 2200ms · p99 2200mscontainer · median 952ms · p95 1069ms · p99 1069ms The Cloudflare Blogcf-blogkitesurf · median 786ms · p95 978ms · p99 978mscontainer · median 730ms · p95 879ms · p99 879ms Wikipedia Portalwikipedia-portalkitesurf · median 1700ms · p95 3036ms · p99 3036mscontainer · median 1488ms · p95 1644ms · p99 1644ms Der Spiegelspiegelkitesurf · median 1892ms · p95 4301ms · p99 4301mscontainer · median 2280ms · p95 2699ms · p99 2699ms El Mundoelmundokitesurf · median 629ms · p95 940ms · p99 940mscontainer · median 294ms · p95 325ms · p99 325ms TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 693ms · p95 1007ms · p99 1007mscontainer · median 327ms · p95 345ms · p99 345ms TodoMVC · Reacttodomvc-reactkitesurf · median 874ms · p95 1105ms · p99 1105mscontainer · median 310ms · p95 350ms · p99 350ms TodoMVC · Vuetodomvc-vuekitesurf · median 1238ms · p95 3188ms · p99 3188mscontainer · median 329ms · p95 355ms · p99 355ms TodoMVC · Angulartodomvc-angularkitesurf · median 620ms · p95 673ms · p99 673mscontainer · median 276ms · p95 377ms · p99 377ms TodoMVC · Preacttodomvc-preact ks (kitesurf)ct (container)

Backend comparison — median backend CPU time

Server-side CPU per call. Kitesurf reports $workers.cpuTimeMs from Workers Observability; container reports Node-side CPU via timing headers. Browser-run doesn't expose a CPU counter — bars render as a grey stub.

screenshot · cpu

0.0ms 2500ms 5000ms 7500ms 10000ms kitesurf · median 95ms · p95 129ms · p99 129mscontainer · median 593ms · p95 605ms · p99 605ms Example Domainexample-comkitesurf · median 194ms · p95 211ms · p99 211mscontainer · median 808ms · p95 901ms · p99 901ms Hacker Newshacker-newskitesurf · median 736ms · p95 912ms · p99 912mscontainer · median 2146ms · p95 2520ms · p99 2520ms Cloudflare Developer Docscf-developerskitesurf · median 625ms · p95 649ms · p99 649mscontainer · median 2589ms · p95 3093ms · p99 3093ms The Cloudflare Blogcf-blogkitesurf · median 418ms · p95 490ms · p99 490mscontainer · median 2050ms · p95 2178ms · p99 2178ms Wikipedia Portalwikipedia-portalkitesurf · median 995ms · p95 1238ms · p99 1238mscontainer · median 3616ms · p95 3850ms · p99 3850ms Der Spiegelspiegelkitesurf · median 1659ms · p95 2216ms · p99 2216mscontainer · median 5642ms · p95 6413ms · p99 6413ms El Mundoelmundokitesurf · median 92ms · p95 132ms · p99 132mscontainer · median 1021ms · p95 1215ms · p99 1215ms TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 116ms · p95 145ms · p99 145mscontainer · median 1032ms · p95 1112ms · p99 1112ms TodoMVC · Reacttodomvc-reactkitesurf · median 325ms · p95 408ms · p99 408mscontainer · median 1120ms · p95 1141ms · p99 1141ms TodoMVC · Vuetodomvc-vuekitesurf · median 441ms · p95 539ms · p99 539mscontainer · median 1089ms · p95 1214ms · p99 1214ms TodoMVC · Angulartodomvc-angularkitesurf · median 118ms · p95 267ms · p99 267mscontainer · median 903ms · p95 998ms · p99 998ms TodoMVC · Preacttodomvc-preact ks (kitesurf)ct (container)

html · cpu

0.0ms 1250ms 2500ms 3750ms 5000ms kitesurf · median 33ms · p95 85ms · p99 85mscontainer · median 347ms · p95 386ms · p99 386ms Example Domainexample-comkitesurf · median 70ms · p95 78ms · p99 78mscontainer · median 585ms · p95 1179ms · p99 1179ms Hacker Newshacker-newskitesurf · median 698ms · p95 745ms · p99 745mscontainer · median 2132ms · p95 2289ms · p99 2289ms Cloudflare Developer Docscf-developerskitesurf · median 424ms · p95 505ms · p99 505mscontainer · median 2053ms · p95 2361ms · p99 2361ms The Cloudflare Blogcf-blogkitesurf · median 158ms · p95 231ms · p99 231mscontainer · median 1583ms · p95 2159ms · p99 2159ms Wikipedia Portalwikipedia-portalkitesurf · median 813ms · p95 914ms · p99 914mscontainer · median 2905ms · p95 3255ms · p99 3255ms Der Spiegelspiegelkitesurf · median 958ms · p95 1469ms · p99 1469mscontainer · median 4918ms · p95 5786ms · p99 5786ms El Mundoelmundokitesurf · median 48ms · p95 58ms · p99 58mscontainer · median 607ms · p95 711ms · p99 711ms TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 76ms · p95 80ms · p99 80mscontainer · median 720ms · p95 749ms · p99 749ms TodoMVC · Reacttodomvc-reactkitesurf · median 200ms · p95 251ms · p99 251mscontainer · median 684ms · p95 777ms · p99 777ms TodoMVC · Vuetodomvc-vuekitesurf · median 436ms · p95 479ms · p99 479mscontainer · median 715ms · p95 771ms · p99 771ms TodoMVC · Angulartodomvc-angularkitesurf · median 54ms · p95 63ms · p99 63mscontainer · median 561ms · p95 1070ms · p99 1070ms TodoMVC · Preacttodomvc-preact ks (kitesurf)ct (container)

Backend comparison — median memory

Per-page memory at end of render. The two backends report different things — bars are directionally comparable, not strictly apples-to-apples.

In short: kitesurf overcounts (high-water peak across the whole renderer); container undercounts (JS heap only). The truth for either backend lives somewhere between the two columns.

screenshot · mem

0MiB 48MiB 95MiB 143MiB 191MiB kitesurf · median 15MiB · p95 15MiB · p99 15MiBcontainer · median 2MiB · p95 2MiB · p99 2MiB Example Domainexample-comkitesurf · median 20MiB · p95 20MiB · p99 20MiBcontainer · median 2MiB · p95 2MiB · p99 2MiB Hacker Newshacker-newskitesurf · median 29MiB · p95 29MiB · p99 29MiBcontainer · median 4MiB · p95 5MiB · p99 5MiB Cloudflare Developer Docscf-developerskitesurf · median 46MiB · p95 46MiB · p99 46MiBcontainer · median 4MiB · p95 4MiB · p99 4MiB The Cloudflare Blogcf-blogkitesurf · median 28MiB · p95 28MiB · p99 28MiBcontainer · median 3MiB · p95 3MiB · p99 3MiB Wikipedia Portalwikipedia-portalkitesurf · median 97MiB · p95 97MiB · p99 97MiBcontainer · median 7MiB · p95 7MiB · p99 7MiB Der Spiegelspiegelkitesurf · median 74MiB · p95 74MiB · p99 74MiBcontainer · median 19MiB · p95 20MiB · p99 20MiB El Mundoelmundokitesurf · median 16MiB · p95 16MiB · p99 16MiBcontainer · median 2MiB · p95 2MiB · p99 2MiB TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 16MiB · p95 16MiB · p99 16MiBcontainer · median 3MiB · p95 3MiB · p99 3MiB TodoMVC · Reacttodomvc-reactkitesurf · median 16MiB · p95 16MiB · p99 16MiBcontainer · median 3MiB · p95 3MiB · p99 3MiB TodoMVC · Vuetodomvc-vuekitesurf · median 16MiB · p95 16MiB · p99 16MiBcontainer · median 7MiB · p95 7MiB · p99 7MiB TodoMVC · Angulartodomvc-angularkitesurf · median 16MiB · p95 16MiB · p99 16MiBcontainer · median 2MiB · p95 2MiB · p99 2MiB TodoMVC · Preacttodomvc-preact ks (kitesurf)ct (container)

html · mem

0MiB 48MiB 95MiB 143MiB 191MiB kitesurf · median 10MiB · p95 10MiB · p99 10MiBcontainer · median 2MiB · p95 2MiB · p99 2MiB Example Domainexample-comkitesurf · median 13MiB · p95 13MiB · p99 13MiBcontainer · median 2MiB · p95 2MiB · p99 2MiB Hacker Newshacker-newskitesurf · median 29MiB · p95 29MiB · p99 29MiBcontainer · median 4MiB · p95 5MiB · p99 5MiB Cloudflare Developer Docscf-developerskitesurf · median 45MiB · p95 46MiB · p99 46MiBcontainer · median 4MiB · p95 4MiB · p99 4MiB The Cloudflare Blogcf-blogkitesurf · median 20MiB · p95 20MiB · p99 20MiBcontainer · median 3MiB · p95 5MiB · p99 5MiB Wikipedia Portalwikipedia-portalkitesurf · median 97MiB · p95 97MiB · p99 97MiBcontainer · median 7MiB · p95 7MiB · p99 7MiB Der Spiegelspiegelkitesurf · median 52MiB · p95 52MiB · p99 52MiBcontainer · median 20MiB · p95 21MiB · p99 21MiB El Mundoelmundokitesurf · median 11MiB · p95 11MiB · p99 11MiBcontainer · median 2MiB · p95 2MiB · p99 2MiB TodoMVC · JavaScript ES6todomvc-js-es6kitesurf · median 11MiB · p95 11MiB · p99 11MiBcontainer · median 3MiB · p95 3MiB · p99 3MiB TodoMVC · Reacttodomvc-reactkitesurf · median 11MiB · p95 11MiB · p99 11MiBcontainer · median 3MiB · p95 3MiB · p99 3MiB TodoMVC · Vuetodomvc-vuekitesurf · median 11MiB · p95 11MiB · p99 11MiBcontainer · median 7MiB · p95 7MiB · p99 7MiB TodoMVC · Angulartodomvc-angularkitesurf · median 11MiB · p95 11MiB · p99 11MiBcontainer · median 2MiB · p95 2MiB · p99 2MiB TodoMVC · Preacttodomvc-preact ks (kitesurf)ct (container)

Run 2026-06-05 · per-metric tables

Same layout as npm run bench: per endpoint, tables for wall, cpu, mem. Each backend's median/p95/p99 side by side. ks = kitesurf, br = browser-run, ct = container. = backend doesn't report this metric. err = every recorded run for that combination errored. See the memory chart's caption above for the per-backend metric semantics.

screenshot

wall — screenshot
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 662ms1113ms1113ms367ms394ms394ms
Hacker News hacker-news 876ms920ms920ms740ms784ms784ms
Cloudflare Developer Docs cf-developers 1773ms2184ms2184ms989ms1064ms1064ms
The Cloudflare Blog cf-blog 2128ms2643ms2643ms1222ms1338ms1338ms
Wikipedia Portal wikipedia-portal 1189ms2271ms2271ms879ms1009ms1009ms
Der Spiegel spiegel 1920ms2167ms2167ms1734ms1837ms1837ms
El Mundo elmundo 2603ms3502ms3502ms2408ms2688ms2688ms
TodoMVC · JavaScript ES6 todomvc-js-es6 671ms728ms728ms494ms557ms557ms
TodoMVC · React todomvc-react 735ms1067ms1067ms520ms557ms557ms
TodoMVC · Vue todomvc-vue 1011ms2238ms2238ms527ms547ms547ms
TodoMVC · Angular todomvc-angular 1215ms1829ms1829ms539ms623ms623ms
TodoMVC · Preact todomvc-preact 709ms1506ms1506ms421ms442ms442ms
cpu — screenshot
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 95ms129ms129ms593ms605ms605ms
Hacker News hacker-news 194ms211ms211ms808ms901ms901ms
Cloudflare Developer Docs cf-developers 736ms912ms912ms2146ms2520ms2520ms
The Cloudflare Blog cf-blog 625ms649ms649ms2589ms3093ms3093ms
Wikipedia Portal wikipedia-portal 418ms490ms490ms2050ms2178ms2178ms
Der Spiegel spiegel 995ms1238ms1238ms3616ms3850ms3850ms
El Mundo elmundo 1659ms2216ms2216ms5642ms6413ms6413ms
TodoMVC · JavaScript ES6 todomvc-js-es6 92ms132ms132ms1021ms1215ms1215ms
TodoMVC · React todomvc-react 116ms145ms145ms1032ms1112ms1112ms
TodoMVC · Vue todomvc-vue 325ms408ms408ms1120ms1141ms1141ms
TodoMVC · Angular todomvc-angular 441ms539ms539ms1089ms1214ms1214ms
TodoMVC · Preact todomvc-preact 118ms267ms267ms903ms998ms998ms
mem — screenshot
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 15MiB15MiB15MiB2MiB2MiB2MiB
Hacker News hacker-news 20MiB20MiB20MiB2MiB2MiB2MiB
Cloudflare Developer Docs cf-developers 29MiB29MiB29MiB4MiB5MiB5MiB
The Cloudflare Blog cf-blog 46MiB46MiB46MiB4MiB4MiB4MiB
Wikipedia Portal wikipedia-portal 28MiB28MiB28MiB3MiB3MiB3MiB
Der Spiegel spiegel 97MiB97MiB97MiB7MiB7MiB7MiB
El Mundo elmundo 74MiB74MiB74MiB19MiB20MiB20MiB
TodoMVC · JavaScript ES6 todomvc-js-es6 16MiB16MiB16MiB2MiB2MiB2MiB
TodoMVC · React todomvc-react 16MiB16MiB16MiB3MiB3MiB3MiB
TodoMVC · Vue todomvc-vue 16MiB16MiB16MiB3MiB3MiB3MiB
TodoMVC · Angular todomvc-angular 16MiB16MiB16MiB7MiB7MiB7MiB
TodoMVC · Preact todomvc-preact 16MiB16MiB16MiB2MiB2MiB2MiB

html

wall — html
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 582ms1208ms1208ms161ms181ms181ms
Hacker News hacker-news 1036ms1091ms1091ms532ms884ms884ms
Cloudflare Developer Docs cf-developers 2097ms2144ms2144ms1000ms1029ms1029ms
The Cloudflare Blog cf-blog 1607ms2200ms2200ms952ms1069ms1069ms
Wikipedia Portal wikipedia-portal 786ms978ms978ms730ms879ms879ms
Der Spiegel spiegel 1700ms3036ms3036ms1488ms1644ms1644ms
El Mundo elmundo 1892ms4301ms4301ms2280ms2699ms2699ms
TodoMVC · JavaScript ES6 todomvc-js-es6 629ms940ms940ms294ms325ms325ms
TodoMVC · React todomvc-react 693ms1007ms1007ms327ms345ms345ms
TodoMVC · Vue todomvc-vue 874ms1105ms1105ms310ms350ms350ms
TodoMVC · Angular todomvc-angular 1238ms3188ms3188ms329ms355ms355ms
TodoMVC · Preact todomvc-preact 620ms673ms673ms276ms377ms377ms
cpu — html
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 33ms85ms85ms347ms386ms386ms
Hacker News hacker-news 70ms78ms78ms585ms1179ms1179ms
Cloudflare Developer Docs cf-developers 698ms745ms745ms2132ms2289ms2289ms
The Cloudflare Blog cf-blog 424ms505ms505ms2053ms2361ms2361ms
Wikipedia Portal wikipedia-portal 158ms231ms231ms1583ms2159ms2159ms
Der Spiegel spiegel 813ms914ms914ms2905ms3255ms3255ms
El Mundo elmundo 958ms1469ms1469ms4918ms5786ms5786ms
TodoMVC · JavaScript ES6 todomvc-js-es6 48ms58ms58ms607ms711ms711ms
TodoMVC · React todomvc-react 76ms80ms80ms720ms749ms749ms
TodoMVC · Vue todomvc-vue 200ms251ms251ms684ms777ms777ms
TodoMVC · Angular todomvc-angular 436ms479ms479ms715ms771ms771ms
TodoMVC · Preact todomvc-preact 54ms63ms63ms561ms1070ms1070ms
mem — html
page slug ks medianks p95ks p99ct medianct p95ct p99
Example Domain example-com 10MiB10MiB10MiB2MiB2MiB2MiB
Hacker News hacker-news 13MiB13MiB13MiB2MiB2MiB2MiB
Cloudflare Developer Docs cf-developers 29MiB29MiB29MiB4MiB5MiB5MiB
The Cloudflare Blog cf-blog 45MiB46MiB46MiB4MiB4MiB4MiB
Wikipedia Portal wikipedia-portal 20MiB20MiB20MiB3MiB5MiB5MiB
Der Spiegel spiegel 97MiB97MiB97MiB7MiB7MiB7MiB
El Mundo elmundo 52MiB52MiB52MiB20MiB21MiB21MiB
TodoMVC · JavaScript ES6 todomvc-js-es6 11MiB11MiB11MiB2MiB2MiB2MiB
TodoMVC · React todomvc-react 11MiB11MiB11MiB3MiB3MiB3MiB
TodoMVC · Vue todomvc-vue 11MiB11MiB11MiB3MiB3MiB3MiB
TodoMVC · Angular todomvc-angular 11MiB11MiB11MiB7MiB7MiB7MiB
TodoMVC · Preact todomvc-preact 11MiB11MiB11MiB2MiB2MiB2MiB

History

date commit kitesurf · screenshotkitesurf · htmlcontainer · screenshotcontainer · html note
2026-07-11 17:4615ac2dc1195ms1488ms884ms589ms
2026-07-05 14:03be117861645ms1468ms915ms677msboa eval-less runtime — run page JS (Runtime.evaluate + dynamic import) without V8 code-gen-from-string @lduarte
2026-07-02 00:361f76dfb560ms547ms696ms512msReduce wasm peak memory ~23% (emoji SVG-strip + node-slab pre-size + lazy serif) @lduarte
2026-06-15 10:3678edd791008ms996ms683ms473ms
2026-06-06 10:289afdd69727ms1457ms778ms548ms
2026-06-05 15:46c8a9da7715ms597ms1080ms920msRefactor autoresearch for memory optimization + port wasm-memprof + autoresearch memory opts @lduarte
2026-06-05 15:34c8a9da7715ms597ms1080ms920msRefactor autoresearch for memory optimization + port wasm-memprof + autoresearch memory opts @lduarte
2026-06-02 09:1536cc68a950ms1060ms858ms572ms
2026-06-02 00:32bc688751088ms1234ms734ms520ms
2026-06-02 00:1584bf4a3835ms1360ms521ms356ms
2026-06-02 00:04885052c923ms1079ms693ms505ms
2026-06-01 23:56d1fa08a1173ms1182ms879ms480ms
2026-06-01 23:304e0f0e71358ms1181ms697ms460ms
2026-05-31 19:29cd6a6d51109ms869ms864ms610ms
2026-05-25 22:39caf5678633ms658ms608ms369msrerun with concurrent-producer wallMs fix
2026-05-25 21:37a4d9bf51442ms1151ms741ms410mstail-worker CPU attribution: now includes page-script wasm/JS cost
2026-05-25 11:4804351641359ms1194ms916ms618ms
2026-05-25 11:4804351641362ms1160ms823ms714ms
2026-05-25 11:4804351641215ms1020ms704ms487ms
2026-05-25 11:4804351641172ms925ms706ms394ms

Archived report (markdown)

# kitesurf bench report — 2026-06-05

commit: `c8a9da7` · backends: kitesurf, container · endpoints: screenshot, html · runs/combo: 5 (+ 2 warmup)
target: https://kitesurf-bench.rendering.cfdata.org

> Refactor autoresearch for memory optimization + port wasm-memprof + autoresearch memory opts @lduarte

## Summary (median wall time)

| Page | kitesurf/screenshot | kitesurf/html | container/screenshot | container/html |
|---|--:|--:|--:|--:|
| Example Domain | 521ms | 482ms | 486ms | 290ms |
| Hacker News | 630ms | 877ms | 896ms | 1003ms |
| Cloudflare Developer Docs | 1084ms | 1600ms | 1137ms | 1146ms |
| The Cloudflare Blog | 1608ms | 1294ms | 1356ms | 1152ms |
| Wikipedia Portal | 715ms | 597ms | 1080ms | 920ms |
| Der Spiegel | 1082ms | 1070ms | 1871ms | 1754ms |
| El Mundo | 1074ms | 1070ms | 2574ms | 2597ms |
| TodoMVC · JavaScript ES6 | 521ms | 513ms | 630ms | 415ms |
| TodoMVC · React | 687ms | 552ms | 662ms | 449ms |
| TodoMVC · Vue | 745ms | 627ms | 660ms | 468ms |
| TodoMVC · Angular | 983ms | 951ms | 659ms | 446ms |
| TodoMVC · Preact | 524ms | 492ms | 543ms | 413ms |

Notes:

- Values are run medians across recorded runs. p95 and min/max are in the JSON.
- Backends are dispatched from inside the `kitesurf-bench` worker via RPC bindings: `env.KITESURF.fetch(/screenshot|/html)` for kitesurf (service binding to the engine), `env.BROWSER.quickAction('screenshot'|'content', …)` for browser-run (Browser Rendering RPC), and `env.CONTAINER_HOST.fetch(…)` for container (sibling worker fronting its container backend). Wall time is the orchestrator's `performance.now()` span; `backendWallMs` / `backendCpuMs` in the JSON come from Workers Observability (kitesurf) or container-side timing headers (container). None of the measurement paths traverse the public internet.
- A cell shows `—` when every recorded run for that combination errored. See `rows` in the JSON for individual failure messages.

bundle built 2026-07-11T17:46:18.286Z