Skip to content

feat(bench): resolve runs against a workload catalog and qualify every comparison against its clock - #728

Merged
Exoridus merged 15 commits into
nextfrom
feat/bench-workload-catalog
Sep 11, 2026
Merged

feat(bench): resolve runs against a workload catalog and qualify every comparison against its clock#728
Exoridus merged 15 commits into
nextfrom
feat/bench-workload-catalog

Conversation

@Exoridus

Copy link
Copy Markdown
Owner

Splits the benchmark work that accumulated on the scoreboard branch after #727 was cut.

Workload catalog

Runs now resolve against a published workload catalog instead of carrying their own ad-hoc scene descriptions. A result that names a workload the catalog does not define is rejected rather than rendered as a comparison, so a stale result file cannot quietly claim a scenario that no longer exists.

Clock qualification

A shared probe measures the page's clock resolution, and every comparison carries the clock that timed it. Where the resolution cannot back the difference between two arms, the page withholds the comparison instead of printing a ratio the timer never resolved. The judgement is per run, not per page.

New rendering arms

  • Tilemaps compared across ExoJS, Pixi and Phaser on real tilemap data.
  • Particles compared across the three engines, both drawing and simulating.
  • A fully-moving sprite scene and a layered fill scene, so the archetype set covers transform churn and overdraw separately.

Site

The benchmarks split into a rendering view and a physics view, each led by its results rather than by the tally. Figures print to three significant digits, and the lead profile, ratio bars and absent-arm figures render correctly again.

Claude-Session: https://claude.ai/code/session_01UWQw3PuiCFjTVJJBY4AHQG

Exoridus added 13 commits September 11, 2026 15:59
…bsent-arm figures

The page led with whichever profile was measured last, which is a profile that
may carry one domain: a physics-only run finished three hours after a
rendering-only one buried every rendering comparison in the collapsed list
below. Coverage now outranks the measurement date, so a profile carrying both
domains leads.

A comparison cell declared a ten-rem text track beside a four-rem minimum plot,
whose intrinsic width exceeded the column a five-pair table gives it: the table
pushed past the viewport and the log axis collapsed to about sixty pixels, on
which every ratio short of 10x drew a few pixels. Text and bar each take a lane
now, and the centre line the lengths are read against is visible.

Column widths were declared on the header cells, which a fixed layout ignores
when the first row is the group row and carries colspans; they move to a
colgroup, and the count column stops holding a few hundred pixels of white
space beside a four-digit number.

An arm that sat a comparison out is stored as a zero rather than as a missing
value, so the medians, p95, frame share and GPU rows printed 0.000 ms - the
fastest figure on the page - for the arm that never ran.

Archetype descriptions stay with the page rather than travelling in every
profile: they are prose for a reader, identical on every machine, and two
published profiles could otherwise disagree about what one archetype means.
Schema 7 therefore adds only the GPU frame time, and reads version 6 unchanged.

The local probe drained its timer queries immediately after ending them, so no
sample was ever available and its untimed fallback reported the submission time
under a GPU-inclusive label.

Claude-Session: https://claude.ai/code/session_01PXSHGYhLZX3zbLbPFKQVmg
…view

The page put both measured domains one under the other, so a reader after a
renderer scrolled past twenty-one physics rows to reach the tables they came
for and the two scoreboards, legends, methodology notes and provenance blocks
were paid for twice. The domains share no row and answer different questions,
so each gets its own page and the section's own URL serves rendering.

The two views are ordinary links drawn as tabs: two static pages need no panel,
no selection state and no arrow-key model, and either can be linked to. The
machine profile is not swapped when a view is opened - a profile that measured
one domain and not the other says so, because two machines' numbers do not
belong in one reading.

A comparison cell carried its own disclosure, so a five-pair row offered five
toggles that each opened the same six terms; they become one disclosure per
archetype, which also gives the terms room to be laid out as a list rather than
wrapped into a column. Stacked into cards, an arm with no cell no longer takes
a labelled block with a rule and the height of a result: the gap is visible in
the matrix, where the columns beside it show it, and the detail row names the
arms that were not compared either way.

A pair inside the noise band now reads as "similar" rather than as 1.00x. The
ladder pins the factor of a level rung to exactly one, so the cell printed a
two-decimal ratio above two medians that work out to a different one - a
precision the verdict never measured. Nothing about the ladder, its thresholds
or the stored numbers changes; only what the cell prints.

Where a table's columns fall into groups, a filter narrows it to one of them.
It is an enhancement, not a gate: with no script every column is shown, which
is what the indexed and printed page carries.

Claude-Session: https://claude.ai/code/session_01PXSHGYhLZX3zbLbPFKQVmg
A fixed two decimals on a factor and three on a millisecond value printed
digits the measurement never resolved: 669.00x for a ratio whose denominator is
one clock tick, and 13.380 ms for a value whose pooled runs spanned 12.73 to
14.10. The decimals now follow the magnitude, so 669x, 13.4 and 8.67 replace
them and a sub-millisecond value keeps the three decimals its column aligns on.

Trailing zeros are kept rather than stripped. 0.80 beside 0.12 is a column a
reader scans down, and the zero is a digit the clock did resolve; what the rule
removes is the one it did not.

Claude-Session: https://claude.ai/code/session_01PXSHGYhLZX3zbLbPFKQVmg
…ally

The scoreboard opened every view: coverage, five outcome states, a strip whose
unfilled part is not a result, and a paragraph on how not to read any of it -
all of it asked before a reader had seen a single number. It moves under the
tables, where it summarises rows already met, and the key above them keeps only
what a bar's colour means.

Stacked into cards, an archetype carried every one of its comparisons one under
the other. A picker now names the pair on screen, and the narrow view opens on
the arm ExoJS leads on fewest rows rather than the one it leads on most - the
choice decides which comparison is visible first and publishes no figure, so
nothing is summed, ranked or counted from it. Wide, the picker steps aside for
the matrix, which shows the pairs side by side by design.

A factor is read for its size rather than its digits, so it drops to whole
numbers from ten up and one decimal below: 72x and 2x say what 72.25x and 2.00x
said. Milliseconds keep their own rule - a time is compared against a frame
budget, not against another factor. A pair inside the noise band prints the
word alone, and what the word means is stated once in the key.

Claude-Session: https://claude.ai/code/session_01PXSHGYhLZX3zbLbPFKQVmg
A benchmark that reports milliseconds without recording the grid its clock
delivers them on cannot tell a fast cell from an unresolved one. The physics
harness already measured that grid; the probe moves to the shared layer so the
rendering harness can take the same reading in its own page, which is where it
has to be taken - a value read in the driver process describes Node's clock.

An unobserved resolution is reported as absent rather than as zero. The
previous probe returned 0 when its loop saw no positive step, which reads
downstream as a perfectly fine clock - the opposite of what the failed
observation established.

The report states what it is: the smallest step the probe saw, not a calibrated
error bound. Engines may coarsen and jitter timestamps, so one observed minimum
bounds neither the error of a sample nor the confidence of a comparison.

Claude-Session: https://claude.ai/code/session_01PXSHGYhLZX3zbLbPFKQVmg
A duration a step or two above the grid performance.now() delivers on carries
no ratio worth printing: measured again the same scene lands on the
neighbouring step, and the factor built from it moves by a whole multiple. One
guard now decides that, and the cell, the bar, the label and the scoreboard all
read it from `outcomeOf` rather than each testing their own condition.

Both durations are checked on their own against the step observed in the
context that measured them - how large a reading is against the grid it was
read on, not how far the two arms are apart - and a pooled figure inherits the
coarsest step of the runs behind it, because a repetition measured on a coarse
clock is not repaired by one measured on a fine one.

The threshold is a guard set clear of the one- and two-step readings a coarse
clock produces, and it is the same for every library, browser and profile. It
is not a standard and not a precision claim: clearing it establishes that this
one check did not trip, never that a comparison is accurate.

A profile written before the step was recorded yields neither a pass nor a
failure but the absence of the check, and reads exactly as it did before.

A cell the guard stops keeps both measured times and loses the factor, the bar
and the winner, and the scoreboard counts it on no summary line. That is a
refusal to publish a comparison, not a claim that the two libraries are equally
fast; a rule for keeping a direction where the gap is wide would need evidence
of its own and is deliberately not attempted here.

Claude-Session: https://claude.ai/code/session_01PXSHGYhLZX3zbLbPFKQVmg
…k backs

The check ran against the pooled medians and one coarsest step, which lets a
well-resolved repetition carry a limited one past the threshold: three runs
stepping 0.020, 0.005 and 0.005 ms with durations of 0.180, 0.300 and 0.300
pool to 0.300 against 0.020 - fifteen steps, a pass - while the first run stood
nine steps above its own clock and did not. The published profile carries no
per-run durations, so the site cannot make that judgement at all; the check
moves to a per-run primitive and a merge rule, and the cell reads the verdict
the harness will publish beside it.

Merging is deliberately asymmetric: a limitation any run established stands,
and a run whose clock was never recorded cannot lift it, because missing
information does not cancel an established finding. Only a comparison whose
every run cleared the check is reported as resolved.

A profile that recorded no clock no longer keeps its factors. It was the state
every published profile is in, so the exemption would have left exactly the
figures the check exists to withhold - and the page is not emptied by removing
them: scenarios, both measured times, the machine and the detail all stay, and
the reason is stated once for the profile rather than in each of its cells.
`timer-unknown` stays apart from `timer-limited`, because a check that could not
be made and a check that tripped are different statements, and the scoreboard
counts neither as a win, a loss or a level row.

Claude-Session: https://claude.ai/code/session_01PXSHGYhLZX3zbLbPFKQVmg
A benchmark run had one shape: every archetype's full ladder against every
arm. That is the development matrix, and publishing a comparison meant
paying for it in full even though most of its rungs answer a scaling
question no reader of the comparison asks.

Runs now resolve against a named plan. `reference` selects the loads the
project publishes - one headline load per scenario, a short ladder only
where the scaling is itself the finding - and `full` keeps the whole
development matrix, including the ExoJS-internal probes the published
catalog deliberately omits. `--extreme` admits the named million-scale
loads, and only together with `full`: an extreme load exists to find where
a scenario stops being viable, which is not a published claim.

Every load carries the unit it is counted in, because the number alone is
ambiguous across the catalog - a million world tiles and a million visible
particles are not the same measurement. A plan carries a hash over its
semantic content only, so two runs can be checked for having measured the
same contract without a path or a timestamp deciding it.

`--domain=all` runs both domains serially into separate subdirectories, and
`--dry-run` reports the resolved workload without starting a browser. It
names the catalogued scenarios that have no archetype behind them yet
rather than quietly planning around them.

Claude-Session: https://claude.ai/code/session_01PXSHGYhLZX3zbLbPFKQVmg
The clock probe landed without a producer: nothing measured a rendering
page's grid, nothing attached one to a cell, and the check that reads it
sat in the site with no caller. Every rendering comparison therefore
published as "timer not recorded", which reads like a finding and is
merely a missing wire.

