The developer docs are written in English and Spanish. You are reading the English version.

Autotest

Every uploaded version is tested in a real browser before it can be submitted. You can run the same test locally first: gamealia test or the MCP tool gamealia_run_autotest.

What it does

  1. Static analysis of the files, before running anything: missing files, localhost and http:// URLs, incomplete engine exports, and security rules (other games' storage, cookies, the portal page, remote code, undeclared hosts, permissions, service workers, miners, obfuscation).
  2. Two browser runs in headless Chromium: desktop 1280x720 and mobile 390x844 with touch. Each run loads the game inside a copy of the portal frame, waits up to 15 s for loadingStop(), takes a screenshot at 5 s, clicks or taps the screen, presses Space and Enter, answers ad requests with mock ads, and watches the console and the network.
  3. A runtime audit during both runs: every request and WebSocket, popups, top-page navigation attempts and permission prompts. The test seeds fake "other game" data in storage and a fake cookie; if either leaves the game, the build fails.

The result is pass, warn or fail. A failed required check fails the version; warnings are allowed, and the reviewer sees them. Locally you get the report and the screenshots; on the server the report appears in the version page, in gamealia status and in gamealia_get_status.

Checks

CheckRequiredWhat it verifies and how to fix it
unpackyesThe zip unpacks. Upload a normal zip of the build folder (the CLI and MCP make it for you)
sizeyesAt most 250 MB and 5000 files. Remove unused assets; compress textures and audio
entryyesindex.html is at the root. Upload the build folder itself, not its parent
missing_assetsyesEvery file the html, js and css reference exists. Paths are case-sensitive
engine_integrityyesUnity, Godot and GameMaker exports have all their engine files. Upload the whole export
localhost_refsyesNo localhost or 127.0.0.1 URLs. Use relative URLs
mixed_contentyesNo http:// loads. Use https:// or relative URLs
network_blocklistnoNo requests to blocked hosts (ad networks, trackers, miners)
no_external_adsyesNo ad code that is not Gamealia's. Use Gamealia.ad.*
security_mineryesNo crypto-miner code
cross_game_storageyesNo reading or listing of other games' localStorage or IndexedDB keys. Use your own prefixed keys or Gamealia.data
cookie_accessyesNo document.cookie. Use Gamealia.data
parent_accessyesNo access to window.parent or window.top. Talk to the portal only through the SDK
remote_codeyesNo eval, new Function or script injection of code downloaded at runtime
runtime_exfiltrationyesThe seeded fake data never left the game
exfiltrationnoThe code only talks to declared hosts. Declare your servers in backendHosts
undeclared_hostsnoAt runtime the game only contacted declared hosts
permissionsnoNo permission prompts, except microphone or camera the listing declares (Device permissions)
service_workernoNo service worker registration
obfuscationnoCode is not heavily obfuscated. Minified is fine
sdk_loadedyesThe Gamealia SDK (or a shim) is loaded
sdk_inityesGamealia.init() is the first SDK call
loading_stopyesGamealia.game.loadingStop() is called within 15 s
no_console_errorsnoNo uncaught errors in the console. gamealia preview shows them
not_blankyesThe screen is not blank 5 s after loading. Draw a title screen early
input_responsenoA click or tap on the center and Space/Enter change the screen (if not, the largest visible button is tapped too)
gameplay_startnogameplayStart() is called after the first input
ad_handlingnoAd breaks the game requested were shown and finished
purchase_uinoNo purchase screens or "remove ads" buttons
own_loginnoNo login or account system of the game's own

purchase_ui, own_login and the other warnings do not block the upload, but the reviewer rejects a game that breaks the policy.

Locally

gamealia test            # build, then test; exit code 1 when a required check fails
gamealia test --json     # the full report
gamealia preview --open  # play it yourself inside the portal frame, with mock ads

The screenshots and report.json are written to a temporary folder printed at the end. The local test needs playwright-core and a headless Chromium (Local browser).

With the MCP, gamealia_run_autotest returns the screenshots as images so your assistant can see the game, and gamealia_playtest lets it play the game step by step.

When the server and your machine disagree

The server runs the same checks, with the permissions, backend hosts and isolation of the listing at the time of the upload. If you change the requested permissions, the version is tested again before you can submit it.