WebGL build structure
The zip must containindex.html and a *.loader.js file:
WebGLBuild/, the upload strips that
prefix for you. What fails is a zip with several top-level folders and no index.html inside any
single one.
__MACOSX/ and ._ entries created by macOS are ignored automatically.
Archive limits
These are checked before extraction, so an oversized build fails fast rather than part-way.
Upload via Developer Portal
- Developer Portal → your game → Builds → Upload Build
- Select platform (WebGL, iOS, Android)
- Set version ID — use semantic versioning (
1.0.0) or dates (2026-08-01) - Add release notes — describe what changed and how to test
- Upload zip
Upload via CI/CD
Your pipeline uses the same three steps the portal uses, authenticated with your developer API key. The zip goes straight to storage, so its size is not limited by the API.1. Ask for a signed upload URL
2. Upload the zip
3. Register the build
pending_review.
Remote content ships separately — see Addressables for
updating levels or art without a new build.
Build retention
SusaPlay keeps a limited number of builds per platform and deletes older ones automatically, along with their files.
Never deleted automatically: the
live build, a build waiting for review, and anything
uploaded within the grace period.
Subscribe to the BUILD_PRUNED webhook if your pipeline needs to know when a version was
removed. Uploading past the review cap is rejected with 409 until one of your pending
builds is reviewed or deleted, so ask for a review rather than queueing more builds.
Version states
A passing review moves a version straight to
live. There is no separate approved-but-not-live
state.
Release notes checklist
Good release notes help reviewers pass builds faster:- What changed since last version
- Known issues or workarounds
- Test account credentials if auth is required
- Which platforms were tested
