For operators
Infra Games titles are own-hosted HTML5 bundles. Integrating one means pointing an iframe at a versioned launch URL on our game origin and handling a handful of postMessage events — the same contract this site uses for its own demos.
Everything below is what exists today, and today that is demo play only. There is no real-money integration yet; what is planned is at the end, marked as such.
Launch URL
A versioned, immutable path plus four query parameters:
https://infra-games-play.pages.dev/games/moonies-alter-ego/1.0.7/index.html?gameId=moonies-alter-ego&mode=demo&lang=en¤cy=FUN
| gameId | permanent kebab-case id, matching the one in the path |
|---|---|
| mode | 'demo' — the only accepted value today |
| lang | ISO 639-1 code, optional ISO 3166-1 region (en, pt-BR); defaults to 'en' |
| currency | 'FUN' — the fictional demo currency |
The version lives in the path, never in a query string, so every asset under it — the HTML included — is served immutable for a year. An operator can pin a version and know the bytes behind it will never change; publishing a fix means publishing a new version.
Unknown parameters are ignored rather than rejected. These six names are reserved so that a future real-money launch cannot collide with them: sessionID, device, rgs_url, sessionToken, operatorId, realCurrency. The demo contract implements no behaviour for any of them and cannot read them.
postMessage
Every message carries a versioned envelope (protocol: infra-games-embed, v: 1) and is validated on receipt in both directions — exact origin match, sender-window identity, then schema. Anything that fails is dropped without reply.
| Type | Direction | Meaning |
|---|---|---|
| GAME_READY | game → host | the bundle has booted and is ready to be shown |
| GAME_RESIZE | game → host | an optional size or aspect request — acting on it is the host’s choice |
| EXIT_GAME | game → host | the player asked to leave; the host navigates away |
| HOST_ACK | host → game | acknowledges GAME_READY, sent to the game origin exactly |
The bundle has 10 seconds from the moment its frame is attached to send GAME_READY. Miss that window and the host shows a retry state rather than an endless loader. The acknowledgement itself is immediate and names the host origin, which the bundle then locks onto for everything it sends afterwards.
Isolation
The game runs on a separate origin from the site, not a path on the same one — a path split would leave the sandbox with nothing to isolate. The frame withholds top-level navigation, popups and forms, which is precisely why leaving a game is a message the host acts on rather than something the bundle can do for itself.
No game code reaches the host page; the two share only the contract package, and a build probe fails if anything else crosses. Content-Security-Policy on the game origin names the site as the only permitted embedder.
What is planned
For real-money integrations, a future Infra RGS would call the operator’s own seamless-wallet API — balance, bet, win and rollback. Player funds never leave the operator. That component does not exist yet.
The intended order is independent lab certification per title, then direct operator integrations through our own RGS, then — once certification and a B2B supplier licence are in place — wider distribution through aggregators. Stake Engine is not a dependency; at most a later, optional export channel. Everything here is future-tense — no certifications or licenses are claimed today.
Contact
Want the integration pack or a conversation? Email hello@infra.games.