What PersistKit does
Every capability below carries a status, and each one means exactly one thing:
Available in the package and enforced by tests · Verified exercised and passing in a named environment · Adapter required the package ships the contract, you supply the service · Roadmap planned, not shipped · Not verified reasoned about, never run · Not supported deliberately out of scope, with the reason stated
Saving and loading#
| Capability | Status | Notes |
|---|---|---|
| One line to save, one to load | Available | Persist.Save("score", 1500) / Persist.Load("score", 0) |
| Numbers, text, booleans, chars, enums | Available | Stored as text, so a save file stays readable |
| Unity value types | Available | Vector2/3/4, Quaternion, Color, Rect, Bounds, and the rest |
Your own [Serializable] classes and structs | Available | Including nested ones and lists of them |
Arrays, List<T>, Dictionary<K,V>, and their nestings | Available | T[][], List<List<T>>, Dictionary<K, List<V>> — with no wrapper class |
| Raw text and raw bytes | Available | Stored byte for byte |
| Types that bring their own format | Available | IPersistCustomValue |
| Failures returned, never thrown for an ordinary condition | Available | A result carries a code, a sentence and a next step |
| Asynchronous local save/load | Not supported | A local save is a small file write; the asynchronous operations are the cloud ones |
No code at all#
| Capability | Status | Notes |
|---|---|---|
| PersistKit Behaviour component | Available | Tick fields in the Inspector; no script |
| Save and Load chosen per field | Available | A value can be written without being overwritten, or read without being rewritten |
| Built-in handlers for Unity components | Available | Transform, RectTransform, Rigidbody, Rigidbody2D, Animator, Collider, Collider2D, CharacterController, AudioSource |
| Physics written through the body | Available | So the next physics step does not undo a restore |
| A field it cannot store is named | Available | Tolerated when PersistKit chose the fields, refused (PK-TYPE-001) when you ticked it |
Saving at OnDisable, OnDestroy, pause and quit | Available | With each platform's limits written down |
Unity objects and assets#
| Capability | Status | Notes |
|---|---|---|
| References to objects in a scene | Available | Stored as a PersistKitIdentity id, never an instance id |
| Asset references (Sprite, ScriptableObject, prefab) | Available | Stored as a registry key — never a path, a GUID or an instance id |
| Asset registry found automatically | Available | Resources/PersistKit/PersistKit Asset Registry; Instance overrides it |
| Objects spawned from prefabs at run time | Available | Persist.Spawn remembers which prefab and which instance |
| Loading the same set twice | Available | An instance already in the scene is reused, never duplicated |
| Addressables | Not supported | The registry is the table, and Instance lets you point it at your own resolver |
Slots, backups and recovery#
| Capability | Status | Notes |
|---|---|---|
| Named save slots | Available | Each with its own file, backups and description |
| Slot descriptions | Available | Never a source of truth: every report reads the save file itself |
| Rotating backups | Available | Three copies by default, one to ten |
| Recovery from a damaged file | Available | The newest copy that still works, and the result says which file was used |
| Damaged files kept for inspection | Available | Nothing is ever deleted or repaired behind your back |
| File management | Available | Exists, list, delete, rename, copy — with confirmation for anything destructive |
Versioning and migration#
| Capability | Status | Notes |
|---|---|---|
| A saved-data version in every file | Available | Checked before anything is parsed |
| A save from a newer build refused | Available | PK-VERSION-001, and the file is left exactly as it was |
| Ordered migrations | Available | Rename, add a default, remove, convert a value, or run your own code |
| Preview before applying | Available | The same report a real migration produces, writing nothing |
| Copy, migrate in memory, validate, then write | Available | A failure puts the original back (PK-MIGRATION-004) |
| A missing migration refused, not guessed at | Available | PK-MIGRATION-001 |
| Unknown keys preserved | Available | A key a migration does not mention is left where it was |
Security#
| Capability | Status | Notes |
|---|---|---|
| Integrity stamp on every save | Available | SHA-256 over the payload, checked before anything is parsed |
| Encryption and authentication on request | Available | AES-256-CBC, HMAC-SHA256, PBKDF2 with a salt per file |
| The header stays readable | Available | So the version gate and the damage check run before decryption |
| Compression when it helps | Available | Deflate, and the file says which happened |
| Protecting a save from a determined player | Not supported | The passphrase lives in your build: it is a strong lock, not a safe |
Cloud#
| Capability | Status | Notes |
|---|---|---|
| A provider contract for any service | Available | Five operations; PersistKit carries the comparison, conflicts, queue and retries |
| A folder that syncs (Dropbox, OneDrive, a share) | Verified | Real files and real interruptions in the package's own tests |
| Any REST endpoint | Verified | Conditional writes, metadata and deletion; verified over a real socket |
| An in-memory double for tests | Available | Uploads live only until the process ends, and it says so |
| Conflict detection by content, not clocks | Available | A fingerprint of what was uploaded, per slot |
| A conflict is a question, never an overwrite | Available | PK-CLOUD-004 and an explicit choice |
| Keep both | Available | The one answer that cannot lose data |
| Offline queue | Available | A save made offline is marked and sent later |
| SDK providers (UGS, Steam, Firebase, Supabase, PlayFab) | Not supported | Each needs an account, a plan or a platform SDK; none could be run here |
Editor#
| Capability | Status | Notes |
|---|---|---|
| Save folder, validation and registry tools | Available | Under Tools → PersistKit |
| Field discovery with Save and Load columns | Available | Shows what it can and cannot store, and why |
| Cloud status, upload, download, sync and conflict answering | Available | Through the same API a game uses |
| Migration preview and apply | Available | With the confirmation that rewriting a save file requires |
| Diagnostics report | Available | Versions, folder, every slot's state and size, and the last problem |
Next#
- Limitations — what it does not do, and why
- Platforms — what has actually been run
- Roadmap — what is planned, and what is not