WASM CCK Changelog
TL;DR: This page tracks every CVR Preview.N-WASM.M CCK build released on the closed-testing branch. Each entry shows the developer-posted changelog and the Steam build ID when available. Steam branch keys are redacted; branch names and build IDs are preserved. Entries tagged [verified] or [unposted] are observations from cross-checking the package contents against the developers’ chat posts.
At a glance
Section titled “At a glance”| Version | Build ID | Headline |
|---|---|---|
| Preview.11.WASM.1 | — | First drop. Wasm module auto-downloaded + method-call into WASM via [ExternallyVisible]. |
| Preview.11-WASM.2 | — | Local testing + Play Mode testing fix, menu item to create WasmBehaviour. |
| Preview.11-WASM.3 | — | Interactable ↔ WASM method calls actually work. |
| Preview.11-WASM.4 | 20022802 | Brought in develop changes, fixed WasmScriptingBridge initialization. |
| Preview.11-WASM.5 | 20023329 | OnBecameVisible/Invisible events hooked, LocalPlayer GetPosition/GetRotation. |
| Preview.11-WASM.6 | — | Fixed world builds corrupting lightmap data. Added project descriptor, possible Linux support. |
| Preview.12-WASM.8 | — | CCKWasmProjectDescriptor component ships. Verbose Wasm build toggle. |
| Preview.12-WASM.9 | — | Regenerated binder links. |
| Preview.12-WASM.10 | (NAK 20249206) | LocalPlayer Get/Set properties; source generator fixes. |
| Preview.12-WASM.12 | — | Portal events, bound CustomRenderTexture / Texture2DArray / Texture3D. Reflection-free WasmBehaviour init. |
| Preview.12-WASM.13 | 20599241 | Fixed serialization of List<Object> and List<WasmBehaviour>. |
| Preview.12-WASM.14 | 20599241 | Permissions system introduced. Binding exceptions forwarded into VM. Struct serialization. |
| Preview.12-WASM.15 | — | Editor attributes omitted from WASM module unless UNITY_EDITOR_ATTRIBUTES define is set. |
| Preview.13-WASM.16 | 20913710 | WasmBehaviour with Instantiate/AddComponent/GetComponent. CVR Input API. FileStorage dir creation. |
| Preview.13-WASM.17 | 20940079 | Fix VR inputs + FileStorage nullptr file. |
| Preview.13-WASM.18 | 21097861 | GraphicsBuffer, GeometryUtility, CVRCamera bindings. Content-context scripting defines. |
| Preview.13-WASM.18.1 | — | Newtonsoft.Json assembly conflict fix. |
| Preview.16-WASM.18.1 | — | Fix uploading in Unity 2022 versions. |
| Preview.16-WASM.19 | — | Unity.Mathematics added. Multi-partial serializable types. Reflection-free behaviour. |
| Preview.16-WASM.20 | — | Inheritance chains to WasmBehaviour + Object.Instantiate reflection-free fixes. |
| Preview.16-WASM.20.1 | — | Game events fix. |
| Preview.16-WASM.20.2 | — | All WasmBehaviour events fix. |
| Preview.16-WASM.21 | — | Serialization rework + test framework. UnityEvent serialization on WasmBehaviours. |
| Preview.22-WASM.22 | 22346714 | WorldPermissions API. User-Identity gate on Username/UserId. Handle manager rework. Fuel → epoch interruption. |
| Preview.27-WASM.23 | 22724834 | Prop collision exclude-layer APIs. |
| Preview.27-WASM.24 | 22727107 | WasmUtils API (context queries). Unity-side binding exception logging. |
| Preview.27-WASM.25 | 22791065 | LocalPlayer IgnoreCollision, SetHeadHiddenCamera, Respawn. WorldSettings API. Removed dead FileStorage permission stubs. |
| Preview.27-WASM.26 | 22792582 | LocalPlayer SetPositionAndRotation, SignalDiscontinuity. Networking server-time methods. |
| Preview.27-WASM.27 | 22810120 | Breaking: CVR APIs properties → Get*() methods. CVR.Avatar bindings live. Username freed from User-Identity gate. |
All Preview.27-WASM.2x builds shipped on the feature_wasm Steam branch. Earlier builds preceded the consolidation to this branch.
4.0.0-Preview.11.WASM.1
Section titled “4.0.0-Preview.11.WASM.1”First public-testing drop.
Dev post:
- Added
CVRDataStorecomponent (not bound to anything; modder-only). TimeSinceAFKadded toCVRParameterStream.DisplayGroupDetailPageadded toCVRInteractable.- Pano preview in build panel.
- Portal capture reworked for new depth portal panoramics.
- VRAM usage validation skipped for Worlds.
- Fixed
CVRInteractableconflicting network-id autofix. - Upload procedure tweaks (per-file server-side status, new upload endpoint supporting variable updates / partial uploads).
- Refactored test mode so content is processed before lifetime events.
- Fixed LTCGI adapter error with latest LTCGI.
WASM:
- Fixed testing in Play Mode.
CVRInteractablecan method-call into WASM: invokeTriggerScriptEventon yourWasmBehaviourwith the method name; methods must carry[ExternallyVisible].- WASM module now auto-downloaded and extracted into
%APPDATA%(%LOCALAPPDATA%/ChilloutVR/CVRBuildTools/in later versions).
[verified] Ships with Wasmtime 22.0.0 (Packages/Wasmtime.22.0.0/). Native libs for Windows, Linux, macOS-x64, macOS-arm64.
4.0.0-Preview.11-WASM.2
Section titled “4.0.0-Preview.11-WASM.2”Dev post:
- Fixed not being able to local-test or Play-Mode-test Worlds due to original scenes being unloaded.
- WASM:
MenuItemto createWasmBehaviourfrom basic template.
4.0.0-Preview.11-WASM.3
Section titled “4.0.0-Preview.11-WASM.3”Dev post:
- WASM: updated module so using Interactable actually works.
4.0.0-Preview.11-WASM.4
Section titled “4.0.0-Preview.11-WASM.4”Branch: WASM · Build ID: 20022802.
Dev post:
- Delay
EnvConfigto prevent a crash when switching build target during editor startup. - WASM: Potentially fixed world builds not initializing WASM correctly (local testing + normal uploads).
[verified] Brought WasmScriptingBridge initialization back online (referenced by later events code).
4.0.0-Preview.11-WASM.5
Section titled “4.0.0-Preview.11-WASM.5”Branch: WASM · Build ID: 20023329.
Dev post:
OnBecameVisibleandOnBecameInvisiblehooked up.LocalPlayer.GetPosition()andGetRotation()added.
4.0.0-Preview.11-WASM.6
Section titled “4.0.0-Preview.11-WASM.6”Dev post:
- Fixed world builds corrupting lightmapping data of the target scene.
- WASM: Added project descriptor component. Possible Linux support (untested).
4.0.0-Preview.12-WASM.8
Section titled “4.0.0-Preview.12-WASM.8”Skipping 7 (never shipped publicly per the archive).
Dev post:
- WASM: Fixed
CCKWasmProjectDescriptor— add to content root for debugging toggle, forced script inclusion, project-defines, external project directory override. - More Linux support fixes.
- “Verbose Wasm Build” option added.
4.0.0-Preview.12-WASM.9
Section titled “4.0.0-Preview.12-WASM.9”Dev post:
- WASM: Regenerated links with fixed
WasmBinder. Updated module version.
4.0.0-Preview.12-WASM.10
Section titled “4.0.0-Preview.12-WASM.10”Branch: NAK (temporary) · Build ID: 20249206.
Dev post:
LocalPlayer.Get/SetVelocityadded.LocalPlayer.Get/Setproperties (position, rotation, velocity).- Serializer source-generator fixes:
- Namespaced
WasmBehaviours now work. - Instance auto-properties no longer confuse the serializer.
- Fixed AssetBundle build failure caused by “unserializable types” in the generated shadow class.
- Namespaced
[context] This temporarily shipped on a NAK branch because the WASM branch build config had regressed.
4.0.0-Preview.12-WASM.12
Section titled “4.0.0-Preview.12-WASM.12”Skipping 11.
Dev post:
OnPortalCreated(Portal portal)andOnPortalDestroyed(Portal portal)events.- Bound
CustomRenderTexture,Texture2DArray,Texture3D. - Reworked WasmBehaviour initialization, deserialization, and method calling — no longer requires reflection on the module side.
- Added
Enable Reflectiontoggle on the project descriptor for escape hatch.
4.0.0-Preview.12-WASM.13
Section titled “4.0.0-Preview.12-WASM.13”Branch: WASM · Build ID: 20599241.
Dev post:
- Fixed serialization of
List<Object>andList<WasmBehaviour>.
4.0.0-Preview.12-WASM.14
Section titled “4.0.0-Preview.12-WASM.14”Branch: WASM · Build ID: 20599241 (reused).
Dev post:
- Permissions system introduced. Some existing behaviour broke intentionally (e.g.
Instantiateon props/avatars); most was unintentional because default permissions weren’t appropriate for every binding yet. - Exceptions thrown from bindings no longer kill the VM — they’re forwarded into the guest and thrown there.
- Struct serialization added (was overlooked).
- Fixed
[SerializeField]attribute not working properly.
4.0.0-Preview.12-WASM.15
Section titled “4.0.0-Preview.12-WASM.15”Dev post:
- Fixed serialization of
sbytefailing. - Unity Editor-only attributes (
ColorUsage,HideInInspector,Property,Space,Tooltip,Header) are no longer included in the built WASM module — gated behindUNITY_EDITOR_ATTRIBUTESdefine for opt-in.
4.0.0-Preview.13-WASM.16
Section titled “4.0.0-Preview.13-WASM.16”Branch: WASM · Build ID: 20913710.
Dev post:
WasmBehaviourhandling withInstantiate,AddComponent,GetComponent.- Fixed
GetComponentnot returning an object whose actual type matched the retrieved component. CVRInputAPI added. WASM has its own input module; world and self-avatar scripts can set inputs.- Fixed
FileStoragenot creating its working directories.
4.0.0-Preview.13-WASM.17
Section titled “4.0.0-Preview.13-WASM.17”Branch: WASM · Build ID: 20940079.
Dev post:
- Fixed VR inputs not working with the WASM input module.
- Fixed
FileStoragereturning a file with a null pointer.
4.0.0-Preview.13-WASM.18
Section titled “4.0.0-Preview.13-WASM.18”Branch: WASM · Build ID: 21097861.
Dev post:
- Fixed
GraphicsBufferbindings (needed for compute shaders). - Added
GeometryUtilitybindings. - Added
CVRCamerabindings. - Added defines for running Avatar / Prop / World contexts (
CVR_SCRIPTING_CONTEXT_{AVATAR,PROP,WORLD}).
4.0.0-Preview.13-WASM.18.1
Section titled “4.0.0-Preview.13-WASM.18.1”Dev post:
- Fixed
Newtonsoft.Jsonassembly bundled in CCK conflicting with otherNewtonsoft.Jsonassemblies.
4.0.0-Preview.16-WASM.18.1
Section titled “4.0.0-Preview.16-WASM.18.1”Dev post:
- Fixed uploading in Unity 2022 versions.
4.0.0-Preview.16-WASM.19
Section titled “4.0.0-Preview.16-WASM.19”Dev post:
Unity.Mathematicsadded to the WASM module.- Fixed serializable types with multiple partial definitions breaking the module.
- Fixed the “reflection must be enabled” requirement for several runtime paths.
4.0.0-Preview.16-WASM.20
Section titled “4.0.0-Preview.16-WASM.20”Dev post:
- Fixed behaviours that don’t directly inherit
WasmBehaviournot working. - Fixed
Object.Instantiatenot having the no-reflection fixes.
4.0.0-Preview.16-WASM.20.1
Section titled “4.0.0-Preview.16-WASM.20.1”Dev post:
- Fixed game events not working.
4.0.0-Preview.16-WASM.20.2
Section titled “4.0.0-Preview.16-WASM.20.2”Dev post:
- Fixed all
WasmBehaviourevents not working.
4.0.0-Preview.16-WASM.21
Section titled “4.0.0-Preview.16-WASM.21”Dev post:
- Reworked serialization. Test framework in place to catch regressions.
UnityEventserialization onWasmBehaviours — usable only inside your own code, intended for drag-and-drop prefabs that non-WASM users can hook up.- Fixed
GetComponentmethods without the no-reflection fix.
4.0.0-Preview.22-WASM.22
Section titled “4.0.0-Preview.22-WASM.22”Branch: WASM · Build ID: 22346714.
Dev post:
- Added
ISerializableCallbackReceiver(OnBeforeSerialize / OnAfterDeserialize) events. WorldPermissionsAPI added. Query current permissions, request changes once per session.OnWorldPermissionsChangedWasmBehaviour event.UserIdandUsernamegated behind User Identity permission.- File Storage gated behind File Storage / Read Raw Files / File Storage Limit permissions.
- World file-storage path moved to
AppData\Local\ChilloutVR\WorldData\[guid]\LocalStorage. - Network players now handled by DarkRift client ID instead of player GUID hash.
- World Permissions UI added (World Details menu → Permissions). Worlds can prompt once per session via
WorldPermissions.RequestPermissions(...). - Handle management for WASM access manager rebuilt.
- VM limiting switched from Wasmtime fuel → epoch interruption (better performance).
- Serialization refactor to simplify implementation and remove magic numbers.
4.0.0-Preview.27-WASM.23
Section titled “4.0.0-Preview.27-WASM.23”Branch: feature_wasm · Build ID: 22724834.
Dev post:
- Three new Prop APIs exposed (for World use):
SetCollisionExcludeLayers(LayerMask mask)GetCollisionExcludeLayers()ResetCollisionExcludeLayers()- (Also built for Avatars, but not yet bound properly.)
4.0.0-Preview.27-WASM.24
Section titled “4.0.0-Preview.27-WASM.24”Branch: feature_wasm · Build ID: 22727107.
Dev post:
WasmUtilsAPI:CVRScriptObjectContext GetObjectContext()CVRScriptScopeContext GetScopeContext(UnityEngine.Object unityObject)CVRScriptOwnerContext GetOwnerContext()
- Unity-side logging when an exception is thrown in a bound binding — reports the binding class so you don’t need to wrap every guest call in try/catch.
4.0.0-Preview.27-WASM.25
Section titled “4.0.0-Preview.27-WASM.25”Branch: feature_wasm · Build ID: 22791065.
Dev post:
- Added to LocalPlayer (World-only):
IgnoreCollision(Collider collider, bool ignore)— wrapsPhysics.IgnoreCollisionagainst all player colliders.SetHeadHiddenCamera(Camera camera, bool hideHead)— the head-hiding system will hide the local player’s head when the passed camera’sOnPreCullfires.Respawn().
- New WorldSettings API (World-only):
SetPropVisibility(bool),SetPlayerVisibility(bool)(same effect asCVRWorld.SetPlayerPropVisibilityandSetPlayerRemotePlayerVisibility). - Removed dead
CanUseFileStorageandRequestUseFileStoragestubs fromFileStorage.
[verified] The current CCK shim (CVR.CCK.Wasm/Scripting/Links/APIs/CCKStubs/FileStorageCCK.cs) carries no CanUseFileStorage / RequestUseFileStorage helpers. Call WorldPermissions.Request(new WorldPermissions { FileStorageApiAllowed = true, ... }) and gate on WorldPermissions.CurrentPermissions.FileStorageApiAllowed in OnWorldPermissionsChanged.
4.0.0-Preview.27-WASM.26
Section titled “4.0.0-Preview.27-WASM.26”Branch: feature_wasm · Build ID: 22792582.
Dev post:
- Added to LocalPlayer (World-only):
SetPositionAndRotation(Vector3 position, Quaternion rotation, bool updateGround = false)— more efficient and predictable than back-to-backSetPosition/SetRotation. SetupdateGround = trueto recalculate ground/platform attachment.SignalDiscontinuity()— call after moving the player. Dynamics on the avatar and remote-player interpolation skip the in-between movement, producing a seamless “snap” for local and remote viewers.
- Added to Networking:
long GetServerStartTime()— Unix timestamp (ms) when the server started.long GetServerUptime()— server uptime (ms).
4.0.0-Preview.27-WASM.27
Section titled “4.0.0-Preview.27-WASM.27”Branch: feature_wasm · Build ID: 22810120.
“This build contains a bunch of breaking changes to existing APIs. As mentioned before, because we are still in the initial design & development phase, these sort of changes will occur quite often and usually require a recompile and touchup when APIs change.”
Breaking — properties → Get*() methods. Reason stated by the team: make marshalling cost obvious; the convention applies to CVR-provided APIs only, not UnityEngine/library ones. A further refactor is under discussion: postfixing all CVR APIs with Api (e.g. PlayerApi, AvatarApi, PropApi, PortalApi, CloneApi) to avoid naming conflicts with UnityEngine.Avatar and the CVRAvatar component.
Prop refactor:
| Old | New |
|---|---|
Spawner property | GetSpawner() |
RootObject property | GetRootObject() |
RootTransform property | GetRootTransform() |
Name property | GetName() |
ContentId property | GetContentId() |
Player refactor:
| Old | New |
|---|---|
UserId | GetUserId() |
Username | GetUsername() |
NetworkId | GetNetworkId() |
GameObject | GetGameObject() |
VoicePoint | GetVoicePoint() |
ViewPoint | GetViewPoint() |
Avatar refactor:
| Old | New |
|---|---|
Wearer | GetWearer() |
RootObject | GetRootObject() |
RootTransform | GetRootTransform() |
Name | GetName() |
ContentId | GetContentId() |
Also added on Avatar: SetCollisionExcludeLayers(LayerMask), GetCollisionExcludeLayers(), ResetCollisionExcludeLayers().
Other changes:
CVR.AvatarAPI and bindings now hooked up. Example:Avatar localAvatar = LocalPlayer.PlayerObject.GetWornAvatar();.- Fixed lifetime checks not functioning properly since the access-manager handle rework.
- Removed
Usernamefrom User Identity world-permission gate —GetUsername()no longer requiresAccessUserIdentity.GetUserId()still does. - Fixed Avatar / Prop / Player bindings not being wrapped in exception interop.
- Tweaked error logging on binding exceptions to report the binding class.
Unposted structural changes (observed)
Section titled “Unposted structural changes (observed)”Diffing CCK_4.0.0_Preview.11.WASM.unitypackage vs CCK_4.0.0_Preview.27-WASM.27.unitypackage surfaces reorganizations the per-build posts didn’t call out:
- Wasmtime upgraded 22.0.0 → 34.0.2 at some point between Preview.12 and Preview.27. Along with the upgrade, only
win-x64andandroid-aarch64native libraries remain in the package — thelinux-x64,osx-x64, andosx-arm64libraries present in Preview.11 were dropped. - Editor scripts relocated:
Assets/CVR.CCK.Wasm/Editor/→Assets/CVR.CCK.Wasm/CCK/Editor/.CCKWasmProjectDescriptor.csmoved from top of the Editor folder toCCK/CCKWasmProjectDescriptor.cs(runtime type) with its editor now a separate file. - Bindings subfolder introduced:
Assets/.../Scripting/Links/APIs/*Bindings.cs→Assets/.../Scripting/Links/APIs/Bindings/*Bindings.cs. This happened around theWorldBindings/PermissionsBindings/UtilBindingsadditions — probably during the Preview.16 → Preview.22 consolidation. - CCKStubs relocated:
Assets/.../Scripting/Links/CCKStubs/→Assets/.../Scripting/Links/APIs/CCKStubs/, matching the Bindings relocation. WasmBuildProcessorsits inCCK/Editor/now instead ofEditor/directly.- New in
CCK/Editor/Templates/:WasmBehaviorTemplate.cs.template— the template file behindAssets > Create > CVR Wasm Behavior (C#). - New in
CCK/Editor/:SkipValidation.cs,WasmMenuItems.CreateWasmBehavior.cs. - New attributes folder:
Scripting/Attributes/ExternallyVisibleAttribute.csarrived alongside Preview.11 work but the author-facing doc didn’t highlight it until Preview.27-WASM.24. UnsafeUtilsadded:Scripting/Links/UnsafeUtils/(Span ↔ NativeArray helpers for binder code).WasmSourceGenerator.dllshipped at some point — a Roslyn source generator that emits the companionpartialfor eachWasmBehavioursubclass (plugged into serialization).WasmVMsplit into a partial:WasmVM.cs+WasmVM.Events.cs. The events half is where all thescripting_call_*export lookups and dispatch methods live.EventForwarder/*classes (OnAnimatorIKForwarder,OnRenderImageForwarder, etc.) added underScripting/EventForwarder/to bridge Unity events that need specific dispatch shapes.
- Dev post sections quote the developer announcements from CVR’s closed-testing channel, preserved as the builds shipped. There is no upstream official changelog file for the WASM CCK; these posts are the only linear record.
- [verified], [unposted], and [correction] tags mark observations that don’t come from the dev posts but from inspecting the shipped builds and the current decompile. Where the post and the shipped bits disagree, the bits win and the disagreement is called out.
- Steam branch keys are intentionally omitted. Branch names (
WASM,NAK,feature_wasm) and Build IDs are preserved.
Related
Section titled “Related”- API Conventions — the current state the refactors converged on.
- Architecture — what the runtime looks like today.
- Validator — interactive check against the current surface snapshot.