Launch games using a link, embed the player in your website, or deploy your own instance.
/?url=https%3A%2F%2Fexample.com%2Fgame%2F&displayOptions&ratio=16%3A9
Use URLSearchParams to encode values. Options belong to the player query, outside the encoded game URL. /player/ is the direct embed endpoint.
| Parameter | Accepted values |
|---|---|
url | Public HTTPS game URL |
name / image | Title and HTTPS loading preview |
displayOptions | Bare flag, true/false, or JSON configuration |
ratio | auto, 4:3, 16:9, 16:10, 21:9, 1:1 |
nativeGamepad / forceController | Boolean flags; native support wins |
performance | full, auto, fast, native |
toolbar | auto or visible |
hidePageExtras | Boolean flag |
parentOrigin | Exact launcher origin for validated messages |
{
"name": "Example",
"description": "Example game",
"playUrl": "https://example.com/game/",
"image": "https://example.com/cover.jpg",
"playerOptions": {
"displayOptions": true,
"ratio": "16:9",
"performance": "auto"
}
}Extract the source ZIP. Install Node 22 or newer. Cloudflare Pages runs the server proxy; a static file host alone cannot.
npm test npm run build npx wrangler pages project create my-playdeck --production-branch main npx wrangler pages deploy dist --project-name my-playdeck --branch main
Git deployment: build command node scripts/build.mjs, output dist, framework None. Point your launcher at your new instance using its playerUrl configuration.
Host the player and launcher on different origins. Set parentOrigin to your launcher origin. Validate event.origin and event.source for player messages. Native gamepad support takes precedence over mapping; URL settings override saved defaults.
The source ZIP includes the full message protocol, deployment guide and MIT license. Each instance stores game downloads and preferences separately. Downloads and saves from the old Timebomb player do not transfer automatically.