promotional bannermobile promotional banner

Strata UI

Declarative, reusable Minecraft UI with headless rendering and exact versioned Fabric adapters.
Back to Files

Strata 0.2.2 for Minecraft 26.1

File namestrata-runtime-minecraft-fabric-26.1-0.2.2.jar
Uploader
sya_risya_ri
Uploaded
Oct 6, 2026
Downloads
5
Size
2.6 MB
Mod Loaders
Fabric
File ID
9076219
Type
R
Release
Supported game versions
  • 26.1

Curse Maven Snippet

Fabric

modImplementation "curse.maven:strata-ui-1707720:9076219"

Learn more about Curse Maven

What's new

Strata 0.2.2

Strata 0.2.2 reduces retained-frame, text-editing, CPU rasterization, and Minecraft presentation costs, and publishes a shared performance testkit for library and application developers. Keep all Strata artifacts on version 0.2.2 and install the Fabric runtime for your exact Minecraft version.

Rendering and retained UI

  • Clean timed frames reuse the current tree's callback capabilities instead of walking every passive node. Structural changes, time-aware callbacks, invalidation, and terminal cleanup retain their original behavior.
  • Dense repeated image blits can use bounded pixel templates, including multi-texel patterns. Fractional or reflected transforms, mixed primitives, invalid grids, and patterns outside the admitted bounds retain the original drawing path.
  • CPU composition avoids repeated coordinate/color calculations and reuses exactly equal sampled rows. Opaque, translucent, patterned, tinted, and clipped inputs keep their existing pixel equations.
  • Minecraft presenters reuse unchanged frame inputs and shifted layers, omit wholly invisible portable inputs, bound raster regions to visible work, and share scratch pixels only within one preparation. Each native upload retains independent owned storage.
  • Supported modern adapters use bounded lookup metadata to select the same source texels as CPU sampling. Minecraft 26.3 samples the source in the GUI pass; other supported modern adapters materialize an exact GPU output. Unsupported tint, cutoff, orientation, clipping, and legacy adapter combinations retain CPU fallback.
  • Long TextField measurement and cursor positioning avoid repeatedly copying and measuring prefixes. Unicode scalar boundaries, custom-font metrics, native rounding, IME, selection, and input behavior remain intact.
  • Resource identifier validation and remote value/tree processing reduce transient allocation while preserving admission limits, validation failures, and communication contracts.

Measured changes from 0.2.1

Operation Before (0.2.1) After (0.2.2 candidate) Time reduction (%)
Retained clean timed frame, Full HD 0.578 µs 0.062 µs 89.3%
Fresh CPU composition, patterned 64×64 source, Full HD 38.264 ms 1.191 ms 96.9%
Fresh CPU composition, translucent 1×1 source, Full HD, density 4 48.794 ms 1.089 ms 97.8%
Fresh CPU composition, translucent patterned 1024×1024 source, Full HD 49.037 ms 12.787 ms 73.9%

These are medians of three independent AverageTime runs per side. Time reduction is (Before − After) / Before × 100; positive values mean faster operations. Ordinary Full-HD rasterization was nearly unchanged: 0.822 ms Before and 0.807 ms After (1.8% average-time improvement); the measured p95 values increased for the ordinary raster fixtures, so this is not a blanket speedup. Fresh full-HD outputs still allocate about 8.3 MB per operation, and some sampled-image cases allocate roughly 8–19 KB more for bounded sampling scratch state. Retained clean-frame allocation in this fixture remains about 112 B per operation. The full comparison includes all 24 selected cases, p50/p95/p99, and allocation; remaining cost and regressions are tracked below.

These measurements use the actual Maven Central 0.2.1 JARs and the final optimized runtime source, with identical compiled fixtures, collector, JMH harness, machine, Java, and standard iteration settings. They measure JVM retained-frame and fresh CPU-raster operations; they do not establish GPU completion time or a universal FPS improvement. The complete comparison below records the selected matrix, conditions, binary identities, and remaining limits.

Shared performance testkit

