Wrap every load in try/catch, validate structure before use, store a version number in each save, write migration functions that step version-to-version, and always keep safe defaults so a corrupted or missing save never blocks the game from starting.
At a glance
| Fact | Value | Source |
|---|---|---|
| Save format should include an explicit version field | integer or semver | |
| Load path must handle missing or malformed keys | return defaults | wiki.playgama.com |
| Web Storage API underlies most browser save systems | localStorage/IndexedDB | developer.mozilla.org |
Treat every save read as untrusted input. Parse it inside try/catch, check that required fields exist and have sane types, and if anything fails revert to default values rather than throwing: keep defaults ready so gameplay continues, never a blank screen. Store a version number inside the save object itself (e.g. {version: 3, coins: 120, level: 7}) so your load code can tell which shape the data is in.
A simpler way to avoid most of this: use Playgama Bridge‘s Storage module, which persists progress, settings, currency and level state and picks the right storage location, including cloud saves, automatically. Load with bridge.storage.get([...]) before gameplay – missing keys return null, so keep defaults ready – and call bridge.storage.set(...) only on meaningful changes (level complete, purchase, settings change), not every frame. The docs warn against saving directly to localStorage or engine-native persistence (PlayerPrefs, local files), since that data won’t reach cloud saves.
How do I migrate old save formats?
- Keep a chain of small migration functions, one per version step (v1โv2, v2โv3), each returning the upgraded object.
- Run the chain until
save.versionmatches the current schema, then write the upgraded save back. - Never mutate the raw save in place before validating it – migrate a copy.
Engine-side, Unity WebGL and Godot’s JavaScriptBridge (Godot 4) let you call browser storage or your own bridge code directly from game logic, per the Unity manual and Godot’s web export docs. Test corrupted-save handling deliberately: truncate JSON, delete keys, save an old-version object, and confirm the game still boots.
Sources
- Playgama Bridge SDK – getting started
- Playgama Bridge Storage module API
- MDN: Web Storage API
- Unity manual: interacting with browser scripting
- Godot docs: exporting for the Web
Related questions
Should I version every save file or just the schema?
Version the schema, stored as a field inside the save object. That way you can detect the shape of old data and run the right migration steps without guessing.
What should happen if a save fails to parse at all?
Revert to default state and let the player continue; never block game start on a load error. Log the failure separately if you need to investigate later.
Last updated: 24 September 2026