Welcome to the Hangar Open Beta. Please report any issue you encounter on GitHub!
Avatar for sya-ri

Kotlin UI library connecting Paper, Folia, and Velocity plugins with the matching Strata Fabric client mod.

Report Strata?

R

0.2.3

Strata 0.2.3

Strata 0.2.3 reduces retained UI, layout, text and image-processing work, adds native item tooltips to bound Slots, and corrects high-contrast widget rendering. These notes describe changes from public 0.2.2. Keep all Strata artifacts on version 0.2.3 and install the Fabric runtime for your exact Minecraft version.

Performance comparison

These observations compare the actual Maven Central 0.2.2 API, core and headless JARs with the candidate built from b8cbd59f2. Each time/allocation value below is the shared testkit's median of three independent AverageTime invocations on the same Windows 11 workstation with OpenJDK 25.0.2 and fixed compiled fixtures, collector, harness and external libraries.

Operation 0.2.2 (µs/op) 0.2.3 (µs/op) Time change Allocation: 0.2.2 → 0.2.3 (B/op)
Clean timed frame, 1920×1080 0.064961 0.050676 -22.0% 112 → 32
Dirty retained frame, 1920×1080 14.506 13.767 -5.1% 62153 → 57865
Fresh CPU raster, 1920×1080 826.709 817.999 -1.1% 8294814 → 8295153
PNG encode, 1024×1024 2165.252 1360.872 -37.1% 12587021 → 4195851

Negative time changes mean less time; percentages use unrounded medians. Clean-frame allocation falls from 112 to 32 B/op, and 1024×1024 PNG allocation falls from 12.59 to 4.20 MB/op. Fresh Full HD raster allocation increases by about 339 B/op.

SampleTime p95 for the 320×180 CPU raster rises from 24.576 to 25.472 µs (+3.6%); Full HD raster p99 rises from 1640.243 to 1670.349 µs (+1.8%). These are medians of three per-run percentiles, separate from AverageTime scores. The release PR contains all 18 conditions, absolute time/allocation/latency deltas, archive identities, raw-evidence links and the complete Standard settings.

This sample covers JVM retained frames, fresh CPU rasters and PNG operations; it does not measure Minecraft presentation, GPU completion, FPS, input-to-display latency or browser performance. PNG decoding uses unchanged JDK ImageIO as a control, and allocation is bytes allocated per operation rather than retained heap. Work, upload, GPU and thread-CPU metrics are unavailable in this matrix. These observed changes have no significance-test or cross-machine interpretation.

Minecraft presentation

  • Hovering a populated bound Slot in the active screen shows the complete vanilla item tooltip, including native item-provided content, advanced-tooltip settings and positioning near screen edges. Updates to the bound stack are reflected while the pointer stays still. Native carried-item eligibility still applies; highlightable controls the highlight independently. Unbound Slots can use the ordinary Tooltip component for application content. See screens and state.
  • Widget profiles read sprite scaling metadata from the active resource pack so buttons and slider handles preserve the built-in high-contrast pack's borders. Newly opened screens use the selected pack after a resource reload.
  • Exact sampled-image adapters also handle horizontal, vertical and combined reflection with opaque-white tint and zero cutoff. Other combinations retain ordered CPU composition where required for exact pixels; this does not enable every tint or cutoff on the GPU.
  • Portable composition reuses unchanged paint branches and raster tiles, shares preparation and upload ownership, and reduces repeated sampled-source calculations. Native resource retirement waits for the corresponding Vulkan work to complete.

Retained UI, text and images

  • Retained traversal skips unrelated branches and empty child-matching work. Identical immutable modifier chains, small semantics payloads, container construction, Canvas membership and image templates avoid unnecessary intermediate copies or bookkeeping.
  • Grid layout reuses measured track extents, and VirtualList reuses unchanged visible row declarations as its window moves. Existing ordering, keys, layout and state ownership remain intact.
  • TextArea insertion lookup is bounded to the relevant line. Text composition, caret arrays, glyph raster storage and text-ink aggregation avoid redundant temporary storage while preserving Unicode editing and immutable output.
  • CPU rasterization shares exact sampled-source weights, avoids unnecessary work for nonpainting commands and writes deterministic PNGs directly into their final storage.
  • createDrawImage(size, pixelAt) generates an immutable image directly into private storage. The callback runs synchronously once per pixel in row-major order and is not retained; the existing array overload still copies caller-owned pixels.

Remote screens and lifecycle

  • Bounded transport and command drains stop at the first empty result or missing next sequence while preserving tick deadlines and outgoing work. Freshly decoded private fragments can transfer into native reorder queues without a second queue copy; public frame inputs retain their defensive-copy behavior.
  • Remote editable membership follows current retained entries, and terminal presentation-state closure cannot reopen admission during callbacks. Font owners also remain closed across reentrant backend callbacks.
  • Root-overlay anchors enforce the owning layout scope and its lifetime, rejecting anchors used from another scope or after that scope expires.

Authoring and performance tools

The optional Detekt DiscardedModifier rule recognizes modifier values used by if, when and try expressions, avoiding false positives for returned or assigned conditional chains. Unused branches, nonterminal expressions, finally results and Unit callbacks remain checked. See the authoring checks guide.

The responsive panel example demonstrates centering a panel and switching between half-size and full-size layout from current viewport constraints using the public Modifier SPI. It is application composition and does not add a specialized built-in component.

Production artifacts no longer expose internal render monitors, diagnostic node identities, work observers or cumulative native presentation counters. The optional testkit measures elapsed time, CPU time, allocation and frame/GPU observations externally where the selected environment supports them. Work and upload metrics that the runtime does not expose are reported as unavailable.

The shared performance testkit adds opt-in GPU-completion measurement on supported native adapters, more precise artifact provenance, optional per-operation JVM reports and paired JVM/browser comparison tooling. Reports keep fixture and collector identities, unavailable metrics, unchanged controls and regressions visible; quick runs remain separate from standard evidence. See the performance testkit for collection and comparison contracts.

Upgrade

Update Maven dependencies, the installed Fabric runtime and any Paper/Folia or Velocity plugin together to 0.2.3. Existing application screen definitions and remote protocol messages require no migration from 0.2.2. The supported Minecraft version matrix is unchanged; Minecraft 1.20 remains the release floor. Update optional strata-detekt-rules and performance-testkit dependencies to the same release.

Runtime bridges marked InternalStrataRuntimeApi are opt-in implementation contracts; applications should continue using ordinary immutable images and public screen APIs. Code that used RuntimeUiDiagnosticsOwner, UiRenderMonitor or startRenderMonitoring() must remove those calls and move measurement into test-owned wrappers or the optional performance testkit. Production sessions and Minecraft hosts no longer provide those diagnostic entry points. Use performance measurement boundaries to choose an external observation boundary. The testkit can read legacy counters from older runtimes, but missing current counters remain unavailable and cannot satisfy strict work expectations.

Consumers implementing the Minecraft 26.3 FabricVulkanDestroyedResource bridge must also implement strataDestroyCompletedResource() and establish GPU completion before calling it. Rendering improvements depend on the selected commands and adapter, and do not imply a universal FPS improvement.

Information

Published
October 17, 2026
Author
0Downloads

Platforms

Paper
Paper
1.20–26.3
Velocity
Velocity
4.2.0