Skip to content

Changelog

This page records the concrete changes in each version.

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

  • Rebuilt Unity SDK 0.2.14 packages for the main SDK, Mirror transport, Compliance, Lying Bottle, Cloud Archive, and GameKit modules.
  • Restored hosted RPC contracts and the Unity/Godot 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, Lying Bottle, Cloud Archive, 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, Lying Bottle, Cloud Archive, 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, Lying Bottle, Cloud Archive, 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, Lying Bottle, Cloud Archive, 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, Lying Bottle, Cloud Archive, 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 SDK environment for Unity / Godot / GameMaker. 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 / Godot 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 IGPRuntimeManager.onMapChanged or IGPEventManager.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 / GameMaker / Godot 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.