Documentation
FOR DEVELOPERS

Packaging Your Game

Every html5 game is uploaded as a single .zip archive. The checks below run automatically when your upload finalizes — if one fails, the error message you get back links back to the relevant section here.

Zip layout

Your zip must contain an index.html either at the root, or exactly one folder down (e.g. a build output directory). Deeper nesting is not accepted.

plaintext
OK — index.html at the root
mygame.zip
├── index.html
├── game.js
└── assets/
    └── sprites.png

Also OK — index.html one folder down
mygame.zip
└── build/
    ├── index.html
    └── assets/

Rejected — index.html nested deeper than one folder
mygame.zip
└── build/
    └── web/
        └── index.html

Size limits & quotas

  • 1GB hard cap per game zip, enforced server-side at upload time. Anything larger is rejected before it’s stored.
  • 20 games and 25GB total storage per developer account, across all your games combined.

Recommendation: keep builds to roughly 100–200 MB where possible. Games are unpacked and run in-browser, including on Chromebook-class hardware — a build that’s technically under the 1GB cap can still be slow to unpack and load on lower-powered devices. Compress textures and audio, and avoid bundling unused assets.

Upload frequency

Separately from the size and count quotas above, you can start at most 20 game uploads per day (new builds and replacements combined, counted per UTC day). Image, document and studio-logo uploads don’t count towards it. If you hit the cap you’ll get a 429 when requesting an upload URL, and the budget resets at 00:00 UTC. The cap is about iteration churn, not storage — if you’re re-uploading repeatedly to debug a build, test it in the dev-portal sandbox first rather than spending upload slots.

File-count cap

A zip may contain at most 10,000 entries (files and folders combined). This is well beyond what any reasonable html5 build needs — if you’re close to the limit, check for stray build artifacts or an accidentally-included node_modules folder.

Compression safety

Uploads are checked against a zip-bomb guard: no single file may expand more than 100:1 when decompressed, and the total uncompressed size of the archive is capped well above any normal game build. Ordinary asset compression (PNG, JPEG, audio, gzip’d JSON, etc.) is nowhere near this ratio — this check only ever fires on maliciously crafted archives.

No native executables

Html5 games run inside a sandboxed iframe — nothing in the package should ever need to execute outside it. The following extensions are blocked anywhere in the archive:

plaintext
.exe  .dll  .msi  .bat  .cmd  .sh  .app  .dmg  .com  .scr  .ps1  .vbs  .jar  .apk

xAPI tracking is optional

None of the above requires xAPI instrumentation — a plain html5 zip that meets the layout and size rules will publish and play fine. If you want richer progress tracking for teachers and Learning Intelligence presets, see the xAPI Overview and the SDK & Libraries docs. You can add it any time after your first publish — it’s not a blocker for review.

Quick StartAuthentication