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) in init({ capabilities }). Gated methods reject synchronously with CAPABILITY_MISSING when the capability is missing. See Capabilities.
  • Typed errors. Every failure is a GameeError with a branchable code. The seven codes (VALIDATION, CAPABILITY_MISSING, BRIDGE_TIMEOUT, BRIDGE_ERROR, BRIDGE_OVERFLOW, INVALID_STATE, NOT_SUPPORTED) form an exhaustive union.
  • hasPlatformContext() synchronous utility — returns true only when the page is loaded inside a GAMEE host (iframe, iOS WKWebView, Android WebView). Guard your boot with it. See Utilities.
  • sdk.platform getter — read the current platform after init() resolves.
  • @gamee/sdk-test-utilsMockBridge for 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 validationlogEvent (24 char name / 160 char value cap), updateScore (finite score, non-negative playTime), and updateMissionProgress ([0, 100] range) all validate at the call site.
  • SdkOptionsallowedOrigins, requestTimeoutMs, maxPendingRequests, silentMode, custom bridge. See Configuration.
  • AI-agent briefing. Drop the llm-context bundle into your repo (as CLAUDE.md, .cursor/rules/, AGENTS.md, …) and your AI tool gets every method, event, error code, and wire detail in context. Also discoverable at /llms.txt and /llms-full.txt for tools that follow the llmstxt.org convention.

Changed#

  • init() is one-shot per SDK instance. A second call rejects with INVALID_STATE. Use createSdk() to spin up a fresh instance (mostly in tests). See Methods → init is 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 in gamee-js.
  • gamee.gameLoadingProgress() — render your own loading UI.
  • gamee.requestPlayerData(), gamee.requestPlayerReplay(), gamee.requestPlayerSaveState(), gamee.requestSocial(), gamee.requestBattleData() — no platform support. Read initResponse.gameContext for battle/mission context instead.
  • Capabilities ghostMode, replay, playerData, socialData — the platform retired the underlying features.
  • Events ghostShow / ghostHide — gone with ghostMode.

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.