Puppy Save – The Friendliest Save Game & Data Persistence


SLOTS, PROFILES, TRANSFER - Numbered slots and named profiles, each an independent file ... VERSIONING ... - WebGL flushes to IndexedDB after every successful write, so a closed tab keeps ...


by Bonez&Carrots


Price History +

Saves any type that Unity can serialize to a JSON file. Map a variable once, then decide when it writes. Whole objects, scene state, and a verified backup that repairs a corrupt save.

STORAGE

- A plain JSON file written with JsonUtility, in Unity's standard persistent data folder

- Readable, diffable, and hand-editable, with a save file editor included

- Optional subfolder, so your saves sit apart from other packages

- Profiles are separate files that sort together, for example save.json and save.slot2.json


SAVING

- Map any type Unity can serialize: primitives, strings, enums, Vector3, Color, your own [Serializable] classes and lists

- Three calls to learn: Map, Load, Save. Nothing is written until you call Save

- Enum keys or string keys, stored by name, so reordering an enum is safe

- Pass owner: this and a mapping drop with the destroyed object, so a save after death never reads a corpse


SCENE OBJECTS, NO CODE

- SavableObject component: tick the transform, the active state, and the script fields to keep

- Runtime-spawned objects respawn on load, destroyed ones stay gone

- Registry builder scans and wires the prefabs for you


WRITES THAT SURVIVE A CRASH

- Temp file, read back, verified, then swapped in

- Timed backup file with automatic fallback when the main file fails to parse

- Save() returns false on failure, and OnSaveFailed carries the reason


WHEN IT WRITES

- Save on quit, on pause, and on focus lost, each toggled separately

- Auto-save interval, plus a dirty flag so you only write when something changed


SLOTS, PROFILES, TRANSFER

- Numbered slots and named profiles, each an independent file

- Export and import a save as a string, verified before it is accepted


VERSIONING

- Bump Game Data Version and fix old files on the way in

- Rename keys, reshape values, remove keys, all from one migration hook


SESSIONS

- Total play time across every launch, time away since last session, consecutive day streak

- Settable time source, so server time can replace the device clock


SECURITY

- Optional file scrambling with a tamper check, keyed by a project password


PLATFORMS

- WebGL flushes to IndexedDB after every successful write, so a closed tab keeps progress

- Works in Built-in, URP, HDRP, and custom pipelines. No rendering code, no dependencies


EDITOR

- Setup window, save file browser and editor, and a Project Settings page

- Live panel in play mode: profile, values in memory, unsaved state, file name and size

- Full C# source, one namespace, offline PDF documentation

Unity ships with PlayerPrefs, and it holds three types. Puppy Save writes a real JSON file, holds anything Unity can serialize, and never writes behind your back.


You map a variable once, telling Puppy Save how to read it and how to write it back. From then on, it is saved. Nothing reaches disk until you call Save(), so you decide whether that is on a checkpoint, on a menu close, on quit, or on a timer.