The harness now probes the grid in the page, once per session, and every
cell carries the grid of the session that produced it. That attribution
matters here: a rendering run opens one browser session per arm, so a
backend-wide figure read from whichever page happened to be open would
qualify cells it never timed. The comparison builder checks each arm's
duration against its own session's grid and the pooling stage merges the
per-run results, so a limitation one run established cannot be lifted by a
better-resolved repetition. Physics is checked against the batch the clock
actually bracketed rather than the per-step quotient the report divides
out, which would mark a well-resolved cell unresolved purely for being
batched.

The rendering block also stops collapsing onto a single table-wide node
count. A published page offers the reader a load to pick, and one count
discarded every other measurement before the profile was written. Each row
is now one archetype at one load, stating the load and the unit it is
counted in, so a hundred thousand world tiles can never read as a hundred
thousand sprites. What the single count protected - that no load is chosen
to suit an outcome - is protected by the plan instead, which fixes the
loads before the run starts.

Schema version 7 carries all of it, and the result verifier requires it of
a version 7 document rather than trusting the stage that writes it. Version
6 profiles still read exactly as they did.

Claude-Session: https://claude.ai/code/session_01PXSHGYhLZX3zbLbPFKQVmg
…cene

Two scenes the matrix never had, both built from the sprite path every arm
already implements.

`dynamic-all` is `dynamic-heavy` with every leaf moving instead of 7.5 % of
them. The existing row is the shape a real scene has - a few actors over a
mostly still background - so the delta between the two is what the still
92.5 % costs once it stops being still. It is a new archetype rather than a
raised mutation fraction on the old one, because both questions are worth
publishing and changing the old one would silently invalidate every number
measured under its name.

`fill-layers` is a stack of translucent full-screen layers, the workload a
parallax background plus a weather pass plus a few tint overlays adds up
to. It shares its geometry with `overdraw`, which sweeps thousands of
viewport-sized quads to find the fill ceiling - not something anything
ships. This one sweeps 8 to 128 and fixes a low per-layer alpha, so every
layer has to be composited rather than skipped by an occlusion policy.

The geometry the two share used to be an archetype-id test repeated in each
of the four arms, which is how an archetype added with the same shape under
another name would have been laid out four different ways. It is a trait
predicate now, like the text and mask questions beside it.

The structural gate leaves `fill-layers` unguarded for the reason it
already leaves `overdraw` unguarded: the fill is enormous under a software
rasterizer and its draw structure is one call `static-heavy` guards
already.

Claude-Session: https://claude.ai/code/session_01PXSHGYhLZX3zbLbPFKQVmg
The one scene shape practically every 2D game has and that no sprite
archetype describes: a world far larger than the viewport, drawn through a
dedicated tile path rather than one node per tile. `scrolling-world` is not
this test - it lays independent sprite nodes over a few viewports and its
per-node cost is the finding, while here the world is a hundred thousand
tiles, the visible window never changes size, and what is compared is each
arm's tile path: an instanced chunk renderer, an imperatively painted quad
buffer, a shader over a data texture.

Two scenes. `tilemap-scroll` scrolls a fully populated map past a fixed
window, so its ladder says how large a map an arm can hold rather than how
much of it it draws. `tilemap-edit` replaces visible tile ids every frame,
which is where the three paths differ most sharply, because each has to get
the change to the GPU a different way.

The editing scene holds its camera still, and that is a determinism
requirement rather than a simplification. The harness may cut an arm's
warmup short on wall clock, so two arms can reach the timed window having
run a different number of frames; with a moving camera the edited cells
move too, and the arms then draw worlds differing by whatever the extra
frames edited. Holding the camera makes each frame set the same cells from
that frame alone, and keeps the delta against the scrolling scene the edit
cost by itself.

Excalibur sits both scenes out. Its `TileMap` is a grid of tiles each
holding its own graphics list, drawn through the ordinary graphics path -
there is no dedicated tile submission path of the kind the other three arms
are being compared on, and building one would mean writing the arm's
missing feature rather than adapting to it.

The driver can now capture each measured cell's final frame, which is what
found two real defects in this work: the Pixi arm scrolled at double speed
(the tile pipe combines the rendered root's transform with its own, so the
scrolled container is nested now), and repainting one `Tilemap` instance
twice renders nothing at all (an edited chunk gets a fresh instance). A
cell that draws the wrong scene still produces a number, and that number
looks like a result.
…lating

Two scenes on one draw path, kept apart because they answer different
questions and a figure from one would be read as the other.

`particles-draw` submits a fixed set of small translucent quads and
simulates nothing, so it measures the submission path alone: the ExoJS
particle renderer, Pixi's `ParticleContainer` with every property declared
static, a Phaser emitter whose simulation is never stepped. A million quads
there is a million quads drawn, not a million interactive sprites.

`particles-lifecycle` puts the shared effect on top of that same path -
a two second life, a linear drift, a linear fade and a respawn at the end -
with the pool held at the node count. ExoJS and Phaser each run their own
emitter, which is what is under comparison. Pixi has no emitter at all, so
its arm pairs `ParticleContainer` with exactly the shared update rule
written out in the harness; that code sits inside the measured bracket and
is named for what it is rather than passed off as a Pixi feature.

Verified by capture rather than by reading the adapters: all three arms
light the identical 161233 pixels in the draw scene, and land within half a
percent of each other in the lifecycle scene, where their particles are not
on the same coordinates by design.

The harness was resolving the official extension packages to their BUILT
output while resolving the engine beside them to source, so an extension
arm measured a different tree from the rest of the matrix - and the two
copies of a class failed every `instanceof` across the boundary, which is
how a `ParticleSystem` silently kept its default capacity of 4096 instead
of the ten thousand its cell asked for. The dev server now maps the
extension entries and the engine's subpath exports to source, and resolves
`#*` per importer so each package's own map still reaches its own sources.
Rendering and physics were two pages fronted by a scoreboard and a wall of
tables. A reader arriving with "how does ExoJS do on the work I am about to
do" had to pick a domain, learn a table and read a tally before anything
answered them.

One page now, and it opens on result cards: the scenario in plain words,
the load it was measured at, and one horizontal bar per library with its
time on it. Bars are linear from zero within a card, so a bar's length is
the time it shows and two bars can be read directly against each other - no
log scale and no ratio axis, both of which have to be learned before they
can be read and both of which make a small difference look large. A card
compares the arms within one load and never two loads or two cards, because
those are different scenes.

Which scenarios open each section is fixed in the source before any run
happens, and a profile that carries only some of them is topped up in its
own order rather than by result, so the top of the page cannot become a
selection of whatever ExoJS won. Losses keep the same treatment as wins:
the clipping card leads with ExoJS's bar being the long one.

Where a scenario was measured at several loads the card offers them as
buttons, each showing figures that were actually measured - nothing is
interpolated between rungs. The full tables keep every row, spread, p95 and
omission one disclosure below, and the methodology stays at the foot where
a reader reaches for it once a row surprises them.

The old physics URL keeps working: it has been linked to, so it redirects
into the physics section rather than 404ing, and it is a redirect rather
than a second copy because two pages carrying one profile would eventually
disagree about it.
@Exoridus
Exoridus enabled auto-merge (squash) September 11, 2026 14:20
@codecov

codecov Bot commented Sep 11, 2026

Copy link
Copy Markdown

Bundle Report

Changes will increase total bundle size by 19.36MB (59.94%) ⬆️⚠️, exceeding the configured threshold of 5%.

Bundle name Size Change
site-server-esm 33.66MB 19.36MB (135.37%) ⬆️⚠️

Affected Assets, Files, and Routes:

view changes for bundle: site-server-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
chunks/_astro_data-layer-content_tcS8KX2x.mjs (New) 7.66MB 7.66MB 100.0% 🚀
chunks/example-sources_D_OG0kEB.mjs (New) 1.58MB 1.58MB 100.0% 🚀
chunks/cpp_CPDmpxAH.mjs (New) 837.87kB 837.87kB 100.0% 🚀
chunks/emacs-lisp_Dv0hCzlu.mjs (New) 792.54kB 792.54kB 100.0% 🚀
chunks/wasm_CLRKp8VF.mjs (New) 622.55kB 622.55kB 100.0% 🚀
_astro/vendor-monaco.D6-58Mxn.css (New) 308.24kB 308.24kB 100.0% 🚀
chunks/shiki-theme_BYrySdxo.mjs (New) 303.06kB 303.06kB 100.0% 🚀
chunks/jsx-runtime_1tdYssgZ.mjs (New) 281.08kB 281.08kB 100.0% 🚀
chunks/BenchmarksPage_CwGZNRZT.mjs (New) 278.61kB 278.61kB 100.0% 🚀
chunks/wolfram_CcZPfnLd.mjs (New) 266.98kB 266.98kB 100.0% 🚀
prerender-entry.a97e4vho.mjs (New) 229.47kB 229.47kB 100.0% 🚀
chunks/vue-vine_BwEx5Hbl.mjs (New) 201.21kB 201.21kB 100.0% 🚀
chunks/backend-comparison_CQ3E3UNe.mjs (New) 199.19kB 199.19kB 100.0% 🚀
chunks/angular-ts_Go_sxgiM.mjs (New) 194.57kB 194.57kB 100.0% 🚀
chunks/typescript_BdOuaDkb.mjs (New) 191.0kB 191.0kB 100.0% 🚀
chunks/jsx_DlBZfu41.mjs (New) 188.11kB 188.11kB 100.0% 🚀
chunks/tsx_DP9gbsaw.mjs (New) 185.85kB 185.85kB 100.0% 🚀
chunks/javascript_Csr6kOdt.mjs (New) 185.19kB 185.19kB 100.0% 🚀
chunks/typst_BnzMfKm_.mjs (New) 184.6kB 184.6kB 100.0% 🚀
chunks/objective-cpp__ooRQ-PY.mjs (New) 184.45kB 184.45kB 100.0% 🚀
chunks/audio-effects_Ch4L_09N.mjs (New) 157.49kB 157.49kB 100.0% 🚀
chunks/writing-your-own-transition_DIgIiZ-0.mjs (New) 155.46kB 155.46kB 100.0% 🚀
chunks/text_D7S_rphW.mjs (New) 152.43kB 152.43kB 100.0% 🚀
chunks/asciidoc_xKuVlNk6.mjs (New) 150.63kB 150.63kB 100.0% 🚀
chunks/mdx_BK9ZufRc.mjs (New) 146.33kB 146.33kB 100.0% 🚀
chunks/animation_AcyPHSz_.mjs (New) 142.19kB 142.19kB 100.0% 🚀
chunks/infinite-maps_DpIyk0E6.mjs (New) 141.61kB 141.61kB 100.0% 🚀
chunks/spatial-audio_DbvaUsfT.mjs (New) 137.74kB 137.74kB 100.0% 🚀
chunks/php_Ce-_eRmu.mjs (New) 120.72kB 120.72kB 100.0% 🚀
chunks/blade_BmZAqhvV.mjs (New) 112.47kB 112.47kB 100.0% 🚀
chunks/objective-c_6dJF64Dt.mjs (New) 111.93kB 111.93kB 100.0% 🚀
chunks/tiled-maps_BadbdlwX.mjs (New) 111.71kB 111.71kB 100.0% 🚀
chunks/custom-mesh-shaders_DaYj7q9R.mjs (New) 111.48kB 111.48kB 100.0% 🚀
chunks/filters_BluXxszs.mjs (New) 111.4kB 111.4kB 100.0% 🚀
chunks/audio-basics_jsVqSoR2.mjs (New) 109.42kB 109.42kB 100.0% 🚀
chunks/less_BzbdhFUi.mjs (New) 107.13kB 107.13kB 100.0% 🚀
chunks/loading-and-resources_COQyuZmN.mjs (New) 104.49kB 104.49kB 100.0% 🚀
chunks/application_Ge7F5hb2.mjs (New) 101.57kB 101.57kB 100.0% 🚀
chunks/gamepad_CyydPNHO.mjs (New) 100.0kB 100.0kB 100.0% 🚀
chunks/csharp_CFKaLbHg.mjs (New) 99.97kB 99.97kB 100.0% 🚀
chunks/fortran-free-form_yxJ7igsv.mjs (New) 98.65kB 98.65kB 100.0% 🚀
chunks/ui-and-widgets_og3rvoTt.mjs (New) 97.2kB 97.2kB 100.0% 🚀
chunks/racket_DRv7j6nv.mjs (New) 95.06kB 95.06kB 100.0% 🚀
chunks/particles_Bq_mN7tY.mjs (New) 94.62kB 94.62kB 100.0% 🚀
chunks/swift_DWmMn3lF.mjs (New) 94.57kB 94.57kB 100.0% 🚀
chunks/immediate-mode_C_to1ucZ.mjs (New) 92.77kB 92.77kB 100.0% 🚀
chunks/hack_ogeSwry3.mjs (New) 86.02kB 86.02kB 100.0% 🚀
chunks/authoring-extensions_B4D8sH9I.mjs (New) 84.42kB 84.42kB 100.0% 🚀
chunks/beat-detection_Bal2xUY9.mjs (New) 83.95kB 83.95kB 100.0% 🚀
chunks/vyper_C6KGx0YU.mjs (New) 82.05kB 82.05kB 100.0% 🚀
chunks/latex_CHMapQI4.mjs (New) 80.49kB 80.49kB 100.0% 🚀
chunks/gameplay-collision_DDSMTGo7.mjs (New) 78.98kB 78.98kB 100.0% 🚀
chunks/c_DtrCgMGx.mjs (New) 78.39kB 78.39kB 100.0% 🚀
chunks/physics-basics_DvFG3Qsj.mjs (New) 77.32kB 77.32kB 100.0% 🚀
chunks/python_BjnOIxPe.mjs (New) 77.17kB 77.17kB 100.0% 🚀
chunks/mojo_CsUSYzsu.mjs (New) 76.64kB 76.64kB 100.0% 🚀
chunks/graphics_BydiQ829.mjs (New) 75.46kB 75.46kB 100.0% 🚀
chunks/vendor-react_BMTBJ0m-.mjs (New) 75.19kB 75.19kB 100.0% 🚀
chunks/worlds-and-spawning_B7VpJweJ.mjs (New) 72.75kB 72.75kB 100.0% 🚀
chunks/ldtk_bfDFeD3W.mjs (New) 72.12kB 72.12kB 100.0% 🚀
chunks/mouse-and-pointer_0s1Nma_b.mjs (New) 71.45kB 71.45kB 100.0% 🚀
chunks/typed-worklets-and-workers_DmUOR2Rj.mjs (New) 70.72kB 70.72kB 100.0% 🚀
chunks/ExampleBrowser_DbWaz5Ov.mjs (New) 69.05kB 69.05kB 100.0% 🚀
chunks/debugging-and-inspection_CEnsz3SW.mjs (New) 67.4kB 67.4kB 100.0% 🚀
chunks/ocaml_vm1Y8An6.mjs (New) 67.28kB 67.28kB 100.0% 🚀
chunks/markdown_CkmxmzqY.mjs (New) 65.34kB 65.34kB 100.0% 🚀
chunks/sprites_DIfNuHtq.mjs (New) 65.21kB 65.21kB 100.0% 🚀
chunks/ballerina_DIdXD2KH.mjs (New) 64.73kB 64.73kB 100.0% 🚀
chunks/aseprite_Bqe0oUkY.mjs (New) 63.85kB 63.85kB 100.0% 🚀
chunks/deployment_BqV8inUk.mjs (New) 63.24kB 63.24kB 100.0% 🚀
chunks/wikitext_wjhjmmzD.mjs (New) 62.35kB 62.35kB 100.0% 🚀
chunks/html_CJiVogkZ.mjs (New) 62.31kB 62.31kB 100.0% 🚀
chunks/stata_ZpI2p0PE.mjs (New) 62.02kB 62.02kB 100.0% 🚀
chunks/mermaid_ItFqCK9s.mjs (New) 61.2kB 61.2kB 100.0% 🚀
chunks/render-targets_DgCkp8UR.mjs (New) 59.28kB 59.28kB 100.0% 🚀
chunks/everforest-light_D0-By8Ib.mjs (New) 58.66kB 58.66kB 100.0% 🚀
chunks/everforest-dark_DM8lKNNi.mjs (New) 58.65kB 58.65kB 100.0% 🚀
chunks/catppuccin-macchiato_Dkogd_RC.mjs (New) 56.22kB 56.22kB 100.0% 🚀
chunks/catppuccin-frappe_DpzIdcTG.mjs (New) 56.2kB 56.2kB 100.0% 🚀
chunks/catppuccin-latte_qlLg6gWa.mjs (New) 56.2kB 56.2kB 100.0% 🚀
chunks/catppuccin-mocha_DW8bSod0.mjs (New) 56.2kB 56.2kB 100.0% 🚀
chunks/typed-shaders_CBxZqeb3.mjs (New) 55.39kB 55.39kB 100.0% 🚀
chunks/imba_96qKoJCa.mjs (New) 54.85kB 54.85kB 100.0% 🚀
chunks/_virtual_astro_get-image_BNYPfiov.mjs (New) 54.78kB 54.78kB 100.0% 🚀
chunks/ada_twHwrVWN.mjs (New) 54.62kB 54.62kB 100.0% 🚀
chunks/apex_CybrBQ0z.mjs (New) 53.2kB 53.2kB 100.0% 🚀
chunks/keyboard-and-actions_Dgcg4obO.mjs (New) 53.05kB 53.05kB 100.0% 🚀
chunks/ruby_DurSp7NY.mjs (New) 52.52kB 52.52kB 100.0% 🚀
chunks/css_B24SoJng.mjs (New) 52.49kB 52.49kB 100.0% 🚀
chunks/go_aXtTCanQ.mjs (New) 51.86kB 51.86kB 100.0% 🚀
_astro/AppShell.CL9P8ynr.css (New) 50.63kB 50.63kB 100.0% 🚀
chunks/AppShell_DcA7RNIh.mjs (New) 49.52kB 49.52kB 100.0% 🚀
chunks/ahk2_bJ5Wm9-K.mjs (New) 48.96kB 48.96kB 100.0% 🚀
chunks/d_BQY8TDgQ.mjs (New) 48.94kB 48.94kB 100.0% 🚀
chunks/perl_DD46WzW0.mjs (New) 48.57kB 48.57kB 100.0% 🚀
chunks/shellscript_CJgrg95w.mjs (New) 45.75kB 45.75kB 100.0% 🚀
chunks/haskell_CfGsE1Cf.mjs (New) 45.58kB 45.58kB 100.0% 🚀
chunks/troubleshooting_Ca-QCoDG.mjs (New) 44.55kB 44.55kB 100.0% 🚀
chunks/asm_wBDSgBbA.mjs (New) 43.88kB 43.88kB 100.0% 🚀
chunks/scene-graph_4oTBDh0s.mjs (New) 43.01kB 43.01kB 100.0% 🚀
chunks/custom-renderers_Dkm0poZI.mjs (New) 42.4kB 42.4kB 100.0% 🚀
chunks/erlang_BsP4G84Y.mjs (New) 41.69kB 41.69kB 100.0% 🚀
chunks/org_GxkLwT0W.mjs (New) 41.61kB 41.61kB 100.0% 🚀
chunks/cobol_Cde5oeOV.mjs (New) 41.47kB 41.47kB 100.0% 🚀
chunks/bird2_BMprQDNV.mjs (New) 41.32kB 41.32kB 100.0% 🚀
chunks/haxe_QaqXWmIB.mjs (New) 40.26kB 40.26kB 100.0% 🚀
chunks/pixel-snapping_BEFqoSgV.mjs (New) 40.11kB 40.11kB 100.0% 🚀
chunks/EditorPreview_C7pSh6tO.mjs (New) 39.69kB 39.69kB 100.0% 🚀
chunks/resize-dpr-and-canvas_BS4Wjv-N.mjs (New) 39.66kB 39.66kB 100.0% 🚀
chunks/nginx_B6K5caqL.mjs (New) 39.45kB 39.45kB 100.0% 🚀
chunks/houston_BCge59HB.mjs (New) 39.13kB 39.13kB 100.0% 🚀
chunks/tokyo-night_CZgEO66P.mjs (New) 38.95kB 38.95kB 100.0% 🚀
chunks/device-variants_D0YDiF0J.mjs (New) 37.6kB 37.6kB 100.0% 🚀
chunks/one-dark-pro_CUhzNQJE.mjs (New) 37.42kB 37.42kB 100.0% 🚀
chunks/poimandres_QRiMVtzX.mjs (New) 36.74kB 36.74kB 100.0% 🚀
chunks/serialization-and-prefabs_26AmzF3L.mjs (New) 35.73kB 35.73kB 100.0% 🚀
chunks/scenes-and-lifecycle_FDQFY04P.mjs (New) 35.13kB 35.13kB 100.0% 🚀
chunks/bsl_RRHQTRWr.mjs (New) 35.05kB 35.05kB 100.0% 🚀
chunks/stylus_ZZDn1yUO.mjs (New) 33.23kB 33.23kB 100.0% 🚀
chunks/julia_CUdUEEdZ.mjs (New) 33.23kB 33.23kB 100.0% 🚀
chunks/crystal_BxARsATC.mjs (New) 32.91kB 32.91kB 100.0% 🚀
chunks/ahk_B0zayAPr.mjs (New) 32.83kB 32.83kB 100.0% 🚀
chunks/night-owl_Cm6kp1PA.mjs (New) 32.35kB 32.35kB 100.0% 🚀
chunks/applescript_CJ80B5XJ.mjs (New) 32.08kB 32.08kB 100.0% 🚀
chunks/guide-structure_BmtgRGnl.mjs (New) 31.55kB 31.55kB 100.0% 🚀
chunks/scala_pMGZAs9j.mjs (New) 31.33kB 31.33kB 100.0% 🚀
chunks/joints-and-dynamics_DdVwNKNh.mjs (New) 31.05kB 31.05kB 100.0% 🚀
chunks/razor_DtzGaIsD.mjs (New) 30.85kB 30.85kB 100.0% 🚀
chunks/scss_DfTZ3J77.mjs (New) 30.71kB 30.71kB 100.0% 🚀
chunks/java_DtJJObUJ.mjs (New) 30.68kB 30.68kB 100.0% 🚀
chunks/EditorCode_CXW2ep0E.mjs (New) 30.66kB 30.66kB 100.0% 🚀
chunks/coffee_CKL8nDPj.mjs (New) 29.89kB 29.89kB 100.0% 🚀
chunks/c3_u0qNrniV.mjs (New) 29.84kB 29.84kB 100.0% 🚀
chunks/nord_B2iOUYPu.mjs (New) 29.64kB 29.64kB 100.0% 🚀
chunks/codeql_BwdvwJnv.mjs (New) 29.6kB 29.6kB 100.0% 🚀
chunks/performance_BT_xN2wX.mjs (New) 29.36kB 29.36kB 100.0% 🚀
chunks/night-owl-light_C5JQlziG.mjs (New) 29.05kB 29.05kB 100.0% 🚀
chunks/system-verilog_DW0KSMVO.mjs (New) 28.95kB 28.95kB 100.0% 🚀
chunks/vue_BZSikl6a.mjs (New) 28.8kB 28.8kB 100.0% 🚀
chunks/marko_yztgkyW2.mjs (New) 28.69kB 28.69kB 100.0% 🚀
chunks/fsharp_Csv26BFS.mjs (New) 28.44kB 28.44kB 100.0% 🚀
_astro/jetbrains-mono-latin-500-normal.CJOVTJB7.woff (New) 28.21kB 28.21kB 100.0% 🚀
chunks/one-light_Dydeaphl.mjs (New) 28.19kB 28.19kB 100.0% 🚀
chunks/angular-html_DFpvQUcR.mjs (New) 27.66kB 27.66kB 100.0% 🚀
chunks/typespec_C_R5TbvO.mjs (New) 27.64kB 27.64kB 100.0% 🚀
chunks/moonbit_BzHkbr4Q.mjs (New) 27.52kB 27.52kB 100.0% 🚀
_astro/jetbrains-mono-latin-400-normal.6-qcROiO.woff (New) 27.5kB 27.5kB 100.0% 🚀
chunks/apl_BusG2rRg.mjs (New) 27.01kB 27.01kB 100.0% 🚀
chunks/vhdl_Co2XFKY7.mjs (New) 26.8kB 26.8kB 100.0% 🚀
chunks/purescript_CLpaGMbw.mjs (New) 26.78kB 26.78kB 100.0% 🚀
chunks/cadence_B1ELWULD.mjs (New) 26.37kB 26.37kB 100.0% 🚀
chunks/templ_Dua9xeFZ.mjs (New) 26.31kB 26.31kB 100.0% 🚀
chunks/astro_DVlyOzje.mjs (New) 25.85kB 25.85kB 100.0% 🚀
chunks/nim_B6oIhaho.mjs (New) 25.63kB 25.63kB 100.0% 🚀
chunks/retained-containers_CEraR_wa.mjs (New) 25.49kB 25.49kB 100.0% 🚀
chunks/gruvbox-light-medium_DK7Hp87r.mjs (New) 25.36kB 25.36kB 100.0% 🚀
chunks/gruvbox-dark-medium_C1cagsrM.mjs (New) 25.36kB 25.36kB 100.0% 🚀
chunks/gruvbox-light-hard_h1QgYclB.mjs (New) 25.35kB 25.35kB 100.0% 🚀
chunks/gruvbox-light-soft_CsHBh6fE.mjs (New) 25.35kB 25.35kB 100.0% 🚀
chunks/gruvbox-dark-hard_DaH6zhre.mjs (New) 25.35kB 25.35kB 100.0% 🚀
chunks/gruvbox-dark-soft_V8cmWQ7W.mjs (New) 25.35kB 25.35kB 100.0% 🚀
chunks/react_Cghv9ayo.mjs (New) 25.25kB 25.25kB 100.0% 🚀
chunks/sql_DtGcscyb.mjs (New) 24.8kB 24.8kB 100.0% 🚀
chunks/_astro_content_CzFuyW0o.mjs (New) 24.59kB 24.59kB 100.0% 🚀
chunks/twig_D5YhvR8w.mjs (New) 24.25kB 24.25kB 100.0% 🚀
_astro/BenchmarksPage.Dz6ukko5.css (New) 24.25kB 24.25kB 100.0% 🚀
chunks/rose-pine-dawn_5bNxnqJn.mjs (New) 24.16kB 24.16kB 100.0% 🚀
chunks/rose-pine-moon_D9u1dVFS.mjs (New) 24.16kB 24.16kB 100.0% 🚀
chunks/rose-pine_LrKaLPzB.mjs (New) 24.14kB 24.14kB 100.0% 🚀
chunks/offline_BMp7yfWs.mjs (New) 24.08kB 24.08kB 100.0% 🚀
chunks/wit_CeQiCbz_.mjs (New) 23.94kB 23.94kB 100.0% 🚀
chunks/DocsLayout_C05w0X95.mjs (New) 23.91kB 23.91kB 100.0% 🚀
chunks/common-lisp_DJtwvW4V.mjs (New) 23.61kB 23.61kB 100.0% 🚀
chunks/dracula-soft_CxJ6yBh7.mjs (New) 23.29kB 23.29kB 100.0% 🚀
chunks/dracula_DrwtDR2u.mjs (New) 23.26kB 23.26kB 100.0% 🚀
chunks/audio-reactive-visualization_BedbKT_r.mjs (New) 23.26kB 23.26kB 100.0% 🚀
chunks/snazzy-light_DfXk5yzb.mjs (New) 23.25kB 23.25kB 100.0% 🚀
chunks/build-orb-dodge_BQ1WWMjx.mjs (New) 23.02kB 23.02kB 100.0% 🚀
chunks/glimmer-js_B8pygmEI.mjs (New) 22.94kB 22.94kB 100.0% 🚀
chunks/glimmer-ts_CQEDCkOl.mjs (New) 22.94kB 22.94kB 100.0% 🚀
chunks/nushell_BLPX3-WC.mjs (New) 22.84kB 22.84kB 100.0% 🚀
chunks/errors-data_CNvREpxb.mjs (New) 22.73kB 22.73kB 100.0% 🚀
chunks/ayu-light_Djj5_ZCz.mjs (New) 22.53kB 22.53kB 100.0% 🚀
_astro/HomePage.CSgUcSda.css (New) 22.49kB 22.49kB 100.0% 🚀
chunks/ayu-mirage_B5o6RGmT.mjs (New) 22.47kB 22.47kB 100.0% 🚀
chunks/ayu-dark_liWEyCZQ.mjs (New) 22.46kB 22.46kB 100.0% 🚀
chunks/powershell_DvOBVZPr.mjs (New) 21.96kB 21.96kB 100.0% 🚀
_astro/jetbrains-mono-latin-500-normal.BWZEU5yA.woff2 (New) 21.83kB 21.83kB 100.0% 🚀
chunks/groovy_Bw2Ku4bU.mjs (New) 21.56kB 21.56kB 100.0% 🚀
chunks/mdc_C1b5g3_q.mjs (New) 21.34kB 21.34kB 100.0% 🚀
chunks/viml_BReTXeDA.mjs (New) 21.2kB 21.2kB 100.0% 🚀
_astro/jetbrains-mono-latin-400-normal.V6pRDFza.woff2 (New) 21.17kB 21.17kB 100.0% 🚀
chunks/gdscript_CSSSWtkL.mjs (New) 21.11kB 21.11kB 100.0% 🚀
chunks/your-first-scene_f2yypvvd.mjs (New) 21.01kB 21.01kB 100.0% 🚀
chunks/svelte_BPWEr4fK.mjs (New) 20.75kB 20.75kB 100.0% 🚀
chunks/graphql_D_YYFDMU.mjs (New) 20.59kB 20.59kB 100.0% 🚀
chunks/material-theme-palenight_BqWSY0zJ.mjs (New) 20.57kB 20.57kB 100.0% 🚀
chunks/material-theme-lighter_BiEXTf1u.mjs (New) 20.56kB 20.56kB 100.0% 🚀
chunks/material-theme-darker_DAUXLwZb.mjs (New) 20.55kB 20.55kB 100.0% 🚀
chunks/material-theme-ocean_C0tH_beU.mjs (New) 20.55kB 20.55kB 100.0% 🚀
chunks/material-theme_DckHuUUK.mjs (New) 20.52kB 20.52kB 100.0% 🚀
chunks/liquid_BmzWPM4R.mjs (New) 20.34kB 20.34kB 100.0% 🚀
chunks/move_B-o8dn0N.mjs (New) 20.24kB 20.24kB 100.0% 🚀
_astro/ExampleBrowser.BGXKxNid.css (New) 20.05kB 20.05kB 100.0% 🚀
chunks/setup_CHsmI8st.mjs (New) 19.4kB 19.4kB 100.0% 🚀
chunks/ts-tags_fCPzN4J1.mjs (New) 19.02kB 19.02kB 100.0% 🚀
chunks/kanagawa-dragon_BUX6P0jP.mjs (New) 18.91kB 18.91kB 100.0% 🚀
chunks/kanagawa-lotus_Dm_LiccM.mjs (New) 18.91kB 18.91kB 100.0% 🚀
chunks/kanagawa-wave_K9PBxgbK.mjs (New) 18.9kB 18.9kB 100.0% 🚀
chunks/odin_vjOJSyfV.mjs (New) 18.58kB 18.58kB 100.0% 🚀
chunks/solidity_DPVu0wkJ.mjs (New) 18.46kB 18.46kB 100.0% 🚀
chunks/elixir_B_EVzLaG.mjs (New) 18.25kB 18.25kB 100.0% 🚀
chunks/cue_B5KneM5p.mjs (New) 18.22kB 18.22kB 100.0% 🚀
chunks/matlab_CfRK6IMC.mjs (New) 17.96kB 17.96kB 100.0% 🚀
chunks/luau_koeK31uZ.mjs (New) 17.78kB 17.78kB 100.0% 🚀
chunks/nix_4vzStI7m.mjs (New) 17.7kB 17.7kB 100.0% 🚀
chunks/grid-pathfinding_B7nyQaEj.mjs (New) 17.62kB 17.62kB 100.0% 🚀
chunks/lua_D40mNAJl.mjs (New) 17.57kB 17.57kB 100.0% 🚀
chunks/post-processing_CCQpJxD9.mjs (New) 17.44kB 17.44kB 100.0% 🚀
chunks/actionscript-3_CfsDl31I.mjs (New) 17.38kB 17.38kB 100.0% 🚀
_astro/space-grotesk-latin-400-normal.BnQMeOim.woff (New) 17.0kB 17.0kB 100.0% 🚀
_astro/space-grotesk-latin-500-normal.CNSSEhBt.woff (New) 16.99kB 16.99kB 100.0% 🚀
chunks/rust_COBzcmTx.mjs (New) 16.94kB 16.94kB 100.0% 🚀
_astro/space-grotesk-latin-600-normal.BflQw4A9.woff (New) 16.88kB 16.88kB 100.0% 🚀
_astro/space-grotesk-latin-ext-400-normal.DRPE3kg4.woff (New) 16.79kB 16.79kB 100.0% 🚀
_astro/space-grotesk-latin-ext-500-normal.3dgZTiw9.woff (New) 16.79kB 16.79kB 100.0% 🚀
_astro/space-grotesk-latin-ext-600-normal.VcznFIpX.woff (New) 16.73kB 16.73kB 100.0% 🚀
chunks/HomePage_C25Zg0hV.mjs (New) 16.65kB 16.65kB 100.0% 🚀
chunks/abap_LtYK6g-v.mjs (New) 16.59kB 16.59kB 100.0% 🚀
chunks/github-dark-high-contrast_RHN5kW48.mjs (New) 16.44kB 16.44kB 100.0% 🚀
chunks/gnuplot_DgWvVXI8.mjs (New) 16.3kB 16.3kB 100.0% 🚀
chunks/kusto_6FdaWTzR.mjs (New) 16.29kB 16.29kB 100.0% 🚀
chunks/github-dark-default_BrdnT3vv.mjs (New) 16.25kB 16.25kB 100.0% 🚀
chunks/github-dark-dimmed_Bn-P3bZJ.mjs (New) 16.25kB 16.25kB 100.0% 🚀
chunks/github-light-high-contrast_XMJJhVsV.mjs (New) 16.09kB 16.09kB 100.0% 🚀
chunks/coordinates-and-views_C7WfuP0a.mjs (New) 15.95kB 15.95kB 100.0% 🚀
chunks/github-light-default_PTSfV1MO.mjs (New) 15.94kB 15.94kB 100.0% 🚀
chunks/clarity_BkOxTQMf.mjs (New) 15.91kB 15.91kB 100.0% 🚀
chunks/pug_UKFyUFpE.mjs (New) 15.87kB 15.87kB 100.0% 🚀
chunks/synthwave-84_D4CZeGaH.mjs (New) 15.79kB 15.79kB 100.0% 🚀
chunks/smalltalk_D4IpSogw.mjs (New) 15.67kB 15.67kB 100.0% 🚀
chunks/vitesse-dark_Cjct7fHa.mjs (New) 15.47kB 15.47kB 100.0% 🚀
chunks/ApiSymbolPage_BgnkIDfT.mjs (New) 15.45kB 15.45kB 100.0% 🚀
chunks/vitesse-black_BnxsPkql.mjs (New) 15.39kB 15.39kB 100.0% 🚀
chunks/vitesse-light_D54yeeu7.mjs (New) 15.32kB 15.32kB 100.0% 🚀
chunks/v_DBTjbKF9.mjs (New) 15.03kB 15.03kB 100.0% 🚀
chunks/aurora-x_Dwo4cmWi.mjs (New) 15.02kB 15.02kB 100.0% 🚀
chunks/parse_DwASa1l8.mjs (New) 14.67kB 14.67kB 100.0% 🚀
chunks/bat_Dx8nnxXE.mjs (New) 14.19kB 14.19kB 100.0% 🚀
chunks/chords-and-sequences_CXbMpQrW.mjs (New) 14.16kB 14.16kB 100.0% 🚀
chunks/fish_D7qAeWQz.mjs (New) 13.98kB 13.98kB 100.0% 🚀
chunks/handlebars_CenwkBn_.mjs (New) 13.96kB 13.96kB 100.0% 🚀
chunks/vesper_29-00ngB.mjs (New) 13.95kB 13.95kB 100.0% 🚀
chunks/nsis_C3tUpeAt.mjs (New) 13.79kB 13.79kB 100.0% 🚀
chunks/surrealql_H8LFCYct.mjs (New) 13.62kB 13.62kB 100.0% 🚀
chunks/hjson_Cuaphql8.mjs (New) 13.51kB 13.51kB 100.0% 🚀
_astro/space-grotesk-latin-400-normal.CJ-V5oYT.woff2 (New) 13.39kB 13.39kB 100.0% 🚀
chunks/apache_BIl2qPOf.mjs (New) 13.38kB 13.38kB 100.0% 🚀
_astro/space-grotesk-latin-500-normal.lFbtlQH6.woff2 (New) 13.31kB 13.31kB 100.0% 🚀
_astro/space-grotesk-latin-600-normal.DjKNqYRj.woff2 (New) 13.28kB 13.28kB 100.0% 🚀
chunks/wasm_gNIKwGlD.mjs (New) 13.23kB 13.23kB 100.0% 🚀
chunks/GuideChapterPage_yema76dD.mjs (New) 13.16kB 13.16kB 100.0% 🚀
chunks/github-dark_DS-peopi.mjs (New) 12.89kB 12.89kB 100.0% 🚀
chunks/puppet_CQlPp728.mjs (New) 12.8kB 12.8kB 100.0% 🚀
chunks/terraform_v0KN9QQh.mjs (New) 12.78kB 12.78kB 100.0% 🚀
chunks/project-structure_rRLfwHXP.mjs (New) 12.74kB 12.74kB 100.0% 🚀
chunks/cinematics_BSgReNbI.mjs (New) 12.7kB 12.7kB 100.0% 🚀
chunks/github-light_COKynrhu.mjs (New) 12.66kB 12.66kB 100.0% 🚀
chunks/laserwave_DHoaXozT.mjs (New) 12.62kB 12.62kB 100.0% 🚀
chunks/elm_Bipiw8b9.mjs (New) 12.52kB 12.52kB 100.0% 🚀
chunks/just_Du2dk0Nd.mjs (New) 12.4kB 12.4kB 100.0% 🚀
_astro/space-grotesk-latin-ext-600-normal.DxxdqCpr.woff2 (New) 12.29kB 12.29kB 100.0% 🚀
_astro/space-grotesk-latin-ext-500-normal.DUe3BAxM.woff2 (New) 12.27kB 12.27kB 100.0% 🚀
_astro/space-grotesk-latin-ext-400-normal.CfP_5XZW.woff2 (New) 12.26kB 12.26kB 100.0% 🚀
chunks/gherkin_D6Lr12YQ.mjs (New) 12.25kB 12.25kB 100.0% 🚀
chunks/ApiAllPage_BesWFbTv.mjs (New) 12.06kB 12.06kB 100.0% 🚀
chunks/rst_8pQc8J6s.mjs (New) 11.99kB 11.99kB 100.0% 🚀
chunks/prolog_Bacii3Ue.mjs (New) 11.89kB 11.89kB 100.0% 🚀
chunks/yaml_BXGYSTgF.mjs (New) 11.87kB 11.87kB 100.0% 🚀
chunks/nextflow-groovy_CdFFX-gF.mjs (New) 11.82kB 11.82kB 100.0% 🚀
chunks/beancount_CXtOQ8oS.mjs (New) 11.76kB 11.76kB 100.0% 🚀
chunks/dream-maker_CngiPd8U.mjs (New) 11.66kB 11.66kB 100.0% 🚀
chunks/pkl_C7lWzykI.mjs (New) 11.51kB 11.51kB 100.0% 🚀
chunks/hcl_DHg_Osgo.mjs (New) 11.39kB 11.39kB 100.0% 🚀
chunks/light-plus_BYP-8qw4.mjs (New) 11.16kB 11.16kB 100.0% 🚀
chunks/jison_otwuiBLr.mjs (New) 11.11kB 11.11kB 100.0% 🚀
chunks/raku_DI9yGpeW.mjs (New) 11.1kB 11.1kB 100.0% 🚀
_astro/DocsLayout.DPYRdTd8.css (New) 10.92kB 10.92kB 100.0% 🚀
chunks/pause-menu_D35iITcr.mjs (New) 10.73kB 10.73kB 100.0% 🚀
chunks/slack-ochin_BtOis9cv.mjs (New) 10.72kB 10.72kB 100.0% 🚀
chunks/tex_D-vgCAxY.mjs (New) 10.68kB 10.68kB 100.0% 🚀
chunks/sass_DI2zJwx7.mjs (New) 10.44kB 10.44kB 100.0% 🚀
chunks/plastic_DW9BRoPy.mjs (New) 10.41kB 10.41kB 100.0% 🚀
_astro/jetbrains-mono-latin-ext-500-normal.ckzbgY84.woff (New) 10.34kB 10.34kB 100.0% 🚀
chunks/slack-dark_DF6OVa8y.mjs (New) 10.31kB 10.31kB 100.0% 🚀
chunks/smithy_BRyN83Yn.mjs (New) 10.29kB 10.29kB 100.0% 🚀
chunks/dark-plus_BLkfv1Ms.mjs (New) 10.26kB 10.26kB 100.0% 🚀
chunks/game-feel_tq-pHs_G.mjs (New) 10.15kB 10.15kB 100.0% 🚀
chunks/cmake_DPsCB_V6.mjs (New) 10.14kB 10.14kB 100.0% 🚀
_astro/jetbrains-mono-latin-ext-400-normal.fXTG6kC5.woff (New) 10.13kB 10.13kB 100.0% 🚀
chunks/audio-reactive-scene_C-wU-Unn.mjs (New) 10.11kB 10.11kB 100.0% 🚀
chunks/andromeeda_BsG9A-2G.mjs (New) 10.05kB 10.05kB 100.0% 🚀
chunks/make_B2ukzWs3.mjs (New) 10.03kB 10.03kB 100.0% 🚀
chunks/horizon-bright_CwPyL0ta.mjs (New) 9.96kB 9.96kB 100.0% 🚀
chunks/horizon_D2HPo9qV.mjs (New) 9.93kB 9.93kB 100.0% 🚀
chunks/kotlin_BHE8CoV9.mjs (New) 9.85kB 9.85kB 100.0% 🚀
chunks/sas_CDyGTQ8m.mjs (New) 9.74kB 9.74kB 100.0% 🚀
chunks/haml_Cuchl6uH.mjs (New) 9.71kB 9.71kB 100.0% 🚀
chunks/hud-overlay_rSWF2dLT.mjs (New) 9.69kB 9.69kB 100.0% 🚀
chunks/vue-html_CftEgX6P.mjs (New) 9.68kB 9.68kB 100.0% 🚀
chunks/dart_C6DUdjib.mjs (New) 9.67kB 9.67kB 100.0% 🚀
chunks/waypoint-graphs_BGpwxnYY.mjs (New) 9.57kB 9.57kB 100.0% 🚀
_astro/ApiSymbolPage.CWZBqkCH.css (New) 9.5kB 9.5kB 100.0% 🚀
chunks/monokai_Y04IwRdK.mjs (New) 9.17kB 9.17kB 100.0% 🚀
chunks/regexp_hIwxRxyb.mjs (New) 9.14kB 9.14kB 100.0% 🚀
chunks/ui-patterns_hJeDNAr_.mjs (New) 9.06kB 9.06kB 100.0% 🚀
chunks/plsql_DCNXypXO.mjs (New) 9.03kB 9.03kB 100.0% 🚀
chunks/camera-follow-and-parallax_BPcVmhvQ.mjs (New) 9.0kB 9.0kB 100.0% 🚀
chunks/prisma_4G_BaF_i.mjs (New) 8.73kB 8.73kB 100.0% 🚀
chunks/systemd_DFbUltlW.mjs (New) 8.58kB 8.58kB 100.0% 🚀
chunks/GuideIndexPage_DV44UlrR.mjs (New) 8.4kB 8.4kB 100.0% 🚀
chunks/ApiIndexPage_BdlXLLOv.mjs (New) 8.32kB 8.32kB 100.0% 🚀
chunks/soy_CIWxkm6B.mjs (New) 8.12kB 8.12kB 100.0% 🚀
chunks/solarized-dark_W1kg3ZX0.mjs (New) 8.03kB 8.03kB 100.0% 🚀
chunks/qss_Iltvkn1C.mjs (New) 7.97kB 7.97kB 100.0% 🚀
chunks/split-screen_DguBJsWC.mjs (New) 7.96kB 7.96kB 100.0% 🚀
chunks/r_xm7_PhsC.mjs (New) 7.96kB 7.96kB 100.0% 🚀
chunks/min-light_CnaFhYML.mjs (New) 7.88kB 7.88kB 100.0% 🚀
chunks/scheme_D3A2QBtM.mjs (New) 7.87kB 7.87kB 100.0% 🚀
_astro/GuideChapterPage.Cg0P5OpK.css (New) 7.79kB 7.79kB 100.0% 🚀
chunks/talonscript_CLxaFu-b.mjs (New) 7.73kB 7.73kB 100.0% 🚀
chunks/hlsl_BJLUNfne.mjs (New) 7.73kB 7.73kB 100.0% 🚀
chunks/solarized-light_DnHmPawE.mjs (New) 7.63kB 7.63kB 100.0% 🚀
_astro/jetbrains-mono-latin-ext-500-normal.Cut-4mMH.woff2 (New) 7.53kB 7.53kB 100.0% 🚀
chunks/riscv_CvzikGLb.mjs (New) 7.5kB 7.5kB 100.0% 🚀
chunks/proto_ClkOcAW0.mjs (New) 7.47kB 7.47kB 100.0% 🚀
chunks/chapel_C02jq-Ii.mjs (New) 7.47kB 7.47kB 100.0% 🚀
chunks/red_C4iRHu1e.mjs (New) 7.35kB 7.35kB 100.0% 🚀
_astro/jetbrains-mono-latin-ext-400-normal.Bc8Ftmh3.woff2 (New) 7.34kB 7.34kB 100.0% 🚀
chunks/toml_B7BHZIqX.mjs (New) 7.22kB 7.22kB 100.0% 🚀
chunks/clojure_DDsQ0FaV.mjs (New) 7.2kB 7.2kB 100.0% 🚀
chunks/postcss_D1gKt4z_.mjs (New) 7.15kB 7.15kB 100.0% 🚀
chunks/min-dark_Ba1FsixN.mjs (New) 7.12kB 7.12kB 100.0% 🚀
chunks/ara_IxnQjO6j.mjs (New) 7.1kB 7.1kB 100.0% 🚀
chunks/gdshader_D7JfdFV3.mjs (New) 7.08kB 7.08kB 100.0% 🚀
chunks/what-is-exojs_B13HeszX.mjs (New) 7.03kB 7.03kB 100.0% 🚀
_astro/jetbrains-mono-cyrillic-500-normal.DJqRU3vO.woff (New) 7.02kB 7.02kB 100.0% 🚀
chunks/verilog_Ma7yBE30.mjs (New) 6.99kB 6.99kB 100.0% 🚀
_astro/jetbrains-mono-cyrillic-400-normal.ugxPyKxw.woff (New) 6.98kB 6.98kB 100.0% 🚀
_astro/GuideIndexPage.*.css (New) 6.71kB 6.71kB 100.0% 🚀
chunks/content-modules_9NNmHDp2.mjs (New) 6.66kB 6.66kB 100.0% 🚀
chunks/jinja_D9zUf7rH.mjs (New) 6.61kB 6.61kB 100.0% 🚀
chunks/cypher_D8Bb8Cq2.mjs (New) 6.58kB 6.58kB 100.0% 🚀
chunks/powerquery_SrvS_NBM.mjs (New) 6.58kB 6.58kB 100.0% 🚀
chunks/coq_BtFcIXby.mjs (New) 6.55kB 6.55kB 100.0% 🚀
chunks/vb_eGVhCUXq.mjs (New) 6.54kB 6.54kB 100.0% 🚀
chunks/shaderlab_BcRFTmmA.mjs (New) 6.5kB 6.5kB 100.0% 🚀
chunks/xml_DzftpGsQ.mjs (New) 6.41kB 6.41kB 100.0% 🚀
_astro/ApiIndexPage.Bl6TcwAA.css (New) 6.35kB 6.35kB 100.0% 🚀
chunks/lean_BwOKScIt.mjs (New) 6.28kB 6.28kB 100.0% 🚀
chunks/qml_CknB7WvB.mjs (New) 6.24kB 6.24kB 100.0% 🚀
chunks/awk_D6dA05Ye.mjs (New) 6.17kB 6.17kB 100.0% 🚀
chunks/gdresource_DdPbsqpY.mjs (New) 6.06kB 6.06kB 100.0% 🚀
chunks/bicep_CZ338dSk.mjs (New) 5.98kB 5.98kB 100.0% 🚀
chunks/zig_lTQvxhLD.mjs (New) 5.97kB 5.97kB 100.0% 🚀
chunks/wgsl_1s5rV5xS.mjs (New) 5.77kB 5.77kB 100.0% 🚀
chunks/dax_S-Noo-ku.mjs (New) 5.73kB 5.73kB 100.0% 🚀
_astro/space-grotesk-vietnamese-400-normal.BIWiOVfw.woff (New) 5.73kB 5.73kB 100.0% 🚀
_astro/jetbrains-mono-greek-500-normal.D7SFKleX.woff (New) 5.72kB 5.72kB 100.0% 🚀
_astro/space-grotesk-vietnamese-500-normal.BTqKIpxg.woff (New) 5.72kB 5.72kB 100.0% 🚀
_astro/space-grotesk-vietnamese-600-normal.D6zpsUhD.woff (New) 5.7kB 5.7kB 100.0% 🚀
_astro/jetbrains-mono-greek-400-normal.B9oWc5Lo.woff (New) 5.66kB 5.66kB 100.0% 🚀
chunks/SourceSnippet_m0u-GQTr.mjs (New) 5.66kB 5.66kB 100.0% 🚀
_astro/jetbrains-mono-vietnamese-500-normal.DNRqzVM1.woff (New) 5.48kB 5.48kB 100.0% 🚀
chunks/bibtex_BzgdqG3s.mjs (New) 5.41kB 5.41kB 100.0% 🚀
chunks/polar_4pN1JrJ8.mjs (New) 5.38kB 5.38kB 100.0% 🚀
_astro/jetbrains-mono-vietnamese-400-normal.CqNFfHCs.woff (New) 5.37kB 5.37kB 100.0% 🚀
chunks/sharp_BXhThMTE.mjs (New) 5.37kB 5.37kB 100.0% 🚀
_astro/jetbrains-mono-cyrillic-500-normal.DmUKJPL_.woff2 (New) 5.36kB 5.36kB 100.0% 🚀
_astro/jetbrains-mono-cyrillic-400-normal.BEIGL1Tu.woff2 (New) 5.33kB 5.33kB 100.0% 🚀
chunks/llvm_ZNG_yAr9.mjs (New) 5.31kB 5.31kB 100.0% 🚀
chunks/nextflow_Dp8l2yvM.mjs (New) 5.28kB 5.28kB 100.0% 🚀
chunks/http_DUlij2nY.mjs (New) 5.25kB 5.25kB 100.0% 🚀
chunks/fennel_B3wtZRne.mjs (New) 5.21kB 5.21kB 100.0% 🚀
chunks/rosmsg_CyYq6XdT.mjs (New) 5.13kB 5.13kB 100.0% 🚀
_astro/ApiAllPage.B_HMfH1F.css (New) 5.11kB 5.11kB 100.0% 🚀
_astro/DocsSidebar.BtB_5qdL.css (New) 5.11kB 5.11kB 100.0% 🚀
chunks/tcl_DLe0Tsfm.mjs (New) 4.95kB 4.95kB 100.0% 🚀
chunks/sdbl_CdQg5gu1.mjs (New) 4.95kB 4.95kB 100.0% 🚀
chunks/ron_DzAo6FTJ.mjs (New) 4.51kB 4.51kB 100.0% 🚀
chunks/pascal_D8-gNZ2I.mjs (New) 4.49kB 4.49kB 100.0% 🚀
chunks/zenscript_BoijL7rl.mjs (New) 4.38kB 4.38kB 100.0% 🚀
_astro/space-grotesk-vietnamese-500-normal.BmEvtly_.woff2 (New) 4.32kB 4.32kB 100.0% 🚀
chunks/gn_DDjbVPF4.mjs (New) 4.31kB 4.31kB 100.0% 🚀
_astro/space-grotesk-vietnamese-600-normal.DUi7WF5p.woff2 (New) 4.31kB 4.31kB 100.0% 🚀
_astro/space-grotesk-vietnamese-400-normal.B7xT_GF5.woff2 (New) 4.3kB 4.3kB 100.0% 🚀
_astro/jetbrains-mono-greek-500-normal.JpySY46c.woff2 (New) 4.28kB 4.28kB 100.0% 🚀
_astro/jetbrains-mono-greek-400-normal.C190GLew.woff2 (New) 4.23kB 4.23kB 100.0% 🚀
chunks/hurl_CmOLSul9.mjs (New) 4.22kB 4.22kB 100.0% 🚀
chunks/turtle_BEG5g_eT.mjs (New) 4.2kB 4.2kB 100.0% 🚀
_astro/EditorCode.BiwcI9nO.css (New) 4.18kB 4.18kB 100.0% 🚀
chunks/narrat_D9rrR0H5.mjs (New) 4.12kB 4.12kB 100.0% 🚀
chunks/kdl_DkTyxPcj.mjs (New) 4.1kB 4.1kB 100.0% 🚀
chunks/glsl_BNaTluKX.mjs (New) 4.09kB 4.09kB 100.0% 🚀
chunks/fluent_BjfpB34g.mjs (New) 4.04kB 4.04kB 100.0% 🚀
chunks/jsonnet_BafgE6cE.mjs (New) 4.04kB 4.04kB 100.0% 🚀
chunks/ssh-config_DXFPABYp.mjs (New) 3.83kB 3.83kB 100.0% 🚀
chunks/tasl__AAbKiWM.mjs (New) 3.81kB 3.81kB 100.0% 🚀
chunks/rel_BT0iIKKw.mjs (New) 3.75kB 3.75kB 100.0% 🚀
chunks/rbs_D_4FkXDS.mjs (New) 3.75kB 3.75kB 100.0% 🚀
chunks/vala_BnnASFsX.mjs (New) 3.74kB 3.74kB 100.0% 🚀
chunks/genie_DnK2KWIP.mjs (New) 3.73kB 3.73kB 100.0% 🚀
chunks/json5_xULSgPQI.mjs (New) 3.71kB 3.71kB 100.0% 🚀
chunks/po_IjpR1yHO.mjs (New) 3.71kB 3.71kB 100.0% 🚀
chunks/splunk_xP_ZjUH2.mjs (New) 3.65kB 3.65kB 100.0% 🚀
chunks/api-reference_DNMo0mQi.mjs (New) 3.57kB 3.57kB 100.0% 🚀
chunks/mipsasm_EL46Y4Xg.mjs (New) 3.54kB 3.54kB 100.0% 🚀
chunks/jsonc_Cu6rqcrJ.mjs (New) 3.51kB 3.51kB 100.0% 🚀
chunks/cairo_7gDYl5gO.mjs (New) 3.49kB 3.49kB 100.0% 🚀
chunks/json_B8nXmmR-.mjs (New) 3.48kB 3.48kB 100.0% 🚀
chunks/jsonl_Bp0qqr10.mjs (New) 3.42kB 3.42kB 100.0% 🚀
chunks/berry_CgA2ea0_.mjs (New) 3.4kB 3.4kB 100.0% 🚀
chunks/logo_DTXV8SKw.mjs (New) 3.27kB 3.27kB 100.0% 🚀
chunks/openscad_jn-f1Ocl.mjs (New) 3.17kB 3.17kB 100.0% 🚀
chunks/ExamplePreview_v2XfH4Wa.mjs (New) 3.15kB 3.15kB 100.0% 🚀
chunks/log_Dad54gsi.mjs (New) 3.15kB 3.15kB 100.0% 🚀
chunks/DocsSidebar_CaXUyuSS.mjs (New) 3.0kB 3.0kB 100.0% 🚀
chunks/gleam_CTllUdfC.mjs (New) 2.93kB 2.93kB 100.0% 🚀
chunks/diff_Blb4MjsC.mjs (New) 2.89kB 2.89kB 100.0% 🚀
chunks/hy_CJKxDzbh.mjs (New) 2.86kB 2.86kB 100.0% 🚀
chunks/edge_CgYDa_hN.mjs (New) 2.85kB 2.85kB 100.0% 🚀
chunks/TryIt_D4SpEX9b.mjs (New) 2.81kB 2.81kB 100.0% 🚀
chunks/reg_DpJf71oO.mjs (New) 2.64kB 2.64kB 100.0% 🚀
chunks/erb_C8YKatMA.mjs (New) 2.61kB 2.61kB 100.0% 🚀
chunks/jssm_Dx5A5sBR.mjs (New) 2.54kB 2.54kB 100.0% 🚀
_astro/Callout.BOvfkbMv.css (New) 2.48kB 2.48kB 100.0% 🚀
chunks/wenyan_BeysbCrW.mjs (New) 2.43kB 2.43kB 100.0% 🚀
_astro/ExamplePreview.UpcfGuJY.css (New) 2.3kB 2.3kB 100.0% 🚀
chunks/remote_wKUJggQx.mjs (New) 2.24kB 2.24kB 100.0% 🚀
chunks/hxml_D7jA4-jQ.mjs (New) 2.2kB 2.2kB 100.0% 🚀
chunks/fortran-fixed-form_DKmTkb0c.mjs (New) 2.11kB 2.11kB 100.0% 🚀
chunks/desktop_BgOb7Aj4.mjs (New) 2.06kB 2.06kB 100.0% 🚀
_astro/backend-comparison.ZtNk-atA.css (New) 2.0kB 2.0kB 100.0% 🚀
chunks/docker_PC1tuYpa.mjs (New) 1.96kB 1.96kB 100.0% 🚀
chunks/GuidePartRedirect_DS14wVXb.mjs (New) 1.94kB 1.94kB 100.0% 🚀
chunks/ini_C24lZfdM.mjs (New) 1.76kB 1.76kB 100.0% 🚀
chunks/sparql_DGgRGInO.mjs (New) 1.75kB 1.75kB 100.0% 🚀
chunks/index_DLIH60kq.mjs (New) 1.72kB 1.72kB 100.0% 🚀
chunks/xsl_Cw3rM8vE.mjs (New) 1.71kB 1.71kB 100.0% 🚀
chunks/dotenv_Dkdv7Sm2.mjs (New) 1.65kB 1.65kB 100.0% 🚀
chunks/index_CkfMrJQI.mjs (New) 1.61kB 1.61kB 100.0% 🚀
chunks/index_DHnnnthv.mjs (New) 1.61kB 1.61kB 100.0% 🚀
chunks/Callout_BbV8Eo56.mjs (New) 1.58kB 1.58kB 100.0% 🚀
chunks/git-commit_bqpc4DGi.mjs (New) 1.57kB 1.57kB 100.0% 🚀
_astro/TryIt.2vmWUXmI.css (New) 1.56kB 1.56kB 100.0% 🚀
chunks/rolldown-runtime_DC62tzP2.mjs (New) 1.45kB 1.45kB 100.0% 🚀
chunks/index_BGvZMXzc.mjs (New) 1.44kB 1.44kB 100.0% 🚀
chunks/index_jfs0ANM3.mjs (New) 1.44kB 1.44kB 100.0% 🚀
chunks/index_CVGX-usw.mjs (New) 1.41kB 1.41kB 100.0% 🚀
chunks/index_CjnER6rL.mjs (New) 1.41kB 1.41kB 100.0% 🚀
chunks/_symbol__BGaaAuUv.mjs (New) 1.41kB 1.41kB 100.0% 🚀
chunks/_symbol__BxENTr4l.mjs (New) 1.41kB 1.41kB 100.0% 🚀
chunks/compiler_shZbJYNc.mjs (New) 1.34kB 1.34kB 100.0% 🚀
chunks/csv_DqIVFkK7.mjs (New) 1.32kB 1.32kB 100.0% 🚀
chunks/git-rebase_CRs01Nr6.mjs (New) 1.3kB 1.3kB 100.0% 🚀
chunks/index_C51ffy8T.mjs (New) 1.29kB 1.29kB 100.0% 🚀
chunks/index_D5Ub5UFL.mjs (New) 1.29kB 1.29kB 100.0% 🚀
_astro/NextStep.5jphCb2x.css (New) 1.28kB 1.28kB 100.0% 🚀
_astro/example-sources.R3udex29.css (New) 1.26kB 1.26kB 100.0% 🚀
chunks/qmldir_Dz8ttxjf.mjs (New) 1.17kB 1.17kB 100.0% 🚀
chunks/react-utils_DNZ_oAx1.mjs (New) 1.15kB 1.15kB 100.0% 🚀
chunks/html-derivative_UN2HpEjt.mjs (New) 1.13kB 1.13kB 100.0% 🚀
chunks/NextStep_BkemuZCs.mjs (New) 1.06kB 1.06kB 100.0% 🚀
chunks/shellsession_Bbrjk1tD.mjs (New) 995 bytes 995 bytes 100.0% 🚀
chunks/index_DIybAJMv.mjs (New) 992 bytes 992 bytes 100.0% 🚀
chunks/index_eVJKKhkW.mjs (New) 992 bytes 992 bytes 100.0% 🚀
chunks/index_BbhVr7PF.mjs (New) 957 bytes 957 bytes 100.0% 🚀
chunks/index_Cdw72plg.mjs (New) 957 bytes 957 bytes 100.0% 🚀
chunks/index_BMUskQPJ.mjs (New) 935 bytes 935 bytes 100.0% 🚀
chunks/index_DEKhl_dN.mjs (New) 935 bytes 935 bytes 100.0% 🚀
chunks/all_BpeFGbH7.mjs (New) 919 bytes 919 bytes 100.0% 🚀
chunks/all_gWGlzZq5.mjs (New) 919 bytes 919 bytes 100.0% 🚀
chunks/index_CxcXRKKn.mjs (New) 897 bytes 897 bytes 100.0% 🚀
chunks/index_TS51y9rL.mjs (New) 897 bytes 897 bytes 100.0% 🚀
chunks/tsv_BorGVq2Z.mjs (New) 862 bytes 862 bytes 100.0% 🚀
chunks/script_DTUVuBA1.mjs (New) 826 bytes 826 bytes 100.0% 🚀
chunks/codeowners_CxEKPWu0.mjs (New) 666 bytes 666 bytes 100.0% 🚀
chunks/EnglishFallbackNotice_BBaG8NUO.mjs (New) 635 bytes 635 bytes 100.0% 🚀
chunks/vendor-monaco_iXb0Tvg0.mjs (New) 570 bytes 570 bytes 100.0% 🚀
_astro/SourceSnippet.DWw4KFVr.css (New) 529 bytes 529 bytes 100.0% 🚀
chunks/audio-reactive-visualization_CFi17i4A.mjs (New) 381 bytes 381 bytes 100.0% 🚀
chunks/writing-your-own-transition_B0hL_8eq.mjs (New) 381 bytes 381 bytes 100.0% 🚀
chunks/typed-worklets-and-workers_5_2Yj4kL.mjs (New) 380 bytes 380 bytes 100.0% 🚀
chunks/camera-follow-and-parallax_spW9lUok.mjs (New) 379 bytes 379 bytes 100.0% 🚀
chunks/debugging-and-inspection_BJg-m536.mjs (New) 377 bytes 377 bytes 100.0% 🚀
chunks/resize-dpr-and-canvas_C4MxQjKr.mjs (New) 377 bytes 377 bytes 100.0% 🚀
chunks/serialization-and-prefabs_CQCKKfUh.mjs (New) 377 bytes 377 bytes 100.0% 🚀
chunks/authoring-extensions_UUrSGh6o.mjs (New) 369 bytes 369 bytes 100.0% 🚀
chunks/coordinates-and-views_XYwelidA.mjs (New) 369 bytes 369 bytes 100.0% 🚀
chunks/project-structure_G9sLR3ev.mjs (New) 369 bytes 369 bytes 100.0% 🚀
chunks/loading-and-resources_CtMJYSqX.mjs (New) 368 bytes 368 bytes 100.0% 🚀
chunks/audio-reactive-scene_D2IruB0S.mjs (New) 367 bytes 367 bytes 100.0% 🚀
chunks/retained-containers_C1bgNKmg.mjs (New) 367 bytes 367 bytes 100.0% 🚀
chunks/scenes-and-lifecycle_Ce2wJzlF.mjs (New) 367 bytes 367 bytes 100.0% 🚀
chunks/your-first-scene_CsP2VGxQ.mjs (New) 367 bytes 367 bytes 100.0% 🚀
chunks/backend-comparison_cv_7HM3R.mjs (New) 365 bytes 365 bytes 100.0% 🚀
chunks/chords-and-sequences_BlNrmGQY.mjs (New) 365 bytes 365 bytes 100.0% 🚀
chunks/custom-mesh-shaders_sz8zO4UU.mjs (New) 365 bytes 365 bytes 100.0% 🚀
chunks/joints-and-dynamics_cpdVnvew.mjs (New) 365 bytes 365 bytes 100.0% 🚀
chunks/keyboard-and-actions_CYUjmmXC.mjs (New) 365 bytes 365 bytes 100.0% 🚀
chunks/worlds-and-spawning_BY3Pa-bh.mjs (New) 364 bytes 364 bytes 100.0% 🚀
chunks/gameplay-collision_CK_EKvwd.mjs (New) 363 bytes 363 bytes 100.0% 🚀
chunks/grid-pathfinding_BIf27Vfg.mjs (New) 363 bytes 363 bytes 100.0% 🚀
chunks/custom-renderers_BadbEMar.mjs (New) 361 bytes 361 bytes 100.0% 🚀
chunks/waypoint-graphs_Nx_aRR96.mjs (New) 361 bytes 361 bytes 100.0% 🚀
chunks/what-is-exojs_B3xRHTnI.mjs (New) 361 bytes 361 bytes 100.0% 🚀
chunks/mouse-and-pointer_BE8f9cT7.mjs (New) 359 bytes 359 bytes 100.0% 🚀
chunks/troubleshooting_wc2chGSg.mjs (New) 358 bytes 358 bytes 100.0% 🚀
chunks/build-orb-dodge_BcpPbw5P.mjs (New) 357 bytes 357 bytes 100.0% 🚀
chunks/immediate-mode_DM2gdVBU.mjs (New) 357 bytes 357 bytes 100.0% 🚀
chunks/pixel-snapping_C2p-p7vI.mjs (New) 357 bytes 357 bytes 100.0% 🚀
chunks/post-processing_BaqcqumR.mjs (New) 357 bytes 357 bytes 100.0% 🚀
chunks/render-targets_ZuxnwtnL.mjs (New) 357 bytes 357 bytes 100.0% 🚀
chunks/device-variants_BR5O9vb-.mjs (New) 356 bytes 356 bytes 100.0% 🚀
chunks/infinite-maps_3yBNkOsv.mjs (New) 355 bytes 355 bytes 100.0% 🚀
chunks/physics-basics_t6RCyaQB.mjs (New) 355 bytes 355 bytes 100.0% 🚀
chunks/ui-and-widgets_Duu-SiVR.mjs (New) 355 bytes 355 bytes 100.0% 🚀
chunks/typed-shaders_n3zb_-gN.mjs (New) 354 bytes 354 bytes 100.0% 🚀
chunks/beat-detection_g3v-0pkg.mjs (New) 353 bytes 353 bytes 100.0% 🚀
chunks/audio-effects_mEZoVVVI.mjs (New) 351 bytes 351 bytes 100.0% 🚀
chunks/performance_DoPBFnrq.mjs (New) 351 bytes 351 bytes 100.0% 🚀
chunks/spatial-audio_BOUMjtQI.mjs (New) 351 bytes 351 bytes 100.0% 🚀
chunks/split-screen_D6JXWtUg.mjs (New) 351 bytes 351 bytes 100.0% 🚀
chunks/application_b2HeXnei.mjs (New) 349 bytes 349 bytes 100.0% 🚀
chunks/audio-basics_gG7fgZaK.mjs (New) 349 bytes 349 bytes 100.0% 🚀
chunks/hud-overlay_CGtKp3VP.mjs (New) 349 bytes 349 bytes 100.0% 🚀
chunks/scene-graph_B7oA9Ku0.mjs (New) 349 bytes 349 bytes 100.0% 🚀
chunks/ui-patterns_CRTZJjq0.mjs (New) 349 bytes 349 bytes 100.0% 🚀
chunks/deployment_CvOCwJGP.mjs (New) 348 bytes 348 bytes 100.0% 🚀
chunks/animation__vgNAQBp.mjs (New) 347 bytes 347 bytes 100.0% 🚀
chunks/cinematics_go-cgjaH.mjs (New) 347 bytes 347 bytes 100.0% 🚀
chunks/pause-menu_BvGZBN1q.mjs (New) 347 bytes 347 bytes 100.0% 🚀
chunks/tiled-maps_C0kJAbHM.mjs (New) 346 bytes 346 bytes 100.0% 🚀
chunks/game-feel_CKuNfZyr.mjs (New) 345 bytes 345 bytes 100.0% 🚀
chunks/graphics_CJeHwHi7.mjs (New) 345 bytes 345 bytes 100.0% 🚀
chunks/particles_DOixUKrx.mjs (New) 345 bytes 345 bytes 100.0% 🚀
chunks/setup_DF3_h7hG.mjs (New) 345 bytes 345 bytes 100.0% 🚀
chunks/sprites_DKTQLdeB.mjs (New) 343 bytes 343 bytes 100.0% 🚀
chunks/aseprite_BqLsqMz8.mjs (New) 342 bytes 342 bytes 100.0% 🚀
chunks/react_9LoLX2uP.mjs (New) 342 bytes 342 bytes 100.0% 🚀
chunks/filters_B5nYEqj0.mjs (New) 341 bytes 341 bytes 100.0% 🚀
chunks/offline_Cbu3QH1f.mjs (New) 340 bytes 340 bytes 100.0% 🚀
chunks/gamepad_CfELU4fW.mjs (New) 339 bytes 339 bytes 100.0% 🚀
chunks/text_C113jym3.mjs (New) 337 bytes 337 bytes 100.0% 🚀
chunks/ldtk_CIO9YC_5.mjs (New) 334 bytes 334 bytes 100.0% 🚀
_astro/EnglishFallbackNotice.CBJEFTmj.css (New) 279 bytes 279 bytes 100.0% 🚀
chunks/_virtual_astro_server-island-manifest_C1Q2srgE.mjs (New) 217 bytes 217 bytes 100.0% 🚀
chunks/_virtual_astro_session-driver_C-PI1Pas.mjs (New) 165 bytes 165 bytes 100.0% 🚀
chunks/content-assets_DXqEyLLP.mjs (New) 151 bytes 151 bytes 100.0% 🚀
chunks/_noop-middleware_CQ50ikAJ.mjs (New) 100 bytes 100 bytes 100.0% 🚀
chunks/noop-entrypoint_Z3zFhrGC.mjs (New) 99 bytes 99 bytes 100.0% 🚀
_astro/vendor-monaco.ChSLeB7b.js (Deleted) -4.18MB 0 bytes -100.0% 🗑️
_astro/css.worker-BDCmgL4U.js (Deleted) -1.05MB 0 bytes -100.0% 🗑️
_astro/html.worker-DG8hnSJR.js (Deleted) -719.48kB 0 bytes -100.0% 🗑️
_astro/json.worker-CxwlJRnL.js (Deleted) -409.13kB 0 bytes -100.0% 🗑️
_astro/vendor-monaco.CTGdSUG0.css (Deleted) -321.61kB 0 bytes -100.0% 🗑️
_astro/vendor-react.D1OGm6St.js (Deleted) -206.03kB 0 bytes -100.0% 🗑️
_astro/codicon.ngg6Pgfi.ttf (Deleted) -121.97kB 0 bytes -100.0% 🗑️
_astro/ExampleBrowser.Ce3f7gcX.js (Deleted) -32.42kB 0 bytes -100.0% 🗑️
_astro/ExoHeader.B8nrBBs4.js (Deleted) -28.96kB 0 bytes -100.0% 🗑️
_astro/EditorPreview.Cgm-D2Qt.js (Deleted) -21.49kB 0 bytes -100.0% 🗑️
_astro/EditorCode.OKXVoiH5.js (Deleted) -15.74kB 0 bytes -100.0% 🗑️
_astro/EditorCode.CVWGmhtx.css (Deleted) -3.38kB 0 bytes -100.0% 🗑️
_astro/BottomSheet.MRJFuI4E.js (Deleted) -2.67kB 0 bytes -100.0% 🗑️
_astro/BottomSheet.URrhJv5z.css (Deleted) -2.08kB 0 bytes -100.0% 🗑️
_astro/versions.aOfTA5D9.js (Deleted) -1.61kB 0 bytes -100.0% 🗑️
_astro/GuideExamplePreview.CXDwKzRh.js (Deleted) -1.55kB 0 bytes -100.0% 🗑️
_astro/rolldown-runtime.hePW80VL.js (Deleted) -716 bytes 0 bytes -100.0% 🗑️
_astro/react-utils.C-5Q78bo.js (Deleted) -260 bytes 0 bytes -100.0% 🗑️
_astro/client.CfxwAm7Y.js (Deleted) -68 bytes 0 bytes -100.0% 🗑️