The test-only artifact dev.s7a.strata:strata-performance-testkit:0.2.2 centralizes JVM collection, CPU/allocation/GC evidence, runtime work assertions, native presentation counters, and validated summaries/comparisons. The multiplatform artifact is dev.s7a.strata:strata-performance-testkit-multiplatform:0.2.2. Consumers provide their real UI or server fixtures, actions, readiness predicates, and expected work through the testkit contracts. JVM measurement, validation, aggregation, and comparison run in Java without a Python runtime requirement. Quick investigation and change-scoped selection have separate receipt identities and cannot replace standard acceptance. The kit is a new optional testing dependency; existing screens do not need to adopt it to upgrade.

UI authoring guidance

The Strata skill keeps everyday component, modifier, content-slot, and state-ownership decisions in its entrypoint, with conditional references for inventory styling, remote extensions, and retained custom components. Independent empty-project exercises cover standard controls, virtualized lists, shared application-local components, and an interactive primitive with its own drawing. The authoring checks guide describes nine opt-in, type-aware Detekt rules covering retained-state creation and mutation, manual subscriptions, immutable modifier use and forwarding, parent-data placement, flat root counts, and runtime/opening boundaries. Install dev.s7a.strata:strata-detekt-rules:0.2.2 through detektPlugins and enable the strata rule set with the compatible Detekt version. The guide explains each rule with compiled incorrect and corrected examples and its detection limits; responsibility and rendered-tree review remain necessary.

Known limits and follow-up work

Performance depends on command composition and adapter support; some changing-image and list intervals still take longer despite lower allocation. Remaining work is tracked as general rendering and testkit issues:

Upgrade

Update Maven dependencies and the installed Fabric runtime together to 0.2.2. Existing screen definitions and remote communication contracts require no migration from 0.2.1. The supported Minecraft version matrix is unchanged. Runtime diagnostics add an optional bounded node-record capacity; the existing no-argument monitoring API retains its defaults.

Complete performance comparison

This compares Maven Central 0.2.1 with the final optimized runtime source in commit dc0f0cf32bc900bbd313b6dc4c8b40cd034e84dd, merged as 9f7078cb3243b87b3be507b50c8c42ee061b7f46. The candidate archives were built from that source before the release version change; only release metadata and documentation changed afterward. The baseline is the actual public binary distribution, not an intermediate optimization PR.

Conditions and coverage

  • Windows 11, amd64, 32 logical processors; OpenJDK 25.0.2. The same machine and Java were used on both sides, with no overlapping builds or other benchmark invocations.
  • The same compiled JMH fixtures, harness, shared collector, generated parameter matrix, and external input archives. The shared kit verified actual parent/fork origins and preserved the measured target, harness, collector, and input archives.
  • AverageTime and SampleTime each ran three independent invocations per side, with three one-second warm-up iterations, five one-second measurement iterations, one fork, one thread, microsecond units, and the GC profiler.
  • All 24 selected cases completed in each invocation. Both modes passed shared-kit summaries and comparisons. The original complete historical corpus and its acceptance contract were unchanged.
  • Retained timed frames and ordinary rasterization use all three registered viewports. Sampled rasters use both registered physical sizes, both densities, and opaque/translucent/patterned sources. Dense rasters use all three source resolutions and both alpha varieties.
  • Source construction, resource acquisition and PNG/hash verification are outside measurement. All 21 raster fixture outputs matched public 0.2.1 byte-for-byte as deterministic PNGs.

The selected methods are RenderingBenchmark.cleanTimedUiSessionFrame, RenderingBenchmark.headlessRasterization, SampledRasterBenchmark.composition, and DenseSampledRasterBenchmark.composition. Their unchanged public-contract fixtures live in quality/benchmarks. The shared JmhWorkloadInventory expands the generated registry, JmhPerformanceRunner delegates execution to JMH, and PerformanceEvidenceCli validates and compares the independent receipts. These measurements do not certify every feature, input combination, host, or future extension.

Results

Before is the public Maven Central 0.2.1 distribution. After is the optimized 0.2.2 candidate. Average time and allocation are the shared kit's medians of three independent per-run scores. Percentiles are its medians of three per-run SampleTime percentiles. Reduction (%) = (Before − After) / Before × 100. Positive values mean less time or allocation; negative values mean a regression. Percentages are rounded to one decimal place; 0.0% can include a small change. These figures describe this selected fixture matrix and host. They are not FPS measurements, significance tests, or CI thresholds.

