Bundle format
A bundle is a ZIP archive of a self-contained web game. The runtime serves it in a sandboxed frame, so everything the game needs must be inside the archive.
Required layout
index.html entry point, at the root of the archive
game.json manifest, at the root of the archive
assets/… anything else, in any structure you like
game.json
{
"id": "rosok-garage",
"sdk_version": 1,
"orientation": "portrait",
"settings": {}
}
| Field | Meaning |
|---|---|
id |
The game slug. Informational; the server addresses the game by the slug it already knows. |
sdk_version |
Integer, at least 1. The bundle refuses to publish if it is newer than the SDK the app ships. |
orientation |
portrait or landscape. |
settings |
Free-form object handed back to the game at runtime. |
Astrocade exports
An export made up of game_code.html, <slug>.html and game_config.json is repackaged on upload: the entry file
becomes index.html and a game.json is generated from the config. Push the export folder as it is. No manual
repackaging needed.
Validation
Every upload is checked before it is stored. A failed check rejects the whole push and tells you which one failed.
| Check | Rule |
|---|---|
| Structure | index.html and game.json present at the archive root |
| SDK bridge | sdk_version is an integer ≥ 1 and not newer than the app's current SDK |
| Archive safety | No paths escaping the archive root, no oversized expansion |
| Size | Within the upload and extraction limits below |
Limits
| Limit | Value |
|---|---|
| Upload size | 50 MB per bundle |
| Files per bundle | 5 000 |
| Extracted size | 200 MB |
| Versions kept | The most recent few per game; older ones are pruned with their files |
Versions and rollout
Each accepted push becomes a numbered version. A released version has a rollout percentage: the share of players served
that version. The rest stay on the previously released one, which makes a staged release possible: push at rollout: 10, watch, then raise it. Setting a version's rollout to zero pulls it back.
A game can also be pulled entirely by its operators, which hides it from the catalog and refuses new sessions.