YouTube Playables
The strictest channel FRVR ships to. Friction is around aspect ratios (must support all of them) and external network calls (essentially none allowed). Read in addition to the global requirements.
Source of truth: Google’s Playables certification requirements.
Design
Section titled “Design”All aspect ratios
Section titled “All aspect ratios”The game MUST be playable in every ratio: 9:32, 9:21, 9:16, 3:4, 1:1, 4:3, 16:9, 21:9, 32:9. Pillarbox / letterbox padding is acceptable; refusing to render or breaking layout is not.
No orientation lock
Section titled “No orientation lock”MUST NOT lock device orientation or posture.
Signal when the game is interactive
Section titled “Signal when the game is interactive”FRVR.tracker.gameReady() is a required method. You MUST call it the moment the game becomes interactable — when the player has reached actual gameplay or a main menu they can act on. Never call it before then (e.g. during boot, asset loading, or a logo screen).
Calling gameReady() too early — while the game is still loading or non‑interactive — is a rejection.
No branding in metadata
Section titled “No branding in metadata”Thumbnails, titles, and descriptions submitted to the YouTube Developer Portal MUST NOT include studio logos.
Integration
Section titled “Integration”Bootstrap completion
Section titled “Bootstrap completion”FRVR.bootstrapper.complete() MUST only be called once the game is interactive (main menu or playable state). See Signal when the game is interactive.
- MUST use
onAudioSuspend/onAudioResumefor mute. Host mute state is bridged automatically. - MUST NOT ship an in‑game mute button. (Stricter than the global baseline.)
Pause exclusively via SDK
Section titled “Pause exclusively via SDK”- MUST NOT use the Page Visibility API or any web API to detect pause. Use only the FRVR lifecycle hooks.
- On
onSuspend, everything stops: game loop, rendering, audio, animations, timers, network, input. - The game MUST NOT become interactive until
onResumefires. No early input, audio, or rendering.
Save data
Section titled “Save data”- MUST use
FRVR.cloudStorageandFRVR.localStoragefor all state. MUST NOT touchwindow.localStorage, cookies, IndexedDB, or engine‑level storage (UnityPlayerPrefs, Cocossys.localStorage, Construct’s local storage). Direct use is a rejection. (Stricter than the global baseline.) - Cloud save total < 3 MiB.
- Final exit save is best‑effort, capped at 64 KiB. Don’t rely on it.
- Saves from previous versions MUST continue to load.
Score submission
Section titled “Score submission”- SHOULD submit scores via
FRVR.score.setScore(value). - The submitted value MUST match the best score in cloud save.
Internationalization
Section titled “Internationalization”- MUST use
FRVR.locale.get(). - MUST NOT use
navigator.language/navigator.languages. - MUST support English. Other languages optional.
Monetization
Section titled “Monetization”YouTube is the most restrictive monetization channel:
- MUST NOT show off‑platform ads. Only ads routed through
FRVR.ads(which the channel bundle wires to YouTube’s own ad surface, currently in public preview) are permitted. - MUST NOT offer off‑platform IAP. There is no on‑platform IAP today; IAP is effectively disabled.
- MUST declare any monetization in the YouTube Developer Portal.
- The channel bundle reports
FRVR.iap.isReady() === falseandFRVR.ads.isSupported(type) === falsefor unsupported types. Gate UI accordingly.
Privacy
Section titled “Privacy”- MUST NOT make external network calls. Everything ships in the YouTube‑hosted bundle. Only network traffic from the FRVR channel bundle is permitted.
- MUST NOT attempt to work around the restriction (Google‑domain proxies, encoding payloads in image requests, etc.).
- MUST comply with the Google Privacy Policy, in addition to the FRVR privacy policy.
- MUST NOT access the clipboard except in response to an explicit user paste.
Stability
Section titled “Stability”YouTube enforces the global budgets plus:
- Initial bundle (page load →
FRVR.bootstrapper.complete()): MUST < 30 MiB; SHOULD < 15 MiB. - Total bundle: MUST < 250 MiB.
- Single file: MUST < 30 MiB; SHOULD < 512 KiB.
- Saved data: MUST < 3 MiB; SHOULD < 500 KiB.
- Load time: SHOULD be < 5 seconds to interactive.
- MUST work on the YouTube app on Android and iOS, plus Edge, Chrome, Firefox, Safari.
- MUST NOT exceed 512 MB JS heap peak.
- MUST use only relative paths.
- MUST restrict file names to alphanumerics plus
_,-,..
Trust & safety
Section titled “Trust & safety”- MUST comply with YouTube Community Guidelines.
- MUST NOT be “made for kids”. Content must suit the general 13+ audience.
- MUST NOT use deceptive titles, thumbnails, or descriptions.
- MUST comply with YouTube Developer ToS.
- MUST secure all third‑party IP, trademark, music, and personality rights for distribution on YouTube.
- Staging links are confidential and MUST NOT be shared outside testing.