Game Performance

Once your game is live, it's important to keep monitoring key metrics with Gaming Insights. Keeping a close eye on your metrics will help inform your feature design, give you insights about your audience, and validate that your updates are keeping your game on the right track.

Gaming Insights automatically logs many events and pieces of demographic information. You can get aggregated and anonymous information about your audience such as age groups, country, and languages spoken. You can also see engagement information such as retention and daily active users.

Thanks to functionality in the Web Hosting section, you can distribute your game package to a subset of your audience and closely follow data changes to validate that your game updates are improving your metrics.

Load Times and Performance

Initial loading shouldn't take more than 5 seconds (6MB): Instant Games need to be "instant", and players will tend to churn away if the initial loading takes too long. Only load up to 6MB of content during loading to start the game. The total size of your bundle can be up to 200MB, but we'll only load the files explicitly required by your index.html during initial loading. So make sure to use that time to only load essential assets for the first session and postpone loading of other assets for when they are needed.

Report initial loading progress: During initial loading, you should inform us on your loading progress by using setProgress.

Avoid secondary loading screens: Once the native loading ring shows completion at 100%, the player shouldn't be thrown into another waiting experience - they should be able to play right away.

Optimize for desktop: You can have a different orientation for desktop browser by using the override_web_orientation in the bundle config. This will allow you to make good use of all web estate.

Optimize for mobile: Although Instant Games works on desktop browsers, it's a good idea to optimize rendering and aspect ratio for popular iOS and Android devices.

Load resources in parallel with initializeAsync: You shouldn't wait for the initializeAsync promise to resolve before downloading your resources. You can download in parallel.

Consider code minification and/or uglification: You can reduce download size and memory requirements for code assets significantly and the obfuscation applied to the code in the process makes more difficult to cheat or steal your game code.

Player Experiences

First time player experience

Allow seasoned players to come back to the tutorial if they choose to. It can be that they haven't played the game in a while, or that they want to show the tutorial to a friend. Take note not to force the tutorial in every session, but give experienced players the opportunity to jump right into play.

Consider group settings for new players who join the group later. You should ensure that these players see the tutorial on their first play.

Use playable tutorials over text if possible. The best tutorials are those that users do not know are tutorials.

Recurring player experience

The tutorial should be accessible for new players and seasoned players, but it should be easy to skip.

Home Screen Shortcut (Android Only)

Consider prompting users to add a shortcut to your games to increase long term retention by creating an additional persistent entry point. Use the Home Screen Shortcut API to place a dialog in-game for players to save the game to their home screen on Android devices. You can incentivize this action. You can use the canCreateShortcutAsync method to determine whether the current gameplay session supports creation of a shortcut.


Localize your game: players tend to engage more with the game if they can play in a language that's natural to them. The table below will help you decide which languages to translate your game content to:

Ranking Languages Priority

Top 10 Languages

EN (English), ES (Spanish), PT (Portuguese), FR (French), AR (Arabic), ID (Indonesian), VI (Vietnamese), TH (Thai), PL (Polish), DE (German)

Must have

Next Top 10 Languages

IT (Italian), ZH (Chinese), RU (Russian), TR (Turkish), MY (Burmese), MS (Malay), RO (Romanian), NL (Dutch), SV (Swedish)

Nice to have