Skip to content

Releases: needle-mirror/com.unity.services.cloudcode

3.1.0-exp.1

Choose a tag to compare

@Needle-Mirror-Bot Needle-Mirror-Bot released this 03 Oct 22:18

[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 struct data types for endpoint parameters and returns, synchronized fields, and event payloads.

  • Cloud Behaviours: new [SyncView("wireName")] attribute for per-viewer synchronized projections — a TWire 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 with ScheduleAsync() to schedule a deferred execution of that function, or ForScope() 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 raises Fatal with the new InvokerUnavailable reason.

  • Added CloudBehaviourErrorReason.MessageError: a generated client raises Error with it when a synchronization or push-event message cannot be read or applied. The message is dropped and MessageReceived is 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).

  • readonly fields on Cloud Behaviour data types are no longer captured and now report CCSG131.

  • HydrationFailedOnConnect moved from Error to Fatal as a CloudBehaviourExceptionReason: a hydrate that fails when the scope resolves disables the client and raises no ScopeChanged. Call EnableClient() 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.

  • readonly fields 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 new in 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. Its OnSerialize and OnDeserialize were 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 ulong with a value above long.MaxValue no 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 only EventHandler<T> payloads were emitted, so an Action<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 NullReferenceException and is skipped instead.
  • CloudBehaviour.SynchronizeAsync() now throws an InvalidOperationException explaining that no synchronizer is attached, instead of returning a null Task that failed the caller's await with an opaque NullReferenceException.
  • 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 IWireFactory is 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...
Read more

3.0.0-exp.9

Choose a tag to compare

@Needle-Mirror-Bot Needle-Mirror-Bot released this 17 Aug 22:16

[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 14750 instead of 5000 by default. Configurable in the CloudCodeLocalServerSettings asset. 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 CloudCodeLocalServerSettings asset.
  • 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 than List<T>, an array, or Dictionary<,>), which can't be serialized to or from JSON. Use List<T> or T[] 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 emitting int, which truncated or failed to compile values outside int range. (The separate module-reference .ccmr bindings generator is unchanged.)
  • The local debug server now starts on Linux with default preferences. The default .NET path pointed at the /usr/share/dotnet directory instead of an executable; it now resolves dotnet from 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 NullReferenceException when deploying a Cloud Code Module after a domain reload.

Dependencies

  • Cloud Code Module authoring now targets Cloud Code Core v0.0.7 (was v0.0.4) and Cloud Code APIs v0.0.27 (was v0.0.26). The changes to these packages are listed below.

Cloud Code Core v0.0.7

  • Breaking: Redefined the Cloud Code Access enum. The values are renamed and renumbered,
    and default is now Access.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.RegisterTimerAsync and ITimerService.GetTimerAsync, for consistency. The previous Register and Fetch names 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, matching AddGameApiClient().

2.10.4

Choose a tag to compare

@Needle-Mirror-Bot Needle-Mirror-Bot released this 13 Jul 22:15

[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

Choose a tag to compare

@Needle-Mirror-Bot Needle-Mirror-Bot released this 25 Jun 22:13

[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 .ccmu file extension instead of generic .asset files. 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

Choose a tag to compare

@Needle-Mirror-Bot Needle-Mirror-Bot released this 28 Apr 22:12

[3.0.0-exp.7] - 2026-04-28

Changed

3.0.0-exp.6

Choose a tag to compare

@Needle-Mirror-Bot Needle-Mirror-Bot released this 24 Apr 22:19

[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_EXPERIMENTAL under Project Settings > Player > Scripting Define Symbols.

3.0.0-exp.5

Choose a tag to compare

@Needle-Mirror-Bot Needle-Mirror-Bot released this 22 Apr 22:15

[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

Choose a tag to compare

@Needle-Mirror-Bot Needle-Mirror-Bot released this 18 Mar 22:15

[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

Choose a tag to compare

@Needle-Mirror-Bot Needle-Mirror-Bot released this 25 Feb 22:17

[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

Choose a tag to compare

@Needle-Mirror-Bot Needle-Mirror-Bot released this 15 Jun 22:15

[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