CLI 0.3.3, SDK 0.1.0
CLI
opengame deployreturns once the upload is in. It prints the deploy’s page before the upload starts and exits 0 withdone: falsewhile the checks run on the server. The page shows each check as it runs, why any failed and what to change, and offers Play when the preview is ready.data.deploymentUrlcarries the address.--waitkeeps the old behaviour, staying until the checks finish, for a CI job that needs the outcome as an exit code.--timeouton its own implies--wait.--no-waitis now the default and still accepted.- The new
deploymentscommand lists every deploy of the linked game, newest first, with its status, when it ran, its size, who started it, why it stopped and its page or preview.GET /api/v1/games/{id}/deploymentsreturns the same rows.
Documentation
The engine guides distinguish upload eligibility from tested integration, with current runtime contracts, archive review rules and export caveats. The CLI, SDK and API references match the current source.The docs use OpenGame controls, including song details on the music island and a Reading settings dialog for interface sounds and cursors.The API accepts CLI 0.2.0 or newer.CLI 0.3.3, SDK 0.1.0
SDK
og.player.avatar can carry character, the body and clothes of the player’s OpenGame character, beside look. It is shared under the same profile setting and the same avatar capability, and only with a look. See Draw the player’s OG.The new @opengamehq/sdk/avatar entry names the parts and colors of the recipe, with readAvatar and watchAvatar. It is a separate entry from the core and the injected global.The signed-in local mock now has an avatar with both, and og.capabilities lists avatar while it is signed in. Games built with an earlier SDK keep receiving seed, palette and look as before and do not see character; rebuild with this SDK to read it.CLI
opengame checkandopengame deploywith--external-assetsread a large plan in one pass instead of starting a helper per file. A Kaigen game with about 13,000 cooked files used to spend over 16 minutes before printing anything; a plan that size now checks in seconds.--jsonlreports anassetsprogress stage while it hashes.opengame devtakes--external-assets, serving the plan’s files from disk, so a Kaigen or Unity build over the ordinary size limit can be played locally. When a build is too big, the message names the plan when one would fit it.opengame initrecognises a Kaigen project byhzproject.hzt, sets the build tohz/hzbuild wasm --releaseand the folder toout/wasm/release, and addsrequires.renderer: webgpu. It no longer prints the Construct and Cocos export advice for Kaigen.- A URL under the reserved
.invaliddomain, which can never resolve, no longer fails the outbound-host check.
Engines
The Kaigen starter hasopengame-kaigen.js, which connects a Kaigen game to scores, achievements, events and the player’s OG through engine log lines and dropped files. See Kaigen.The API accepts CLI 0.2.0 or newer.CLI 0.3.3, SDK 0.1.0
CLI
Every upload is a game, a world, a decomp or a mod.opengame.json takes kind, and basedOn for the game a decomp or a mod is made from, which the page shows as “Mod of Doom”. A manifest without kind is a game. The packaging guide lists them all.opengame init always writes kind. In a terminal it asks what you are making, with Game selected so Enter makes a game, and asks which game a decomp or a mod is based on. In a script, pass --kind mod --based-on "Doom". opengame deploy takes the same flags when it writes a missing manifest.The jam takes games and worlds. opengame submit stops a decomp or a mod before sending anything, and the server returns kind_not_in_jam. opengame pull brings a reviewer’s change of kind into opengame.json.CLI 0.3.2 keeps working, and the API accepts CLI 0.2.0 or newer.CLI 0.3.2, SDK 0.1.0
CLI
opengame check looks for a Defold export’s files under the names its loader fetches: the engine module under your project’s name, and the archive list inside the archive folder. Defold’s WebGPU probe no longer counts as an undeclared WebGPU renderer.A name the code only compares, such as path == "dmengine.wasm", or the end of a name built at runtime, such as exeName + '_pthread.wasm', is no longer reported as a missing file. A file on disk that matches it in a different case is still a blocker.The bundled opengame-jam skill is updated for the jam rules: any engine with a web export can enter. The submit --qa help now states that the submission goes to review, and is published unlisted only after a reviewer approves it.CLI 0.3.1 keeps working, and the API accepts CLI 0.2.0 or newer.CLI 0.3.1, SDK 0.1.0
CLI
Declare achievements inopengame.json as achievements, each with an id, a title and an optional description. check tests them against the limits, and deploy saves them once the private preview is ready. If the save fails, the deploy shows the notice achievements_not_saved, and status tries it again. A private preview cannot unlock anything, but a release that is already live can unlock a new id as soon as it is saved.Removing one from the file does not switch it off. To retire it, remove it and send active: false to the achievements route; while it is still declared, the next deploy switches it back on.deploy --no-build uploads an export that is already built when build.command cannot run on your machine. It skips the command, packages build.output as it is and says so in the notice build_skipped. --dry-run takes it too.opengame check no longer reports Unity, Godot and wasm-bindgen runtime strings as the game’s. A Kaigen licence stamp is a note, and a WebGPU declaration in opengame.json counts.opengame check names LittleJS in a minified build, and shows the KAPLAY and Three.js r186 versions.opengame dev prints the notice query_not_forwarded the first time your game’s page is opened with a query parameter like ?wave=3, because on OpenGame the game never sees it. Invites come through as multiplayer.invite.opengame check dist uses the project that names dist as the build output.On a 0.3.0 build from 23 Oct, every command that reads opengame.json stops on the field with “achievements is not a field CLI 0.3.0 knows”. Run opengame version, and if it says 0.3.0, ask the team for the 0.3.1 tarball. The API still accepts CLI 0.2.0 or newer.SDK
ScoreMeta now lists its keys and their types: label, mode, level and character are strings, and duration_ms, accuracy and combo are numbers. A submit with another key, or a number where a string belongs, used to type-check and then fail with invalid_meta. Now an object literal like that fails to compile; metadata built up in a wider Record still compiles and is still checked when it is sent. If a game sends level as a number, send String(level). Event properties are unchanged.CLI 0.3.0, SDK 0.1.0, analytics MCP 0.2.0
CLI
stats reads one ISO week, Monday to Sunday in UTC. Name it with --period 2026-W43, or leave it out for the newest complete week. --from, --to and --timezone exit 2 with range_not_supported.Filters were removed to protect player privacy, so a filter flag returns filters_removed. For one country, device, source or build, read that row of the weekly report.CLI 0.2.0 can no longer read reports: the API answers its stats with 426 analytics_cli_outdated, and its other commands still work. Ask the team for the 0.3.0 tarball. opengame upgrade does not fetch it yet. The API still accepts CLI 0.2.0 or newer for everything else.Analytics MCP
Passperiod to opengame_stats the same way. A call with from, to, timezone or a filter gets an error and no report. Version 0.1.0 cannot read the new reports.API
Creator analytics no longer take filters. Any filter parameter returns 400filters_removed, and a week’s country, device, source and build figures are rows inside its report. A date range or a timezone other than UTC returns 400 invalid_range. See the API reference.CLI 0.2.0, SDK 0.1.0, API v1
CLI
Every command has JSON output and stable exit codes.- Prepare and check a game:
init,check,dev,vendor - Sign in and check access:
login,logout,whoami,token - Deploy and play a private preview:
deploy,status,open - Submit for review and enter jams:
submit,jams - Work with an existing game:
games,link,pull,stats - Check usage and tooling:
limits,skills,upgrade,version
dev, vendor and stats were added on 21 Oct 2026 without a version change, so a 0.2.0 tarball built before then does not have them. Run opengame help --json to list the commands in your copy.In 0.2.0, stats read the same filtered analytics report as the Stats tab on your game’s settings page, and the API exported that report as CSV. An interrupted upload resumes when you run deploy again in the same folder, which uploads the archive saved in .opengame/. The API accepts CLI 0.2.0 or newer. An older CLI exits 6; run opengame upgrade to update it.SDK
og.init,og.ready, lifecycle, player identity for guests and signed-in players, analytics and leaderboards.- Rooms by code in
@opengamehq/sdk/multiplayer, with a local mock overBroadcastChannel. - Simulation helpers in
@opengamehq/sdk/netcode.
API
- Under
/api/v1: device login, deploys and their operations, your games and their metadata, stats and private previews, submissions, open jams and their entry forms, the minimum CLI version, and limits. - Under
api.opengame.gg/v1: scores, events and the player’s country.
- Under
/api/v1: analytics reports and CSV exports, webhooks and drains, your audience across games, achievement settings, experiments, embed settings, remixes, and Unity asset uploads for deploys. - Under
api.opengame.gg/v1: achievements.
Contracts
- Packaging contract 1, receipt contract 3.
- An automated check reads every release’s text, and OpenGame keeps the result. It does not hold up a preview or a publication yet; a reviewer reads the text.
Engine support, in progress
- Export guides for each engine, a shared JavaScript bridge and SDK packages for native engines.
devserves a local export with the game page’s headers. Under the2027-01contract it also serves the runtime and SDK that the live site adds to a release under that contract.vendorstages reviewed, pinned dependencies.- OpenGame has not tested any engine end to end yet, and the engine support page shows progress. Unreal is not part of this release.