Changelog
Notable changes between SDK versions.
Versions follow semver. Format borrows from
Keep a Changelog. The currently shipping
version is shown in the Get it button on every page of these docs and is
always whatever packages/sdk/package.json reports at build time.
When something in here surprises you mid-upgrade, check
Migrating from gamee-js — most breaking changes from the
legacy SDK are documented there in detail.
v3.0.0 — 2026-05-13#
The first stable release of the rewritten SDK. Wire-compatible with the
legacy gamee-js platforms (iOS, Android, web), but the JavaScript surface
is breaking — there is no compatibility shim.
Added#
- Typed Promise API. Every method returns a
Promise<T>; every event payload is typed. - Capability system. Declare every gated feature
(
saveState,rewardedAds,logEvents,missions,gems,platformExtraLife) ininit({ capabilities }). Gated methods reject synchronously withCAPABILITY_MISSINGwhen the capability is missing. See Capabilities. - Typed errors. Every failure is a
GameeErrorwith a branchablecode. The seven codes (VALIDATION,CAPABILITY_MISSING,BRIDGE_TIMEOUT,BRIDGE_ERROR,BRIDGE_OVERFLOW,INVALID_STATE,NOT_SUPPORTED) form an exhaustive union. hasPlatformContext()synchronous utility — returnstrueonly when the page is loaded inside a GAMEE host (iframe, iOSWKWebView, AndroidWebView). Guard your boot with it. See Utilities.sdk.platformgetter — read the current platform afterinit()resolves.@gamee/sdk-test-utils—MockBridgefor unit-testing games without a real platform. See Unit testing.- Bundled emulator with a live bridge-traffic panel. Open from any
docs page or
/emulator. - Local validation —
logEvent(24 char name / 160 char value cap),updateScore(finite score, non-negativeplayTime), andupdateMissionProgress([0, 100] range) all validate at the call site. SdkOptions—allowedOrigins,requestTimeoutMs,maxPendingRequests,silentMode, custombridge. See Configuration.- AI-agent briefing. Drop the
llm-contextbundle into your repo (asCLAUDE.md,.cursor/rules/,AGENTS.md, …) and your AI tool gets every method, event, error code, and wire detail in context. Also discoverable at/llms.txtand/llms-full.txtfor tools that follow the llmstxt.org convention.
Changed#
init()is one-shot per SDK instance. A second call rejects withINVALID_STATE. UsecreateSdk()to spin up a fresh instance (mostly in tests). See Methods →initis one-shot.- Subscribe before
gameReady(). The SDK no longer queues events for late subscribers. See Events → subscribe first. - Events auto-ack. You no longer call
ev.detail.callback()— the SDK acknowledges every inbound event itself. - Method signatures.
gameOver,updateScore,logEvent, and others now take a single options object (with sugar shorthands for the common case). The full mapping is in the migration guide.
Removed#
gamee.controller.*— games are fullscreen; wire DOM input yourself. See the controllers → native input table.gamee.share()— was a stub ingamee-js.gamee.gameLoadingProgress()— render your own loading UI.gamee.requestPlayerData(),gamee.requestPlayerReplay(),gamee.requestPlayerSaveState(),gamee.requestSocial(),gamee.requestBattleData()— no platform support. ReadinitResponse.gameContextfor battle/mission context instead.- Capabilities
ghostMode,replay,playerData,socialData— the platform retired the underlying features. - Events
ghostShow/ghostHide— gone withghostMode.
Wire protocol#
The wire protocol is unchanged from gamee-js. Existing host
implementations (iOS, Android, web) need no updates. The wire-level field
names are documented in Architecture → four traffic patterns.