Launch Checklist

The checks a game should pass before you launch a version, in the order they usually fail.

Work through this on the version you are about to launch, in the real preview, not in a local tab.

The Handshake

  • The game waits for ready() before the first run. Nothing scores, spawns or plays audio before it resolves.
  • Listeners are registered before ready(), so no host message is missed.
  • The SDK loads exactly once, and no copy is bundled into your code.

The Run

  • gameOver is called exactly once per run, and the loop freezes afterwards. Check a death animation cannot fire it twice.
  • play resets the run in place. Play three runs in a row without a reload and confirm the score resets.
  • Open-ended games never call gameOver. Level games pass levelAttempt on every attempt and honour data.levelIndex on restart.
  • Mute from the host chrome silences everything.

Layout and Input

  • Everything the player must see or tap sits inside the safe area.
  • Portrait games are legible in the feed at a glance; the first tap is the game, not a tutorial.
  • Touch targets are at least 44 pixels. No hover-only affordances on mobile targets.
  • The layout survives a viewport change mid-session.

Assets and Performance

  • Every asset is referenced by a literal assets/ path. Nothing is fetched from a third-party host at runtime.
  • The document loads in under three seconds on a phone. Three.js games stay under 150 draw calls and 150k triangles.
  • Audio starts only after the first interaction.

Declarations

  • Every leaderboard and achievement in remix.json has a stable key you will not rename.
  • The publish output has no declaration warnings, or you have read each one.
  • Every achievement is unlocked somewhere in game code with sdk.achievements.unlock(key), using a key from remix.json.
  • Achievement icons are square, under assets/, and read at 44 pixels.

Progression

  • Lifetime counters behind achievements live in the save and survive a reload.
  • Leaderboard times are raw milliseconds on an asc board. Every writeRecord has a submission id you reuse only for retries.
  • Every null from a platform call is handled by showing nothing extra. Play once as a guest.
  • Nothing the platform owns (unlocks, stars, best scores) is stored in game state or a save slot.

Then Launch

Play the version yourself, on a phone if it is a mobile game. Launch from the game page. Watch the first few plays on the scores endpoint or in the Studio.