Skip to content

Unity Changelog

This page records changes by Unity SDK version only. It does not use version numbers from other engine SDKs.

If you are looking for downloads and version numbers, see Release Notes.

  • Added phone SMS sign-in and refresh, basic profiles, and unified room access to Core. Only explicitly supported capabilities issue direct API requests when no applicable Desktop provider exists.
  • Added the optional Multiplayer Rooms service for Gateway room discovery, creation, joining, connection, lifecycle commands, and map information. All multiplayer integrations continue to install Core + Multiplayer.
  • Unified Hosted bootstrap and explicit joins on IGPRoomJoinResult and the same RoomNode Control/Game connection. Connection identity uses room/player and the current reliable credential.
  • Removed the unpublished alternative Multiplayer package, EntryMode, and the old generated room-identity types and checks. CreateAndJoinAsync still performs separate create and join requests.
  • Read Arena data-plane expiration from the opaque expiresAtUnixSeconds descriptor and compare it in Unix seconds.
  • Decode hosted-session Protobuf varints with 64-bit storage so large timestamps cannot overflow a 32-bit accumulator.
  • Ship Core, Multiplayer, Compliance, and GameKit as both .unitypackage and offline UPM .tgz files, with one shared description for each module on the download page.
  • Removed Unity Editor callbacks that automatically searched for, created, saved, refreshed, or assigned IGPConfig assets. Configuration assets are now fully owned and explicitly assigned by the integrating project.
  • Consolidated Unity Core into five public C# events: ConnectionChanged, AuthorizationChanged, AntiAddictionChanged, OfflineMapLaunchRequested, and ErrorOccurred.
  • Consolidated Unity Multiplayer into ConnectionChanged, RoomChanged, MessageReceived, and ErrorOccurred; IGPNetwork exposes only DataReceived.
  • Room, map, Scene Gate, team, host, and player changes now share RoomChanged with change flags. Authorization state and failure details share AuthorizationChanged.
  • Structured custom/state/RPC messages emit only MessageReceived. Valid KCP/UDP p2p_data emits DataReceived once after reassembly and includes its Transport.
  • Desktop, Hosted, KCP, and UDP clients are internal, and Mirror consumes only the Multiplayer internal backend. Desktop wire protocols are unchanged and Desktop requires no update.
  • This is a breaking release with no [Obsolete] forwarding aliases. Integrations must adopt the new C# event names, argument types, and += / -= subscriptions.
  • KCP keepalive now uses a fixed internal one-second idle probe. Active traffic and unacknowledged data suppress extra pings; Inspector heartbeat fields, tuning APIs, and GameState were removed without compatibility shims.
  • Idle probes keep at most four pending pong records and report five-second Debug deltas. Missing ACKs still use the three-second SendSuspect and 15-second fault path, while an ACKed probe with a delayed Arena pong emits only a rate-limited response-path warning.
  • Split Hosted, Room, Realtime, KCP/UDP, network diagnostics, and Mirror integration from Unity Core into cn.indiegp.sdk.unity.multiplayer.

  • Added IGPMultiplayerRuntime with automatic data-plane startup and capped descriptor/KCP reconnect backoff.

  • Added reliable KCP GetSceneGateAsync so late-joining and reconnecting clients can request the Owner’s current runtime SceneGate without room snapshots or application state keys.

  • Mirror start calls now retain logical intent only and never start KCP/UDP or control Mirror.NetworkManager.

  • Removed the old Mirror transport package and serialized layout without compatibility shims while preserving desktop wire IDs and payloads.

  • Removed Unity SetReadyAsync, SetGameReadyAsync, and GetGameReadyStates. Unity scene coordination uses KCP-backed SetSceneGateAsync, CurrentSceneGate, and onSceneGateChanged.

  • Published Unity SDK 0.2.15 packages for the main SDK, Multiplayer, Compliance, and GameKit modules. This Unity-only release does not include a GameMaker artifact.

  • Unity hosted KCP now tracks outbound ACK progress independently from inbound payloads and Pong traffic. Pending sends enter SendSuspect after three seconds without ACK progress and fail the current data plane once after 15 seconds; the SDK does not reconnect or reattach automatically.

  • Reliable sends now enter a bounded, atomic FIFO. Fragmented logical messages are accepted as a whole or return kErrorWouldBlock, and each Tick injects at most 64 new KCP segments or 128 KiB.

  • New KCP clients and reset Runtime Managers default to 128 inbound UDP datagrams per Tick with 256/256 send and receive windows. nocwnd = true remains unchanged.

  • Mirror Transport now enforces global and per-peer inbound payload limits with count, byte, and time drain budgets. Unreliable overflow is dropped, while reliable overflow disconnects only the responsible logical peer.

  • KCP queue limits, send-stall thresholds, and per-Tick send budgets are fixed SDK safety policy rather than public Inspector settings. Existing serialized datagram and window overrides remain unchanged.

  • Rebuilt Unity SDK 0.2.14 packages for the main SDK, Mirror transport, Compliance, and GameKit modules.
  • Restored hosted RPC contracts and the Unity SDK RPC APIs, including register, unregister, call, response events, samples, and protocol tests. Hosted command numbers 12 through 14, rpc_name, and mode are active again; RPC realtime message names remain reserved to SDK control traffic.
  • Unity Mirror Transport diagnostics now distinguish the Mirror logicalChannel from the effectiveTransport (kcp or raw-udp) selected for each send, including explicit KCP fallback diagnostics when the raw UDP unreliable lane is unavailable.
  • Unity hosted KCP adds read-only KcpHealthState and KcpLastFaultReason. Dead links, fatal socket errors, and hard send-queue overflow close the current data plane, set ConnectionFailed, and report through onError. A bound Mirror Transport clears queued inbound messages and dispatches the corresponding Mirror disconnect callbacks once.
  • The built-in network overlay is now ShowNetworkDiagnostics / showNetworkDiagnostics and displays health, the last fault, RTT, queues, and UDP statistics.
  • Unity KCP applies send backpressure at WaitSnd >= 1024 and adaptively drains UDP bursts beyond the 256-datagram soft budget.
  • Arena KCP uses MTU 1200 with expanded per-remote UDP/KCP progress diagnostics, while Unity Mirror Transport reliable batching now defaults to 1024 bytes.
  • Unity hosted KCP and raw UDP unreliable diagnostics now emit structured, observe-only warnings for high latency and high datagram or byte rates.
  • Unity Mirror Transport now emits observe-only warnings for large reliable payloads and deep inbound queues while keeping per-payload summaries at Debug.
  • High-latency, high-traffic, and Mirror payload/queue warnings remain observe-only and do not change networking behavior.
  • Anomalies are logged immediately when first observed, summarized at most once every 30 seconds while ongoing, and high-latency/high-traffic recovery is logged once after a five-second quiet period.
  • Published Unity SDK 0.2.13 packages for the main SDK, Mirror transport, Compliance and GameKit modules.
  • Reorganized the main Unity package source into Core, Platform, Capabilities, Multiplayer, Diagnostics, and Internal categories. Public APIs, namespaces, assembly identity, and Unity asset GUIDs are unchanged.
  • Unity in-game ready state APIs now live on IGPRuntimeManager as SetGameReadyAsync and GetGameReadyStates. They reuse Arena player state at Player.State["gameReady"]; batch queries read the current room snapshot.
  • Removed the Mirror Transport ready APIs and the dedicated KCP 41004 ready message path. Game ready state does not control Mirror connections.
  • Runtime Manager diagnostics now use the shared IGPLog pipeline, including Info game-ready logs under scope=game-ready.
  • Unity GameKit adds IGPProfile.GetProfileAsync for fetching the signed-in user’s complete current profile through the desktop-owned user context.
  • Desktop session command GetDesktopUserProfile (22) returns profile JSON including avatar and background selections, avatar-frame render metadata, bio, name-change state, activity time, and pending nickname review state.
  • Unity keeps avatar PNG retrieval on the existing GetDesktopUserAvatarAsync path while Profile exposes the selection metadata and public media URLs returned by desktop.
  • Published Unity SDK 0.2.12 packages for the main SDK, Mirror transport, Compliance and GameKit modules.
  • Unity hosted data-plane descriptors now carry raw UDP unreliable lane metadata (unreliableUdpHost, unreliableUdpPort, unreliableUdpToken, unreliableUdpExpiresAtUnixMs, unreliableUdpPayloadMaxBytes), while normal IGPNetwork.SendData and IGPNetwork.SendReliableData remain reliable KCP.
  • Unity SDK adds an internal raw UDP unreliable client for Mirror transport, including token hello/ack, session-targeted envelopes, negotiated payload limits, and receive dispatch.
  • Unity Mirror Transport now defaults Channels.Unreliable to raw UDP through the Use Raw UDP Unreliable Lane toggle; disabling the toggle restores the legacy all-KCP reliable path.
  • Unity Mirror Transport reports the unreliable packet max from the UDP lane (default 1200 bytes) when the raw lane is enabled.
  • Unity GameKit adds a desktop-owned Share module that submits versioned text, multi-image binary payloads, and game-defined extension data through desktop session command RequestDesktopShare.
  • Desktop session command requests now support binary contentBytes payloads, and the SDK frame limit is raised to 16 MiB so Share can send up to 10 MiB of raw image bytes.
  • Published Unity SDK 0.2.11 packages for the main SDK, Mirror transport, Compliance and GameKit modules.
  • Unity IGPConfig.debugLogging is now an IGPLogLevel dropdown (Off, Error, Warning, Info, Debug) with minimum-level filtering, so projects can keep warnings/errors without logging every network payload.
  • Unity Mirror Transport now keeps low-frequency Info summaries for reliable payloads over 16 KiB or expected to fragment, including direction, peer, original/wire bytes, compression state, and estimated fragments.
  • Unity RTT HUD diagnostics now show UDP datagram rates, packet totals, and socket byte totals alongside App RTT, KCP srtt/rto, 1-second Queue averages, and 5-second Q peak values.
  • Rebuilt the Unity 0.2.11 packages so KCP/RTT diagnostics stay observational: heartbeat IsKcpAlive no longer gates P2P/Mirror sends, and reading KcpTransportStats no longer advances UDP rate sampling.
  • Published Unity SDK 0.2.10 packages for the main SDK, Mirror transport, Compliance and GameKit modules.
  • Unity Mirror Transport now defaults connection retry attempts to every 60 seconds, connection timeout to 300 seconds, and peer silence timeout to 300 seconds.
  • Unity hosted KCP now supports binary envelope v2 for reliable chunk payloads, while preserving the existing JSON/base64 fallback path.
  • Unity Mirror transport now adds compression decision diagnostics and a separate reliable batch threshold for Mirror message coalescing.
  • Unity KCP send and receive windows are now configurable, with focused protocol/runtime tests covering the new binary reliable chunk behavior.
  • Published Unity SDK 0.2.8 packages for the main SDK, Mirror transport, Compliance and GameKit modules.
  • Unity SDK logs now include a per-process runId and startup event=session-start summary with app, SDK, platform, transport, endpoint, room, and local player context.
  • Unity KCP and P2P diagnostics now use explicit localPlayerId, sourcePlayerId, and targetPlayerId fields, add heartbeat timing details, and log payload size/checksum summaries without full base64 payloads.
  • Published Unity SDK 0.2.7 packages for the main SDK, Mirror transport, Compliance, and GameKit modules.
  • Unity achievement unlock and progress calls now generate an eventId when callers omit one, so desktop-session achievement uploads have a default idempotency key.
  • Unity achievement progress reports now accept the optional progressValueMode field for SET versus INCREMENT semantics.
  • Published Unity SDK 0.2.6 packages for the main SDK, Mirror transport, and Compliance modules.
  • Unity internal hosted session, KCP, P2P, and hosted realtime logs now share the structured [IGP SDK] format with timestamp, level, scope, path, and event fields while remaining gated by IGPRuntimeManager.DebugLogging.
  • Unity KCP receive-drain diagnostics now include payload, payload byte, frame, queue, RTT, and window snapshots in the unified SDK log stream.
  • Unity Mirror Transport now compresses payloads from 2 KiB by default before SDK size classification, reducing large-message pressure earlier.
  • Published Unity SDK 0.2.5 packages for the main SDK, Mirror transport, and Compliance modules.
  • Unity hosted KCP now emits structured [IGP KCP] diagnostics for handshake, UDP/KCP receive, send failures, heartbeat RTT, and internal queue/window state.
  • Unity IGPKcpClient.DiagnosticsSummary now exposes a readable KCP network snapshot for diagnostics exports without parsing console logs.
  • Published Unity SDK 0.2.4 packages for the main SDK, Mirror transport, and Compliance modules.
  • Unity hosted KCP now emits only control and data transport channels, matching Arena’s current control/data queue split.
  • Published Unity SDK 0.2.3 packages for the main SDK, Mirror transport, and Compliance modules.
  • Unity Mirror Transport now exposes PeerSilenceTimeoutSeconds, defaults peer silence detection to 120 seconds, and keeps the value clamped to at least 1 second for long payload or reconnect-heavy sessions.
  • Unity IGPNetwork now emits peer activity when inbound payloads or reliable chunks are accepted, allowing Mirror Transport to refresh peer silence timers while large reliable messages are still being reassembled.
  • Unity Mirror Transport logs now include timestamps when debug logging is enabled, making transport events easier to correlate with game and platform logs.
  • Published Unity SDK 0.2.2 packages for the main SDK, Mirror transport, and Compliance modules.
  • Unity IGPNetwork can now disable retaining incoming packets for polling when an event-only consumer such as Mirror Transport is bound, preventing duplicate receive queues from accumulating the same realtime data.
  • Unity Mirror Transport now follows IGPRuntimeManager.DebugLogging as its only logging switch, and stays silent when no Runtime Manager is bound.
  • Unity hosted KCP now clears pending large-payload reassembly state when Arena sends reliable-message-aborted, and ignores late chunks for the same reliableMessageId until the reassembly timeout window expires.
  • Unity hosted KCP now separates control, data-small, and data-large transport channels so large reliable fragments do not share the same send queue with ordinary small payloads or control notifications.
  • Ordinary p2p small payloads keep the existing binary envelope path, while large reliable fragments continue to use JSON chunk metadata for SDK-side reassembly.
  • Arena reports data-large queue overflow with reliable-message-aborted control messages, and the Unity SDK recognizes and logs those control events.
  • Mirror Transport payload compression is now enabled by default with a 16 KiB threshold before SDK size classification.
  • Published Unity SDK 0.2.0 packages for the main SDK, Mirror transport, and Compliance modules.
  • Published Unity SDK 0.1.11 packages for the main SDK, Mirror transport, and Compliance modules.
  • Unity Mirror transport reconnect windows now use a 30-second connect timeout and 30-second peer silence timeout while keeping connect requests throttled to at most once every 5 seconds.
  • Unity Mirror transport pending connect requests are now throttled to at most once every 5 seconds without changing the existing control payload format.
  • Repeated ClientConnect() calls for the same pending host now keep the current retry window instead of resetting it and sending another connect request.
  • Unity Mirror transport connection handshakes now carry a connect attempt id, so stale or repeated ConnectAccept packets cannot fire duplicate client connected callbacks.
  • Published Unity SDK 0.1.9 packages.
  • Published Unity SDK 0.1.8 packages.
  • Rolled back Unity IGPNetwork to the direct KCP send path through IGPRuntimeManager.SendP2PMessage, removing SDK-side outgoing reliable scheduling and send-queue backpressure.
  • Removed network diagnostics summaries, KCP queue diagnostics, RTT congestion filtering, and the diagnostics overlay that no longer apply after the rollback.
  • Restored the Unity P2P receive buffer to an unbounded ConcurrentQueue, and removed IGPNetworkResult.kErrorSendQueueFull plus the matching Mirror transport disconnect handling.
  • Removed tests and documentation for the reverted bounded packet queue, outgoing scheduler, KCP diagnostics, and error code.
  • Published Unity SDK 0.1.7 packages.
  • Unity hosted data-plane attach is now single-flight per roomId + playerId, preventing concurrent duplicate descriptor requests and repeated KCP session replacement.
  • Unity Direct KCP data-plane now reports connected only after kcp_handshake_ack; reconnect closes the old KCP session first, retries with 500ms -> 1s -> 2s, and discards callbacks from stale attempts.
  • Unity runtime classifies STATE_NOT_FOUND, INVALID_STATE_SCOPE, INVALID_REQUEST, and FORBIDDEN as business errors. STATE_NOT_FOUND applies defaults for common global state keys and no longer surfaces as a connection-service failure.
  • bridge/contracts/data-plane.md now documents data-plane single-flight, reconnect close ordering, handshake ack, and stale-attempt semantics.
  • Added the PREVIEW environment to the Unity SDK. It connects to the IndieGamesPass Preview desktop client and \\.\pipe\igp-desktop-sdk-preview.
  • Added a Rematch button to the Unity MirrorTransportDemo debug panel, plus Unity hosted-session rematch send regression coverage for command code 16.
  • Unity reliable data sending now drains by available KCP WaitSnd capacity instead of a fixed byte-rate/token bucket, with a fallback per-drain cap when WaitSnd is unavailable.
  • Unity reliable send queues now return kErrorSendQueueFull when capacity is exhausted. Mirror transport treats this as reliable-channel loss and disconnects the affected peer so state can be rebuilt cleanly.
  • Unity Mirror transport now prioritizes small reliable payloads, stops silently dropping inbound queued transport messages, detects 10-second inbound peer silence, and best-effort flushes disconnect packets on shutdown.
  • Unity reliable reassembly now evicts the oldest partial message under inflight/buffer pressure instead of throwing, and reports reassemblyEvicted in network diagnostics.
  • Unity hosted data-plane status now recovers from stale error state when KCP is still alive, avoiding misleading status after transient transport errors.
  • Added stable/raw Unity KCP RTT statistics. If a heartbeat is sent while KCP already has queued data, that sample is marked congested and only contributes to LastRTT, RawAvgRTT, and diagnostics instead of polluting the normal AvgRTT latency display.
  • Added rttLastMs, rttAvgMs, rttRawAvgMs, rttCongested, and pingQueueDepth to Unity network diagnostics so short spikes can be classified as game-payload queueing, real network variance, or receive-side backlog.
  • Split Unity network diagnostics logging and the on-screen overlay into separate switches. EnableNetworkDiagnostics enables sampling/logging only, while ShowNetworkDiagnosticsOverlay controls the debug panel, so logging can stay on without automatically showing debug UI.
  • Added an outgoing scheduler for Unity point-to-point reliable messages. Reliable fragments are released over frames using a token bucket, per-drain payload cap, and WaitSnd high/low watermarks, reducing the risk of Mirror or large payload bursts flooding KCP. Diagnostics now include netOutQueue, netOutSent, and netOutThrottle.
  • Increased Unity KCP receive burst draining and grow the KCP receive buffer when needed, preventing valid larger messages from staying stuck at the receive-queue head. Diagnostics now include recvLimit, recvBufGrow, and recvOversize.
  • Stopped logging a normal RTT line for every KCP pong to avoid high-frequency logging amplifying Unity main-thread jitter during short network bursts.
  • Added optional Unity network diagnostics for WaitSnd, Mirror produced counters, KCP out/recv, hit64, pktQueue, and reassembly, plus a diagnostic overlay.
  • Bounded the Unity P2P polling compatibility queue so event-only integrations cannot grow the SDK queue without limit.
  • Clamped negotiated reliable chunk sizes so JSON/base64 wrapped chunks fit within the KCP frame limit.
  • Moved Unity network callbacks outside the SDK network-state lock to reduce SDK-side amplification when game callbacks do heavy work.
  • Switched Unity runtime version reporting to the explicit package version to avoid package/version detection mismatches.
  • Unity hosted sessions now reset the KCP data plane and P2P session state when a same-room rematch returns to waiting, preventing the next round from reusing stale data-plane state.
  • Added hosted bootstrap requests during Unity desktop session attach, allowing IGPRuntimeManager to fetch hosted-room initialization parameters from desktop and simplify hosted-mode integration.
  • Updated IGPDesktopSessionClient / IGPDesktopSessionProtocol with hosted bootstrap request and response models plus generated protocol constants from the root igp-proto source.
  • Added a Unity same-room in-progress map change event. Games can receive map changes through IGPMultiplayerRuntime.onMapChanged.
  • Added IGPMapChangeData, including previous and next mapPublicId / mapVersionId plus the updated room snapshot.
  • Updated Unity quickstart, event reference, room lifecycle sample, troubleshooting, and website room docs with in-progress map change integration notes.
  • Unity achievements now include an API to clear all achievements for the current game and return the clear result.
  • The Unity Mirror transport now defaults to compatibility with Mirror v89.0.0 and newer. v90.0.0 or newer remains recommended.
  • Added desktop session protocol compatibility checks during attach, with a clear upgrade error when desktop is too old or incompatible.
  • The SDK now uses the capability list returned by desktop to decide whether a feature can be called, avoiding later failures.
  • When the SDK starts desktop, production builds now only launch the trusted IndieGamesPass desktop app; development builds can still point to a local debug desktop.
  • Unity Editor attach now falls back to the current Unity Editor process path when no game executable debug path is configured, and desktop validates the appId through SDK debugging rules.
  • Unity SDK initialization is now explicit. Games should call InitializeAsync() directly.
  • IGPRuntimeManager now auto-attaches or creates IGPConfig in the Unity Editor.
  • Desktop session, host bridge, and hosted session protocol constants are now generated from a shared source to reduce drift.
  • Unity SDK docs were updated for the latest initialization and Editor debugging flow.
  • Added the optional Unity compliance package cn.indiegp.sdk.unity.compliance for real-name verification, anti-addiction events, and status updates.
  • Added compliance APIs for age group and remaining play time so games do not need to calculate them locally.
  • Real-name verification and anti-addiction network or service errors are now handled as blocked entry, with the default message “network or service error”.
  • Improved Unity SDK handling for local communication, Editor debugging, and offline authorization cache safety.
  • Changed Unity SDK release artifacts to .unitypackage files so they can be imported directly through Unity Editor’s Import Package flow.

Initial SDK release.

  • Provided core Unity SDK capabilities, including startup connection, achievements, room lobby, realtime messaging, state, and RPC.
  • Provided the optional Unity Mirror transport package for Mirror-based multiplayer scenarios.
  • Provided initial packages, sample projects, and integration docs for first-round integration and validation.