Changelog
All notable changes to this package will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
[1.0.0] - 2026-10-19
Added
- Added documentation to help you install, configure, and use the Steamworks API package.
[1.0.0-pre.2] - 2026-09-26
Added
SteamDispatchModeparameter onSteamAPI.InitEx/InitandGameServer.InitEx, to choose who reads each pipe's callbacksSteamCallbacks.RunFrameCallbacks,SubmitCallbackandDeliverQueuedCallbacks, for reading anExternalPollpipe on your own schedule
Changed
- Renamed namespaces from
Unity.Steam.Interop*toUnity.Steamworks.*:Unity.Steamworks.Interop,Unity.Steamworks.Runtime,Unity.Steamworks.Editor, and matching test namespaces. - Renamed
SteamCallbacks.PumpIntervalMillisecondstoPollIntervalMilliseconds
Added
- New Steamworks SDK importer in Project Settings > Steamworks
- Generated
SteamworksRuntimeSettings.csin its ownUnity.Steamworks.Settingsassembly underAssets/Plugins/Steamworks/Settings, exposing the configured app id to game code and callingSteamAPI.RestartAppIfNecessaryat player startup when theENABLE_RESTART_STEAM_APP_HOOKscripting define is set and an App Id is configured
Changed
- SDK importer now only pulls in necessary native libraries
SteamworksSettingsandSteamAppIdFileCreationmoved toUnity.Steamworks.Editor; settings are stored inProjectSettings/SteamworksSettings.assetand no longer ship with a build- A missing SDK is reported in Project Settings > Steamworks and by a console warning on editor load listing each library's state
- SDK detection recognizes a correctly configured Steam native library anywhere in the project, not just under
Assets/Plugins/Steamworks - The editor logs when the SDK is imported or detected on load
Removed
- Public API for Steamworks SDK management has been removed
Unity.Steamworks.Runtime.SteamworksSettingsand itsResourcesasset; readSteamworksRuntimeSettingsinsteadCGameID.EGameIDType.k_EGameIDTypeP2PandCGameID.IsP2PFile, which the SDK does not define- The
ISteamNetworkingConnectionSignaling/ISteamNetworkingSignalingRecvContextstructs, which could not work against Valve's library;ConnectP2PCustomSignalingandReceivedP2PCustomSignalnow take these objects asIntPtr
Fixed
SteamNetworkingConfigValue_t.SetStringtags the value as a string option, not a pointergameserveritem_tincludesm_nCurrentFriendCountandm_nTotalFriendCountCGameID.AppID()andModID()match the SDK for shortcutsSteamNetworkingIPAddrworks as aDictionary/HashSetkeySteamNetworkingIdentitygetters no longer read memory the GC may have moved- Matchmaking response sinks no longer let an exception reach native code when disposed during a callback, and
AddFriendToListreads itsboolcorrectly under IL2CPP
[1.0.0-pre.1] - 2026-09-04
Added
*Asyncwrappers returningTask<TCallResult>for every Steamworks method that produces a call result.InteropHelpers.RequiredClient/RequiredGameServer, returning a generated wrapper's Steam interface pointer and throwing when it is null.
Changed
- Generated wrappers now resolve and check their Steam interface pointer directly instead of a separate client-availability check.
- Steam interfaces now resolve lazily on first use instead of eagerly in
Init(). - Native
boolvalues now marshal withUnmanagedType.U1instead ofUnmanagedType.I1.
Removed
- Android support.
Fixed
- A null interface pointer no longer crashes the process; it now throws
InvalidOperationExceptioninstead. - An interface not yet resolvable at
Init()time (e.g.ISteamInput) no longer stays permanently unusable.
[0.2.0-exp.1] - 2026-08-07
Changed
- A newly created
SteamworksSettingsasset no longer defaults its app id to 480 (Steam's public test app, Spacewar). The default is now unset, so a project that never configures one fails rather than initializing Steam as somebody else's game. Existing assets keep their serialized value and are unaffected.
Added
- The editor now writes the
steam_appid.txtthat Steam's native library reads, from the app id in the settings asset, when the project does not already have one. Previously this was only available as a button on the Project Settings > Steamworks page, so a project could look correctly configured and still fail to initialize. -steamworksAppId=<id>on the editor command line, for a project created by tooling and therefore without settings of its own. It takes precedence over an app id the project already set, and reports the difference. A project with neither an asset nor the switch is left untouched.
[0.1.0-exp.1] - 2026-07-31
This is the first release of Steamworks API wrapper.
Experimental first release: per-interface flat wrappers generated from Steamworks SDK 1.65 (ISteamUser, ISteamFriends, ISteamUserStats, ...), callback structs and constants, and a hand-written lifecycle and dispatch runtime with typed callback subscriptions and async call-result support. Includes the "Hello Steam" sample.
Every public type and member carries an XML documentation comment — a summary, a <param> per
parameter, a <typeparam> per type parameter and a <returns> for every non-void return. Where the
SDK's headers documented a declaration, that text is what the summary says; the generator supplies
one describing the member otherwise. Package documentation lives in Documentation~/index.md.