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
The zip size, the file count and the total size are checked before extraction, so an oversized
build fails fast. The single-file limit is checked as each file is extracted.
Upload via Developer Portal
- Developer Portal → your game → Builds → Upload Build
- The platform is always WebGL — SusaPlay runs WebGL builds only
- Set version ID as
x.y.z, such as1.0.0, optionally with a suffix such as1.0.0-beta - Add release notes — describe what changed and how to test
- Upload zip
pending_review, or as failed with the
reason. For a private game it appears as ready
instead: ready to test, and not sent for review.
To play a build that is not live yet, use the buttons on its row:
Both work for
pending_review and ready WebGL builds. A link stops working once the build
goes live, is rejected or is deleted.
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, not through the API, up to 500 MB.1. Ask for a signed upload URL
2. Upload the zip
3. Register the build
202 with "status": "processing". It then extracts
the build in the background.
4. Wait for processing (optional)
Poll the version until it leavesprocessing and extracting:
failed version carries the reason in .data.version.failure.message. Fix the build and
upload it again with the same version number. A key with only the builds:write permission may
poll.
Changed in October 2026:
process-build used to extract the build before answering, so a large
build could time out while it still succeeded. It now answers 202 at once. A pipeline that only
checks success: true keeps working, but that no longer means the build is ready.Build retention
SusaPlay keeps a limited number of builds per game and deletes older ones automatically, along with their files.
Never deleted automatically: the
live build, a build waiting for review or still processing,
and anything uploaded within the grace period. A ready build of a private game is not under
review, so it is kept like any other build: among the 5 most recent. A failed build is deleted by your next
successful upload and does not count toward the 5.
Subscribe to the BUILD_PRUNED webhook if your pipeline needs to know when a version was
removed. Builds still processing count toward the review cap. Uploading past the cap is
rejected with 409 until one of your pending builds is reviewed, so ask for a review rather than
queueing more builds. You cannot delete a build yourself; contact support if one must be removed.
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 browsers and devices were tested
