Changelog
Per-release notes for Loom: the Unity package, bridge runtime, and Vite plugin.
Releases
1.0.0
October 23, 2026
- Official release.
0.20
October 17, 2026
- Fixed the UI turning black when bridge data contains null objects, such as empty HUD player slots. Null entries now keep their positions in lists and their keys in maps, and nested null fields are preserved.
- Bridge decoding and UI update errors now report the original error and the affected message. The embedded UI stops on these errors instead of repeatedly reconnecting; reload the UI after fixing the error.
- Fixed actions with malformed results leaving their promises pending. They now reject with the decoding error.
0.19
October 13, 2026
- Fixed bridge compilation and registration after code reloads in Unity 6.7.
- Fixed UI setup, dependency installation, dev-server startup, player UI builds, and Doctor checks failing to launch shell commands in macOS Editors using CoreCLR.
- Removed Loom compiler warnings in Unity 6000.4 and newer.
- Browser DevTools now uses the fixed address
127.0.0.1:6080. Open Browser DevTools reports when DevTools is disabled and explains when you need to reopen Unity to enable it. - Updated setup and runtime errors with recovery steps for missing rendering dependencies and failed bridge generation. After manually syncing UI dependencies, Loom now directs you to restart the dev server to load them.
0.18
September 12, 2026
- Fixed an idle UI disappearing between updates or during Game view repaints on Direct3D 11.
- Fixed bridge actions from an external Editor browser stopping after repeated reconnects or a burst of action calls.
- Local UI asset serving now rejects requests for files outside the configured UI directory, including paths through symbolic links.
0.17
September 5, 2026
- Match Screen resolution now follows the target camera’s pixel dimensions, including partial viewports and RenderTexture targets. High-DPI scaling no longer unnecessarily multiplies the UI render resolution, and pointer input stays aligned at fractional display scales.
- Reduced CPU work and allocations for large reactive collection replacements and frequent bridge state updates. Batched changes preserve their original order.
- Hidden and offscreen live RenderTexture images no longer trigger unnecessary UI paints or image copies. Visible images continue updating automatically.
- Live images now recover when the same RenderTexture is released and recreated, without requiring you to reassign the bridge property.
- Improved rendering resource cleanup during resizes and live-image changes on Metal and Direct3D 12.
- Fixed the UI disappearing when the Editor repaints a paused or unfocused Game view.
0.16
August 15, 2026
- Loom GUI supports Unity
6000.3.0f1or newer with URP17.3.0or newer: Windows x86-64 using Direct3D 11 or Direct3D 12, and macOS Apple Silicon using Metal. - Added the Getting Started sample with a C# bridge, a Solid UI, and setup instructions.
- Generated TypeScript actions return promises, including synchronous C# actions, and the bundled UI starter includes typed mock actions that can update state without Unity.
- Standard HTML inputs and textareas now receive platform-resolved text on Windows and macOS, including shifted, alternate-layout, accented, and committed Unicode characters. Editing keys continue to behave normally.
- Added standard browser Gamepad API support for Unity Input System controllers.
Pages can use
navigator.getGamepads()and connection events while Unity gameplay observes the same devices. This release reports the standard layout without vibration. - Added controller menu navigation through
NavigationProviderandNavigationScope. Loom finds HTML controls automatically and chooses the next control by position, with optional directional overrides. Menus can remember focus, restore it after closing a submenu, and move it when a control becomes disabled. Submit/back buttons are configurable, and text fields keep their normal editing behavior. - Configured Loom projects now stop a player build when the UI source,
generated bridge files, built
index.html, URP renderer feature, target architecture, or graphics API would produce a player without a working UI. - The Unity package now includes the supported precompiled native plug-ins and matching bridge and Vite tooling. Customer projects do not need the Loom source repository, Rust, or a native compiler.
- Consolidated the Unity Editor commands under Tools > Loom and updated setup, Doctor, native plug-in, and version-mismatch messages with direct recovery steps.
- Added package links to the complete online documentation, changelog, license,
and
support@snack.onl. - UI development and player builds require Node.js 22 or 24 LTS with npm 10 or 11. Initial UI setup downloads third-party dependencies from the public npm registry; Loom’s matching packages are bundled with the Unity package.
0.15
August 13, 2026
- Fixed text inputs and other editable controls sometimes losing focus immediately after being clicked in the embedded UI.
- Added optional keyboard focus navigation through
LoomRuntime.KeyboardMode. The defaultGameplaymode keeps Tab available to the game without moving DOM focus;Navigationenables normal Tab and Shift+Tab traversal through eligible controls. Keyboard events remain available to Unity in both modes, so games can switch their action map and Loom’s keyboard mode together. - A Tab key used to open a menu no longer also advances focus into that menu. UI code can request the mode change through a bridge action.
0.14
August 11, 2026
- Unity textures can now appear directly in your Loom UI. Inventory icons,
character portraits, texture previews, live minimaps, and camera feeds can
come from
Texture2D,Sprite, orRenderTexturebridge state. Render the generatedLoomImageSourcewith the newLoomImageSolid component instead of exporting the image to a file or serving it over HTTP. - Static textures work even when they are non-readable or packed into a Sprite atlas. Live RenderTextures update automatically when their pixels or size change, so a minimap or camera feed does not need repeated bridge assignments. Live sources support Metal, Direct3D 11, and Direct3D 12.
- Browser-only mock scenarios can now fill generated image fields with normal
image URLs through
createMockImageSource(url). The external Editor browser shows a placeholder for Unity-owned images while the embedded UI renders the real image. - You can keep a standalone
npm run devserver open for mock-mode while entering Play mode. Loom starts its own server on a free loopback port and leaves the standalone process alone. - Mouse-wheel and trackpad scrolling now moves by the expected distance and preserves smooth fractional input, horizontal scrolling, and Windows Input System scroll ranges.
0.13
July 20, 2026
- The Unity package identifier is now
onl.snack.loom, matching Snack’s registered namespace. Release tarballs are signed so Unity Package Manager can verify their author and contents. - Fixed generated bridge registration under Unity 6.7.
- Fixed the Loom rendering plugin failing to load on current macOS releases.
0.12
July 19, 2026
- Loom now composites the UI through a URP renderer feature after the final game camera. The UI and loading cover no longer depend on a generated uGUI canvas.
- Loom now presents UI updates in the same Unity frame as the state changes that caused them. When the UI does not change, Loom reuses the last GPU surface instead of repainting it.
- Rendering is GPU-only on Metal, Direct3D 11, and Direct3D 12. Unsupported graphics APIs now fail with a clear rendering error instead of falling back to a CPU pixel upload.
- During a resize, Loom waits for a surface at the new size instead of sampling a stale or stretched UI frame. The loading cover stays visible while the new surface is prepared when the cover is enabled.
Tools > Loom > Setup UI in Current Scenenow installsLoomRendererFeatureon every renderer used by the project’s URP quality assets. It rejects quality levels that do not use URP.
0.11
July 17, 2026
- Fixed UI animation stalling in Windows D3D12 projects at high or uncapped frame rates, where the UI could appear to update only after mouse or keyboard input.
0.10
July 16, 2026
- Fixed Windows players becoming unresponsive after Alt+Tab or minimize/restore while the game continued running in the background.
- D3D12 presentation now keeps synchronization entirely on the GPU. If the next UI frame is still in flight, Loom retains the last completed frame instead of stalling Unity or the UI renderer. Zero-copy rendering is preserved, with no CPU readback or upload fallback.
- Reduced Windows UI presentation overhead by removing a full GPU drain from every UI paint.
- Fixed Vite dev-server color codes appearing as square characters in the Unity Console.
0.9
July 15, 2026
- Added support for Unity 6.3 through 6.7.
- Fast Enter Play Mode now works reliably when Domain Reload and Scene Reload are both disabled. Retained Loom views start each Play session with fresh rendering, loading, input, and viewport state instead of carrying state over from the previous session.
- Delayed bridge actions and queued work from a stopped Play session can no longer publish into, resolve through, or shut down a newer session.
- Loom now tears down and restores bridge registration cleanly across script recompilation and Unity code reloads.
- Failed or partial runtime initialization is rolled back completely so a subsequent initialization can start normally.
0.8
July 13, 2026
- Fixed UI freezing on the pre-resize frame after a window resize. Affects both D3D11 and D3D12.
- The UI bridge now recovers across Play -> Stop -> Play without restarting the Vite dev server; pending actions are rejected and the stream reconnects with a state snapshot.
0.7
July 11, 2026
- Fixed nested state built through object initializers before being attached to the bridge publishing at wrong, unrooted paths. Assigning nested state to a not-yet-attached parent now defers, and everything syncs when the graph is attached to a live bridge property.
0.6
July 8, 2026
- Fixed snapshot arrays of state objects (e.g.
SlotState[]properties) failing to sync.
0.5
July 3, 2026
- CSS
background-clip: textis now supported: fill heading text with a gradient or image. - Inline SVG
fill/strokenow resolvecurrentColorandvar()custom properties, so icons follow your CSS theme colors.
0.4
June 20, 2026
- CSS
backdrop-filteris now supported, blur and other frosted-glass effects on the content behind an element.
0.3
June 6, 2026
- Fixed player builds getting stuck on the splash screen: the UI could fail to connect to the game in a built player. Editor play mode was unaffected.
0.2
June 1, 2026
The first public release.
Migrate from v0.1.x to v0.2.x.
Scene setup
- The Loom UI component now initializes and shuts down the runtime. Add it
to your startup scene with
Tools > Loom > Setup UI in Current Scene; it replaces the bootstrap script and manual runtime calls. - Loom constructs and hosts your
[Bridge]class (which now inheritsLoomBridgeBase). Reach it from gameplay code through the generatedUIBridge.Instance.
State
- State is now plain
{ get; set; }properties and assigning one pushes to the UI. ReactiveList<T>/ReactiveMap<K,V>for collections that change often: mutate in place and each insert/remove/element change pushes granularly. SnapshotList<T>/T[]/Dictionary<K,V>also work (reassign to sync).- Bridge removes the
stateprefix:bridge.boot.progressinstead ofbridge.state.boot.progress. - Built-in
loom.*state on every bridge: active scene name, viewport size, device pixel ratio, and connection status, with no declaration. Read it asbridge.loom.*.
Actions
- Actions now support any number of parameters instead of just 0 and 1.
- Bridge removes the
actionprefix:bridge.goToMainMenu()instead ofbridge.actions.goToMainMenu(). - Actions now work on nested state:
bridge.boot.setProgress(v).
The UI surface
- The bridge mirrors your C# class 1:1; state, actions, and nested objects live
directly on it:
bridge.currentScreen,bridge.startGame(),bridge.boot.progress. There is no.state/.actionssplit. - Membership is mostly by convention: a
publicproperty is state, apublic Event<T>is an event. Actions are explicit, tag the method[BridgeAction]. long/ulongvalues cross to TypeScript asbigint.
Debugging
- Your UI’s console output (
console.log/console.warn/console.error, plus uncaught errors) now appears in the Unity console, prefixed[Browser], so you can see UI logs and errors without opening browser DevTools. - The Editor now supports viewing and interacting with the live UI in a separate browser.
Shipping
- Shipped games open no local network port, the UI now talks to your game in-process. (The external-browser debugging above is an Editor-only convenience and is never exposed in a build.)
0.1
May 4, 2026
Internal pre-release.
Upgrading
Versioning policy
- Patch (
1.1.0->1.1.1). Bug fixes only. No breaking changes. - Minor (
1.1.x->1.2.0). New features. Source-compatible, no breaking changes. - Major (
1.x->2.0). Major new features. Breaking source changes, needs migration.
Pre-1.0 versions don’t respect semantic versioning. We use strict versioning starting from 1.0.