Strata 0.3.1 for Minecraft 26.2
Curse Maven Snippet
What's new
Strata 0.3.1
Strata 0.3.1 adds parent-sized virtual lists, bounds browser image allocation, reduces repeated editor-frame encoding, and hardens subscription and remote-session cleanup. These notes describe changes from public 0.3.0.
Upgrade requirements
Update Strata artifacts together to 0.3.1 and keep the Fabric runtime matched to the exact Minecraft version.
Fabric clients and Fabric servers must also update Fabric Language Kotlin to meet the minimum declared in the installed Strata runtime's fabric.mod.json.
The Kotlin compiler patch and Fabric Language Kotlin dependency advance together; the release version catalog owns their exact versions.
Gradle consumers should retain the published Kotlin dependency metadata when resolving the API and runtime libraries.
Java source that explicitly calls ObservedComponentsKt must migrate to the per-component JVM facade when recompiling, as described below.
Parent-sized VirtualList
The new VirtualList overloads can omit viewportSize and use the finite width and height allocated by the parent.
For a list below fixed content in a bounded Column, Modifier.weight(1f) assigns the remaining height before rows are constructed.
The list keeps its caller-owned state through resize and continues to construct only the visible window and overscan rows.
A zero allocation constructs no rows; an unbounded axis fails explicitly.
The explicit viewportSize overload retains its exact-size behavior.
Declaration-only remote hosts must continue to supply that explicit viewport because they do not perform local layout.
See the layout guide.
Browser images and editors
Highly zoomed images previously allocated their full destination bitmap before clipping, which could exceed the physical pixel budget and close the Web host even when the visible region was small. Image rasterization now allocates only covered pixels within the destination, clip and viewport intersection. Fully invisible images release their bitmap without requesting image data. The original source mapping, image orientation, tint, alpha cutoff and physical pixel limit remain in effect. The shared path covers sampled images and both logical and physical blits, including fractional clipping.
TextField and TextArea hosts reuse encoded PNG frames while those frame images remain displayed by the same host, avoiding repeated encoding during content updates and resizing. Encodings for inactive images are removed, and closing the host releases the remaining encodings. Temporary canvases are released even when PNG conversion fails. Closing a Web host inside an input callback now lets the admitted input operation complete before subscriptions, DOM children and listeners are released.
See the browser guide for resource ownership and input boundaries.
Subscription and session cleanup
- Mapped
StateSourcesubscriptions no longer deadlock when an observer closes its subscription while another thread is closing it. An already admitted callback may still finish after close. - Minecraft PlayerHead and Slot release acquired bindings when initialization or cleanup fails, and preserve the original failure if cleanup also throws.
- Invalid remote screen titles close their pending handles, and queued shutdown still completes when error reporting fails.
- Remote screen replacement stops before evaluating a pending definition when a close listener disconnects, reconnects or shuts down the service. Promoting a HUD to a screen preserves a single foreground even when a close listener opens another screen.
- A remote close rejected during UI evaluation preserves the session for later owner cleanup. Rejected owner withdrawal preserves extension registrations so a later retry can retire dependent screens.
- Velocity shutdown stops admitting queued UI work and pending input processing.
Already admitted operations may finish; queued API requests fail with
OwnerClosed.
JVM facade migration
Source-backed component overloads now use a JVM facade per component, such as ObservedButtonComponentsKt or ObservedVirtualListComponentsKt.
Ordinary Kotlin DSL calls retain the same package and parameter lists; recompilation selects the new owner automatically.
Already compiled JVM callers continue to link through deprecated forwarding methods and default-argument helpers on ObservedComponentsKt.
These bridges are hidden from new Kotlin and Java source calls and remain until their scheduled removal in 1.0.0.
Java source that explicitly names the old facade must select the matching per-component facade when recompiling; signature-derived method names and arguments remain the same.
See the deprecation list and Java migration example.
This mod has no additional files

