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.