flip-submission-rules
Flip: Submission Rules
What Flip's review (policy sdk-compliance-2026-10-20-v12 plus browser-playtest-v5) accepts. Run flip check --dir . locally first. It is the same deterministic scanner, without AI review or the browser playtest.
The build directory holds index.html, game-metadata.json (name ≤80, ticker ≤16 uppercase, description ≤2000, category ≤60, icon and banner paths), flip.json (legacy flip-game.json works, never both), the server module, flip-test.json, optional asset-credits.json and bundled assets. Use relative paths only. Commit the built output; Flip never installs dependencies or runs a build.
Rejected:
- imports other than local bundled modules,
./flip-runtime-v1.jsand Flip's pinned modules (./flip-phaser-4.2.1.js,./flip-three-0.180.0.js,./flip-rapier-0.19.1.js,./flip-meshopt-0.24.0.js); CDN imports createGameSDKwith any option except{results:'return'}, or a replacement transport- dynamic code:
eval,Function, string timers,javascript:URLs, executable HTML viainnerHTML,srcdoc,on*attributes - computed or aliased SDK access, spreading or overwriting the SDK,
call/apply/bindon SDK methods - direct wallet, messaging or network APIs; any
fetchoptions argument; external URLs Math.randomin the server (usectx.sdk.requestRandomness); async or importing server code- undeclared blocks, or blocks declared but unused (rng, burn, swapping); a funding family that does not match
fundingMode - your own
.wasm(only Flip's approved engine binaries pass), workers, symlinks, Git LFS pointers,node_modules, credentials - tests and tools inside the build: every
.jsfile is scanned, unused or not - malformed asset declarations or explicitly declared third-party media without an HTTPS source URL, licence and author; missing declarations only warn
Playtest gates: flip-test.json needs real input and an assertion. The game must call signalStart() within 10 s (target 5 s), draw something, raise no runtime errors, and load at most 15 MB before connecting (target 5 MB). Money-game scenarios must exercise a settlement and emit signalSettle({requestId}) matching that confirmed server action. Game over and browser replay hooks are optional; missing, failed or nondeterministic browser replay only warns. Explicit scenario assertions still need to pass. The controller (does the game respond to flip.on('input'), and does it avoid navigator.getGamepads()), phone budget and audio checks are warnings. Manifest advice is a warning too: a legacy flip-game.json, a missing actions list, room tiers other than turn rooms, or a declared block the build never uses.