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-pre.1] - 2026-09-04
Added
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.