App Routes Affected:

App Route Size Change Total Size Change (%)
/de/guide/[part]/[chapter] (New) 1.61kB 1.61kB 100% 🚀
/en/guide (New) 957 bytes 957 bytes 100% 🚀
/de (New) 897 bytes 897 bytes 100% 🚀
/en/benchmarks/physics (New) 1.29kB 1.29kB 100% 🚀
/de/benchmarks/physics (New) 1.29kB 1.29kB 100% 🚀
/de/api (New) 935 bytes 935 bytes 100% 🚀
/de/api/all (New) 919 bytes 919 bytes 100% 🚀
/en/guide/[part] (New) 1.41kB 1.41kB 100% 🚀
/en/api/[symbol] (New) 1.41kB 1.41kB 100% 🚀
/de/guide/[part] (New) 1.41kB 1.41kB 100% 🚀
/de/guide (New) 957 bytes 957 bytes 100% 🚀
/en/api (New) 935 bytes 935 bytes 100% 🚀
/en/benchmarks (New) 992 bytes 992 bytes 100% 🚀
/en/playground (New) 1.44kB 1.44kB 100% 🚀
/de/playground (New) 1.44kB 1.44kB 100% 🚀
/en/guide/[part]/[chapter] (New) 1.61kB 1.61kB 100% 🚀
/de/api/[symbol] (New) 1.41kB 1.41kB 100% 🚀
/ (New) 1.72kB 1.72kB 100% 🚀
/de/benchmarks (New) 992 bytes 992 bytes 100% 🚀
/en (New) 897 bytes 897 bytes 100% 🚀
/en/api/all (New) 919 bytes 919 bytes 100% 🚀

