Requirements
- All CSS and JS inline. No external resources, no network requests (other than what the injected SDK makes on your behalf), no imports.
- Mobile portrait, touch-first: large tap targets, one-thumb play.
Include the viewport meta tag and disable text selection/tap-highlight on
interactive elements:
- Instantly playable: understandable within 2 seconds. Show a one-line instruction on screen. No menus or splash screens.
- Dark background (the feed is dark), bold readable text, generous spacing.
- Short rounds (5–60 seconds), immediately restartable by tapping.
- No
alert/confirm/prompt, no console spam, nolocalStorage(it isn’t durable in the app — useTurntable.saveStateinstead). - Plain ES5-compatible JavaScript is safest. Keep the document under ~40KB.
- Never define
window.Turntableyourself — the platform injects it before your code runs.
The sandbox and security model
Your game document receives a short-lived, game-scoped token — not the player’s session. It can only reach SDK endpoints for your own game. It can never act on the player’s account, approve purchases, or read other games’ data. Purchase confirmations happen in native UI outside your document entirely — see Economy.Manifest settings
requiresAccount— restrict your game to signed-in players. Enforced server-side (the document is never served to guests) and surfaced in the feed as ”🔒 Sign in to play”. Use it when your game depends on identity features that are meaningless for guests.