Clean retained timed frames

An unchanged retained UI receives a new frame time. The viewport varies; no fresh full-screen raster is created.

Condition Before (µs/op) After (µs/op) Time reduction (%)
Compact (320×180) 0.579 0.063 89.1%
Full HD (1920×1080) 0.578 0.062 89.3%
Windowed (854×480) 0.569 0.062 89.1%
<details> <summary>Percentiles and allocation: Before, After, Reduction (%)</summary>

Percentile times use µs/op. Allocation uses B/op; lower values are better for both metrics.

Condition Metric Before After Reduction (%)
Compact (320×180) p50 0.600 0.100 83.3%
Compact (320×180) p95 0.600 0.100 83.3%
Compact (320×180) p99 0.800 0.200 75.0%
Compact (320×180) Allocation (B/op) 112 112 0.0%
Full HD (1920×1080) p50 0.600 0.100 83.3%
Full HD (1920×1080) p95 0.600 0.100 83.3%
Full HD (1920×1080) p99 0.800 0.200 75.0%
Full HD (1920×1080) Allocation (B/op) 112 112 0.0%
Windowed (854×480) p50 0.600 0.100 83.3%
Windowed (854×480) p95 0.600 0.100 83.3%
Windowed (854×480) p99 0.800 0.200 75.0%
Windowed (854×480) Allocation (B/op) 112 112 0.0%
</details>

Ordinary fresh CPU rasterization

The ordinary rendering fixture produces a newly owned raster at each registered viewport. Average time is almost unchanged here, while sampled tail latency increases.

Condition Before (µs/op) After (µs/op) Time reduction (%)
Compact (320×180) 20.402 20.904 -2.5%
Full HD (1920×1080) 821.937 806.867 1.8%
Windowed (854×480) 126.701 126.704 0.0%
<details> <summary>Percentiles and allocation: Before, After, Reduction (%)</summary>

Percentile times use µs/op. Allocation uses B/op; lower values are better for both metrics.

Condition Metric Before After Reduction (%)
Compact (320×180) p50 19.072 21.280 -11.6%
Compact (320×180) p95 24.096 42.560 -76.6%
Compact (320×180) p99 45.696 61.229 -34.0%
Compact (320×180) Allocation (B/op) 230760 230808 0.0%
Full HD (1920×1080) p50 758.784 784.384 -3.4%
Full HD (1920×1080) p95 1009.664 1128.448 -11.8%
Full HD (1920×1080) p99 1519.145 1662.075 -9.4%
Full HD (1920×1080) Allocation (B/op) 8296526 8294814 0.0%
Windowed (854×480) p50 117.248 131.328 -12.0%
Windowed (854×480) p95 159.488 291.328 -82.7%
Windowed (854×480) p99 243.200 361.472 -48.6%
Windowed (854×480) Allocation (B/op) 1641801 1640089 0.1%
</details>

Sampled-image CPU composition

A tinted, fractionally placed sampled image produces a fresh 16:9 output. Opaque/translucent inputs are 1×1 sources; patterned inputs contain spatially varying RGB values in a 64×64 source. Output width and final density vary independently.

Condition Before (ms/op) After (ms/op) Time reduction (%)
1920px output width; opaque; density 1 36.471 0.958 97.4%
320px output width; opaque; density 1 1.031 0.020 98.1%
1920px output width; pattern; density 1 38.264 1.191 96.9%
320px output width; pattern; density 1 1.028 0.052 94.9%
1920px output width; translucent; density 1 48.416 1.089 97.8%
320px output width; translucent; density 1 1.320 0.023 98.2%
1920px output width; opaque; density 4 37.068 0.972 97.4%
320px output width; opaque; density 4 1.061 0.020 98.1%
1920px output width; pattern; density 4 36.725 1.197 96.7%
320px output width; pattern; density 4 1.022 0.053 94.8%
1920px output width; translucent; density 4 48.794 1.089 97.8%
320px output width; translucent; density 4 1.318 0.024 98.2%
<details> <summary>Percentiles and allocation: Before, After, Reduction (%)</summary>

