Upload a build
ZIP structure, validation, storage and asynchronous processing.
On this page
ZIP structure
index.html
game.js
assets/
scene.webp
music.oggindex.html must be at the archive root, with that exact case. Use relative asset paths so the build works under an immutable version directory on the isolated play origin. Bundle script dependencies apart from the ZUQ SDK.
Exact limits
- 50 MiB (52,428,800 bytes) compressed; 200 MiB (209,715,200 bytes) total expanded.
- At most 2,000 entries including directories. Stored and deflated ZIP entries only; no encryption or split/ZIP64 archives.
- No symlinks, special files, absolute/drive paths, traversal, hidden path components, duplicate names or case collisions. Names must be valid UTF-8 and at most 240 characters.
- Expansion ratio is capped at 200:1, with the existing 1 MiB small-entry/archive allowance. CRC and actual expanded sizes are checked.
- Allowed extensions: .html .htm .js .mjs .css .json .wasm .png .jpg .jpeg .webp .gif .avif .svg .ico .mp3 .ogg .wav .m4a .mp4 .webm .woff .woff2 .ttf .otf .glb .gltf .bin .dat .data .txt .atlas .unityweb.
Upload and processing
The dashboard shows byte upload progress, then ZIP validation and extraction progress. The existing upload endpoint returns HTTP 202 with a job ID. Owner-only job polling reports completion or a readable failure. Do not close the page until completion. After a restart an expired job may return 404; check Games before uploading again. One ZIP build processes at a time; conflicting uploads receive 409 or retryable 429.
Storage and retention
Default storage is 150 MiB per developer and 3,000 MiB across the platform; configuration can change these. The dashboard reports your actual limit. All retained builds and artwork, including unused art, count. An incoming build needs room before pruning. At most three versions per game are retained, protecting the current, live and rollback versions. Quota failures preserve previous versions.