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 +
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.