Percentile times use ms/op. Allocation uses B/op; lower values are better for both metrics.

Condition Metric Before After Reduction (%)
1920px output width; opaque; density 1 p50 36.635 0.920 97.5%
1920px output width; opaque; density 1 p95 37.942 1.180 96.9%
1920px output width; opaque; density 1 p99 39.149 1.761 95.5%
1920px output width; opaque; density 1 Allocation (B/op) 8294906 8294701 0.0%
320px output width; opaque; density 1 p50 0.994 0.019 98.1%
320px output width; opaque; density 1 p95 1.118 0.026 97.7%
320px output width; opaque; density 1 p99 1.440 0.051 96.5%
320px output width; opaque; density 1 Allocation (B/op) 230639 230664 0.0%
1920px output width; pattern; density 1 p50 36.766 1.165 96.8%
1920px output width; pattern; density 1 p95 38.211 1.577 95.9%
1920px output width; pattern; density 1 p99 39.296 2.142 94.5%
1920px output width; pattern; density 1 Allocation (B/op) 8294920 8305542 -0.1%
320px output width; pattern; density 1 p50 0.996 0.050 95.0%
320px output width; pattern; density 1 p95 1.171 0.066 94.4%
320px output width; pattern; density 1 p99 1.444 0.116 91.9%
320px output width; pattern; density 1 Allocation (B/op) 230630 234976 -1.9%
1920px output width; translucent; density 1 p50 48.431 1.059 97.8%
1920px output width; translucent; density 1 p95 49.676 1.657 96.7%
1920px output width; translucent; density 1 p99 50.578 2.270 95.5%
1920px output width; translucent; density 1 Allocation (B/op) 8294989 8302446 -0.1%
320px output width; translucent; density 1 p50 1.296 0.022 98.3%
320px output width; translucent; density 1 p95 1.475 0.041 97.2%
320px output width; translucent; density 1 p99 1.829 0.062 96.6%
320px output width; translucent; density 1 Allocation (B/op) 230665 231960 -0.6%
1920px output width; opaque; density 4 p50 36.504 0.959 97.4%
1920px output width; opaque; density 4 p95 38.008 1.483 96.1%
1920px output width; opaque; density 4 p99 39.460 2.002 94.9%
1920px output width; opaque; density 4 Allocation (B/op) 8294910 8294730 0.0%
320px output width; opaque; density 4 p50 0.986 0.019 98.1%
320px output width; opaque; density 4 p95 1.143 0.026 97.7%
320px output width; opaque; density 4 p99 1.392 0.050 96.4%
320px output width; opaque; density 4 Allocation (B/op) 230630 230696 0.0%
1920px output width; pattern; density 4 p50 36.438 1.325 96.4%
1920px output width; pattern; density 4 p95 37.614 2.191 94.2%
1920px output width; pattern; density 4 p99 38.967 2.556 93.4%
1920px output width; pattern; density 4 Allocation (B/op) 8294908 8305574 -0.1%
320px output width; pattern; density 4 p50 0.985 0.050 94.9%
320px output width; pattern; density 4 p95 1.102 0.065 94.1%
320px output width; pattern; density 4 p99 1.342 0.118 91.2%
320px output width; pattern; density 4 Allocation (B/op) 230629 235008 -1.9%
1920px output width; translucent; density 4 p50 48.366 1.038 97.9%
1920px output width; translucent; density 4 p95 50.246 1.478 97.1%
1920px output width; translucent; density 4 p99 53.269 2.031 96.2%
1920px output width; translucent; density 4 Allocation (B/op) 8294989 8302478 -0.1%
320px output width; translucent; density 4 p50 1.282 0.022 98.3%
320px output width; translucent; density 4 p95 1.443 0.031 97.8%
320px output width; translucent; density 4 p99 1.769 0.063 96.5%
320px output width; translucent; density 4 Allocation (B/op) 230656 231992 -0.6%
</details>

Dense patterned-image CPU composition

A tinted, fractionally placed patterned image is composed over an opaque 1920×1080 destination. Both alpha variants use spatially varying RGB values. Source detail varies independently of output area.