@codecov

codecov Bot commented Sep 11, 2026

Copy link
Copy Markdown

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
14006 1 14005 15
View the top 1 failed test(s) by shortest run time
packages/exojs-pathfinding/test/allocation.test.ts > search allocation > stays within the result budget while expanding far more nodes than it returns
Stack Traces | 0.778s run time
AssertionError: expected 117905.36 to be less than 54600
 ❯ .../exojs-pathfinding/test/allocation.test.ts:131:33

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

Exoridus added 2 commits September 11, 2026 16:35
…and the unit lane

The rendering adapters import @codexo/exojs-particles and
@codexo/exojs-tilemap, whose package entries point at dist. Neither the bench
type-check nor the jsdom unit lane builds the packages, so both resolved
nothing while a tree with a built dist lying around resolved fine.

Mapping the entries to source is not enough on its own for particles: it
resolves its own #* imports through a package imports map whose default arm is
dist/esm/*.d.ts, so the type-check read stale declarations instead of the
sources beside them. @codexo/exojs-particles-source in customConditions is what
steers that map to src.

The unit lane needed the same distinction one level down. Its blanket #* alias
sent #distributions/Curve, imported from inside exojs-particles, into the
engine tree. A resolver that declines for importers inside an extension package
leaves those specifiers to Vite's own imports resolution, which srcConditions
already steers to source; everything else it delegates back through resolution
rather than assuming an extension, so shader specifiers keep working.

Claude-Session: https://claude.ai/code/session_01UWQw3PuiCFjTVJJBY4AHQG
Vitest sizes its fork pool at one worker per core, so the unit lane saturated a
16-core workstation for the three minutes it runs - on every push, since the
pre-push hook runs it. Half the cores costs about 6% wall time here (209s to
197s) because the lane is not purely CPU-bound.

CI keeps the default: its runners have few cores and nothing else to serve.
EXOJS_TEST_MAX_WORKERS overrides both.

Claude-Session: https://claude.ai/code/session_01UWQw3PuiCFjTVJJBY4AHQG
@Exoridus
Exoridus merged commit b49242e into next Sep 11, 2026
38 of 40 checks passed
@Exoridus
Exoridus deleted the feat/bench-workload-catalog branch September 11, 2026 15:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant