Repository navigation
Releases: needle-mirror/com.unity.services.cloudcode
Release list
3.1.0-exp.1
[3.1.0-exp.1] - 2026-09-25
Added
-
Cloud Behaviour data types now capture public properties with a public getter and setter, in addition to fields. Readable but unassignable properties report CCSG131; unreadable ones (write-only, or a non-public getter) are excluded silently.
-
Add creation flow for Cloud Behaviour Scripts through the Unity Editor
-
Cloud Behaviours supports
[CloudCodeSerializeProperty]and[CloudCodeIgnoreProperty]on fields to control state persistence. -
Cloud Behaviours supports the
[CloudCodeAccess(Access)]attribute to restrict who can access which endpoints, as in Stateful Cloud Code. -
Cloud Behaviours supports
structdata types for endpoint parameters and returns, synchronized fields, and event payloads. -
Cloud Behaviours: new
[SyncView("wireName")]attribute for per-viewer synchronized projections — aTWire Method(string playerId)whose value is computed per recipient, so each player receives their own view of the shared state. -
Cloud Behaviours supports timers and cross-scope requests via the generated
I{Behaviour}interface. Once injected, in the calling function, it can be used withScheduleAsync()to schedule a deferred execution of that function, orForScope()to invoke a function in a different scope than the current one. -
Added
ModuleHostWarmup, which warms the project's module host at sign-in so the first module call is not delayed by provisioning. Generated Cloud Behaviour clients arm it at load and await it before hydrating; a failed warm-up raisesFatalwith the newInvokerUnavailablereason. -
Added
CloudBehaviourErrorReason.MessageError: a generated client raisesErrorwith it when a synchronization or push-event message cannot be read or applied. The message is dropped andMessageReceivedis not raised for it. -
Add a Cloud Code observability logs window (
Services > CloudCode > Observability Logs) to query the logs your scripts and modules emit -
Cloud Code data types authored natively in-editor now capture public properties with a public getter and setter, in addition to fields. Readable but unassignable properties report CCSG216; unreadable ones (write-only, or a non-public getter) are excluded silently.
-
A module whose source changed is now redeployed onto the running local Cloud Code server automatically, instead of having to be redeployed by hand, so picking up a code change no longer requires stopping and starting the server. Each redeploy names the modules the server reloaded in the Console. Module references are redeployed when the Editor regains focus, including while in play mode. Cloud Code Modules are redeployed after Unity recompiles them, outside play mode only; changing one while playing logs which modules need play mode to be re-entered.
-
Cloud Code push-message subscriptions now support multiple subscribers on the same channel, each with its own callbacks and an independent unsubscribe.
-
Entering Play mode without the local Cloud Code server running now logs a warning when the remote environment is stale relative to local module source.
-
The Cloud Code Module Reference (.ccmr) inspector now shows a last successful deployment summary, matching the Cloud Code Module (.ccmu) inspector. The summary reads the editor session's per-user deployment record, so it survives domain reloads and follows the active project and environment.
-
Module References (.ccmr) now show "Modified locally, deploy to update" in the Deployment window when their external solution changed since the last recorded deploy, instead of a status derived from the .ccmr asset file's own timestamp.
-
Editor analytics now cover the Cloud Code authoring flows: creating, deploying and publishing JS scripts; creating and deploying module references (
.ccmr) and modules (.ccmu); generating solutions and bindings; and the local server lifecycle. Automatic local redeploys are not reported. Collection follows the Editor's own analytics setting, and no script or module source is sent.
Changed
-
New Cloud Behaviour scripts are now created with
[StateScope(Scope.Player)]instead of[StateScope(Scope.MultiplayerSession)], and carry a comment linking to the scope documentation. -
Generated Cloud Behaviour data types are emitted into their own namespace, with nested types kept inside their containing type instead of flattened into the client's namespace. Data types that share a simple name across different namespaces are now generated separately rather than one overwriting the other.
-
Player scoped Cloud Behaviours now send events.
-
Cloud Behaviours now support sharing code via a third asmdef.
-
Cloud Code Modules now support sharing code via a third asmdef.
-
A running Cloud Code local debug session no longer redirects every other Wire consumer to the debugger. Cloud Code now opens its own connection to the debug server through
IWireFactory, so Multiplayer, Friends and the editor status service stay connected to their environment while debugging. -
Local Cloud Code debugging can now be enabled in a development player build by launching it with
--cloud-code-local-debugger[=<port>]. The argument is ignored in release builds.
Breaking Changes:
-
Generated Cloud Behaviour clients no longer mark synchronized members with
[field: SerializeField]. Unity's serializer cannot represent most backend-legal types, so per-member serialization silently persisted only a subset of the synchronized state. The custom Inspector is unaffected (it reads live members directly). -
readonlyfields on Cloud Behaviour data types are no longer captured and now report CCSG131. -
HydrationFailedOnConnectmoved fromErrortoFatalas aCloudBehaviourExceptionReason: a hydrate that fails when the scope resolves disables the client and raises noScopeChanged. CallEnableClient()from outside the handler to try again. -
Cloud Behaviours: removed the
[VisibilityFilter]attribute. Per-viewer synchronization is now expressed with[SyncView]projection methods (see Added); migrate a filtered field to a projection that returns the value each viewer should see. -
readonlyfields on Cloud Code data types authored natively in-editor are no longer captured and now report CCSG216.
Fixed
- Cloud Behaviours now report error CCSG156 when saved state has two members with the same name, such as a field hidden with
newin a data type. The server can't save that state, so every call to the behaviour failed. - Cloud Behaviours now report error CCSG157 when a behaviour implements
IStateSerializer, which Cloud Behaviours don't support yet. ItsOnSerializeandOnDeserializewere never called, and state was saved with the default serializer. - Cloud Behaviour data types now warn (CCSG212 / CCSG105) when a derived declaration hides an inherited public member out of the generated client type.
- Cloud Behaviour script creation now surfaces clear error dialogs, matching the Cloud Code Module creation flow.
- Generated Cloud Behaviour client bindings now compile when the cloud class name matches the module name; the client's
[CloudBehaviour(typeof(...))]is globally qualified so the module namespace can't shadow the class. - Cloud Behaviours now resolve client-to-cloud bindings in player builds from a generated binding manifest instead of scanning module manifests by simple type name. This fixes binding failures when two modules declare behaviours with the same simple type name; each client now resolves to the correct behaviour by full type identity.
- A Cloud Behaviour exposing an enum backed by
ulongwith a value abovelong.MaxValueno longer silently fails to generate a module manifest. - Cloud Behaviour events declared with
Action<T>now deliver their payload type to the generated client; previously onlyEventHandler<T>payloads were emitted, so anAction<T>payload had no client-side type. - Cloud Behaviours now generate enum bindings that preserve the enum's underlying type, matching the fix already made for Cloud Code Modules authored natively in-editor.
- A Cloud Behaviour event push that fails to send is now caught and logged server-side instead of being silently swallowed as an unobserved task exception. Synchronizing before any endpoint has run (e.g. manually during hydration) no longer risks a
NullReferenceExceptionand is skipped instead. CloudBehaviour.SynchronizeAsync()now throws anInvalidOperationExceptionexplaining that no synchronizer is attached, instead of returning a nullTaskthat failed the caller'sawaitwith an opaqueNullReferenceException.- A local Cloud Code server stop that fails now records the failure, as a start already did, so it is visible rather than only logged, and the failure shown always belongs to the last start or stop. The log line for a failed stop no longer claims the start failed.
- In a project using Multiplayer Play Mode, a local Cloud Code server start or stop issued just after a domain reload is no longer repeated by the deferred restore of the previous session. The restore runs a moment after the reload there, and it read the new operation's state as an interrupted one to resume, running a second start or stop alongside it.
- The local Cloud Code server now logs a warning when a running local session is not restored after a domain reload or an Editor restart, naming the reason and stating that play mode has returned to the deployed service. Previously the only trace was a process id of -1 in the local server status. A start that never launched is not warned about, since its recorded failure outlives the reload and would otherwise be reported again on every later one; it stays readable in the local server status.
- Cloud Code now logs an error when local debugging is active but no
IWireFactoryis registered, instead of silently subscribing push messages against the cloud, which rejects the local server's channel tokens. - Clearing the local Cloud Code server's state now de...
3.0.0-exp.9
[3.0.0-exp.9] - 2026-08-17
Added
- Updated the Cloud Code Module (.ccmu) inspector with deployment actions and a last successful deployment summary.
- Support default parameters in generated bindings for Cloud Code modules scripts.
- The local Cloud Code server settings can now create and assign a placeholder secrets JSON file, and open the assigned file in your external editor.
Changed
- The package now targets Unity 6000.0. The local debugger requires Unity 6000.3 or newer, and Cloud Code Module authoring requires Unity 6000.5 or newer.
- The local Cloud Code server now defaults to port
14750instead of5000by default. Configurable in theCloudCodeLocalServerSettingsasset. Existing projects keep the port already stored in that asset. - The local Cloud Code server's infrastructure now defaults to non-verbose logging. This has been made configurable on the
CloudCodeLocalServerSettingsasset. - The local Cloud Code server's secrets file is now validated for parseable JSON object content and surfaces an error dialog when invalid.
- The local Cloud Code server settings can now create and assign a placeholder secrets JSON file, and open the assigned file in your external editor.
- New Cloud Code Module scripts are now created with
[StateScope(Scope.Player)]instead of[StateScope(Scope.MultiplayerSession)], and carry a comment linking to the scope documentation. - Cloud Code Modules now report a compile-time error when a function's return type, a parameter, or a data type field is a custom collection type (a user type implementing
IEnumerable<T>other thanList<T>, an array, orDictionary<,>), which can't be serialized to or from JSON. UseList<T>orT[]instead.
Breaking Changes:
- CloudCodeModuleScope renamed to CloudCodeScope and moved to the main Unity.Services.CloudCode namespace.
Fixed
- Cloud Code Modules (
.ccmu) no longer show "Modified locally" after routine re-imports (entering Play Mode, domain reloads, or reimporting) when their source is unchanged. A module's status is now derived from its content compared to the last deployment, and a remotely-deployed module keeps its status regardless of the local server's state. - Cloud Code Modules authored natively in-editor now generate enum bindings that preserve the enum's underlying type (
byte,short,long,ulong, etc.) instead of always emittingint, which truncated or failed to compile values outsideintrange. (The separate module-reference.ccmrbindings generator is unchanged.) - The local debug server now starts on Linux with default preferences. The default .NET path pointed at the
/usr/share/dotnetdirectory instead of an executable; it now resolvesdotnetfrom the system PATH, with a fallback if the configured path is invalid. - A local Cloud Code server that dies during startup now reports why. It also checks two things up front on start:
- Port conflicts for any ports the local server needs.
- The .NET runtime the server needs.
- Fixed a
NullReferenceExceptionwhen deploying a Cloud Code Module after a domain reload.
Dependencies
- Cloud Code Module authoring now targets Cloud Code Core
v0.0.7(wasv0.0.4) and Cloud Code APIsv0.0.27(wasv0.0.26). The changes to these packages are listed below.
Cloud Code Core v0.0.7
- Breaking: Redefined the Cloud Code
Accessenum. The values are renamed and renumbered,
and default is nowAccess.Unspecified. Validation will be done at load time and incompatible values will throw an exception. - Breaking: Renamed
[Service]attribute to[CloudCodeService]to avoid confusion with other service attributes. - Breaking: Renamed
ITimerService.RegisterTimerAsyncandITimerService.GetTimerAsync, for consistency. The previousRegisterandFetchnames still work but are now obsolete.
Cloud Code APIs v0.0.27
- Added
AddAdminApiClient()extension method to register the Admin API client through dependency injection, matchingAddGameApiClient().
2.10.4
[2.10.4] - 2026-06-23
Fixed
- Added retries with a longer request timeout when checking whether a Cloud Code module exists during deployment.
Changed
- Generating bindings will now includes enum values alongside their names.
- Generating bindings dictionary keys now retain their original types instead of being converted to strings.
3.0.0-exp.8
[3.0.0-exp.8] - 2026-06-16
Added
- Author Cloud Code Modules natively in the Unity Editor, with your cloud source code compiled automatically and fully
debuggable right where you work. There's no longer any need to regenerate bindings or maintain a separate solution
outside your Unity workspace - everything lives in one place. Writing, compiling, debugging, and deploying now happen
in a single workflow, enabling rapid iteration and faster deployment. Highlights include:- Create new Cloud Code Modules quickly with a guided creation flow.
- Iterate rapidly and catch issues early with modules that compile in-editor as part of your project.
- Skip manual bindings regeneration - strongly-typed client bindings are generated and kept in sync automatically.
- Scoped Cloud Code is supported alongside standard modules.
Fixed
- Added retries with a longer request timeout when checking whether a Cloud Code module exists during deployment.
- Fixed Cloud Code Module deployment resolving required precompiled assemblies using Editor-loaded assembly paths on Unity 6000.5 or newer.
Changed
- Renamed Native Modules to Cloud Code Modules; they now use the
.ccmufile extension instead of generic.assetfiles. Recreate any existing modules. - Generating bindings will now includes enum values alongside their names.
- Generating bindings dictionary keys now retain their original types instead of being converted to strings.
3.0.0-exp.7
[3.0.0-exp.7] - 2026-04-28
Changed
3.0.0-exp.6
[3.0.0-exp.6] - 2026-04-23
Fixed
- Fixed an issue where .net path checks were not account for dotnet cli commands.
Added
- Added Cloud Code Debugger that needs to be enabled by adding
UNITY_SERVICES_CLOUDCODE_EXPERIMENTALunder Project Settings > Player > Scripting Define Symbols.
3.0.0-exp.5
[3.0.0-exp.5] - 2026-04-22
Added
- Added custom icon form Cloud Code Module Reference (.ccmr) and Cloud Code Javascript (.js) files
- Added a console log with a "View on Dashboard" link upon successful deployment of Cloud Code Modules.
- Added "Deployment Window" shortcut to the Local Cloud Code Server toolbar popup.
- Scoped invocations are supported for Local Cloud Code Debugging and remote.
Changed
- Updated the "Go to Dashboard" link in Project Settings for Cloud Code to point to Cloud Code Overview page.
- Improve discoverability of Cloud Code in the Unity Package Manager.
Fixed
- Fixed an issue where rapidly starting and stopping the local Cloud Code server incorrectly produced console error logs.
- Added checks to prevent Users from setting invalid Ports for the local Cloud Code server.
- Added .Net path setting validation when starting the local Cloud Code server.
3.0.0-exp.4
[3.0.0-exp.4] - 2026-03-11
Added
- Implement the Resetting of Scope State and persistence for Local CC Debugging.
Fixed
- Fixed local server start failure due to unescaped parameters.
- Fixed Cloud Code fields in Project Settings to show their own descriptive tooltips.
- Fixed debugger tooltip to indicate debug fields are read-only once the local server starts.
3.0.0-exp.3
[3.0.0-exp.3] - 2026-02-25
- Releasing public experimental exp-3.
[3.0.0-exp.2] - 2026-02-12
Fixed
- Enable support for passing complex types for C# modules deployed onto the local Cloud Code server.
[3.0.0-exp.1] - 2026-01-19
Added
-
Implemented Local Cloud Code debugging, enabling Users to rapidly iterate and debug C# modules on a local server
running on their machine. This has a requirement of Unity 6.3 or higher. Users can:- Configure local server settings via Cloud Code Project Settings (File > Project Settings > Services > Cloud Code)
- Enable the Local Cloud Code Toolbar via (Top right Toolbar Context Menu > Services > Cloud Code)
- Start or stop the local server via the toolbar and attach local debuggers through Visual Studio or Rider.
- Deploy C# modules to the local server via the deployment window (Services > Deployment) to be executed.
-
Implemented support for Stateful Cloud Code with Player and Multiplayer Session scoped invocations, enabling users
to simplify state management for event-driven games. Note that this is only supported for Local Cloud Code Debugging and
not remote.
Changed
- Cloud Code event subscription only exposes event registration
from within the returned subscription object
Removed
- Removed deprecated CloudCode API
[2.10.3] - 2026-01-05
Fixed
- Updated versions for cloud apis
- Added Unit test that is not published as part of the template
- Added .gitignore as part of the template
2.10.3
[2.10.3] - 2026-01-05
Fixed
- Updated versions for cloud apis
- Added Unit test that is not published as part of the template
- Added .gitignore as part of the template