Condition Before (ms/op) After (ms/op) Time reduction (%)
1024×1024 source; opaque 37.747 5.787 84.7%
1024×1024 source; translucent 49.037 12.787 73.9%
256×256 source; opaque 37.270 1.704 95.4%
256×256 source; translucent 49.049 2.593 94.7%
64×64 source; opaque 37.032 1.183 96.8%
64×64 source; translucent 48.996 1.381 97.2%
<details> <summary>Percentiles and allocation: Before, After, Reduction (%)</summary>

Percentile times use ms/op. Allocation uses B/op; lower values are better for both metrics.

Condition Metric Before After Reduction (%)
1024×1024 source; opaque p50 37.290 6.103 83.6%
1024×1024 source; opaque p95 39.073 7.161 81.7%
1024×1024 source; opaque p99 39.788 8.058 79.7%
1024×1024 source; opaque Allocation (B/op) 8294960 8305536 -0.1%
1024×1024 source; translucent p50 48.366 12.804 73.5%
1024×1024 source; translucent p95 49.860 13.885 72.2%
1024×1024 source; translucent p99 57.213 15.178 73.5%
1024×1024 source; translucent Allocation (B/op) 8295043 8306627 -0.1%
256×256 source; opaque p50 36.831 1.650 95.5%
256×256 source; opaque p95 38.407 2.109 94.5%
256×256 source; opaque p99 39.209 2.624 93.3%
256×256 source; opaque Allocation (B/op) 8294958 8305548 -0.1%
256×256 source; translucent p50 48.693 2.552 94.8%
256×256 source; translucent p95 50.070 3.129 93.8%
256×256 source; translucent p99 50.894 3.557 93.0%
256×256 source; translucent Allocation (B/op) 8295042 8314290 -0.2%
64×64 source; opaque p50 36.864 1.159 96.9%
64×64 source; opaque p95 38.342 1.503 96.1%
64×64 source; opaque p99 40.436 2.075 94.9%
64×64 source; opaque Allocation (B/op) 8294956 8305541 -0.1%
64×64 source; translucent p50 48.628 1.327 97.3%
64×64 source; translucent p95 50.397 1.726 96.6%
64×64 source; translucent p99 51.881 2.228 95.7%
64×64 source; translucent Allocation (B/op) 8295042 8314282 -0.2%
</details>

Measured binary identities

<details> <summary>Artifact hashes and collector provenance</summary>

Public archives were downloaded from Maven Central and checked against its SHA-512 sidecars before collection. SHA-256 below identifies the actual measured bytes.

Side Artifact SHA-256
Before strata-api 18c655f867f2219c0e753fdf5327edc89abba3be49f39fd677348aa3b6cee734
After strata-api 8e9abdff92f0ef871f794ae918bc6263946e57f44b4d68b601a61241d07b2741
Before strata-runtime-core 618068f5fd3f7bcd14b836f14b0afacecb84abd7897169db5dea9d6912de8fd4
After strata-runtime-core 802c5a7f32e47d2bc162ad3f29a4771f3da2714bb5d5bede0893c7b44a4e4526
Before strata-runtime-headless 4d592b3cb639525eaeaffdbedd07f02149e407a6be6e498c1350938cc95b372e
After strata-runtime-headless a007ee612f4009713934e18a2beffc7ccc96235fd7ef08c1fbb0967c481a44e2

Shared collector SHA-256: 39daae392e7c23d04374e61aefee6ab64e9b9fa74f29ffbc89b018d5d494b3ea.

</details>

Interpretation

These are JVM retained-frame and fresh CPU-raster costs. They do not measure Minecraft GPU completion or imply a universal FPS, allocation, or GC improvement. Larger patterns and translucent outputs remain represented in the complete table; the headline examples are not the entire corpus. Other loaded-client evidence found changing-image/list intervals with increased preparation time, and some image combinations still select CPU fallback. Those results used the preceding tested optimization baseline rather than public 0.2.1 and are not included as 0.2.1-relative gains here.

See the performance testkit for collection and acceptance contracts. Absolute timings are not CI pass/fail thresholds.

This mod has no additional files