Avanatro Tools

SaveStack v1.1 — the save system that ships with you.

Streaming saves, HMAC-SHA256 tamper detection, machine-bound keys, 16 new features, 738 passing tests, and 0 NuGet dependencies. Built for shipping games, not prototypes.

Unity 6000+ v1.1.0 Listed on the Unity Asset Store 738/738 tests green

16new v1.1 features
738tests passing
4locales (en/de/ja/zh)
0NuGet dependencies

What’s New in v1.1

Security

  • HMAC-SHA256 Signatures — tamper-evident saves
  • Machine-Bound Keys — HKDF-derived from device identity
  • Save-File-Repair Tool — EditorWindow + headless CLI

Performance

  • Streaming Save/Load — 100MB+ payloads without RAM spike
  • Save-Batching — atomic multi-slot writes
  • In-Memory Cache — LRU with hit-rate tracking

UX & Tooling

  • Genre Recipes — drop-in schemas for RPG/Roguelike/OpenWorld/Arcade
  • Code Snippets — 7 ready-to-use C# templates
  • i18n — error messages in en/de/ja/zh
  • Migration TestBed — fluent Given/When/Then

Quality

  • Object References — JsonConverter chain for UnityEngine.Object
  • [Save] Attribute — opt-in field marker
  • Backup Auto-Schedule — rolling snapshots with FIFO
  • Stress + Fuzz Test Suites — marketing-grade audits

Why SaveStack

The Unity Asset Store has plenty of save loaders. SaveStack is opinionated about three things — each one a trade-off some other library doesn't make.

Crash-safe by default

Every write is atomic: temp file + File.Replace + .bak-fallback. If the OS dies mid-save, the previous slot stays intact. Verified with simulated I/O failures (8 dedicated regression tests).

Explicit, not reflective

SaveStack does not silently serialize every field of your MonoBehaviour. You declare what's persistent — through the static API for game data, or with drop-in saver components for transforms and animator state. The benefit: you can read your save file. You can diff two slots. You can debug a migration. No reflection black box.

Schema migration with a safety net

Every versioned load that crosses a schema boundary mirrors the original cipher bytes to <key>.premigration_v{N}.bak — exactly once, idempotently. If a migration step turns out broken, SaveSystem.RestoreBackup rolls back the player's slot. Live-service games update without burning save data.

Quick start

1

Install from the Asset Store

Download the asset in Unity via Window → Package Manager → My Assets → SaveStack → Import. SaveStack registers as a Package Manager entry automatically. No manifest edits, no manual paths.

2

Save your first value

The static facade SaveSystem covers 80% of typical use. Defaults: JSON via Newtonsoft, no encryption, OS-appropriate save folder.

using AvanatroTools.SaveStack;

// Save
SaveSystem.Save("playerName", "Player One");
SaveSystem.Save("score", 1337, slot: 0);

// Load (returns default(T) if missing — use TryLoad for explicit handling)
string name = SaveSystem.Load<string>("playerName");
int    score = SaveSystem.Load<int>("score", slot: 0);
3

Add encryption when you ship

Provider-pattern — swap any of ISerializer / IStorageProvider / IEncryptionProvider / IPathProvider independently.

var key = new byte[32];   // store + derive securely
SaveSystem.Configure(encryption: new AesEncryption(key));
// or production-default for v1.1+ IL2CPP builds:
// SaveSystem.Configure(encryption: new AesGcmEncryption(key));
AES-GCM caveat In v1.0, AesGcmEncryption is IL2CPP-only — Unity's Mono runtime does not ship .NET 8's AesGcm. The production-default for both Mono and IL2CPP today is AesEncryption (AES-256-CBC). v1.1 swaps in a BouncyCastle-backed AES-GCM for full Mono support.

What's in the box

LayerWhat you get
Static facadeSaveSystem, SettingsSystem — save, load, async, try-load, has-key, delete
Storage providersFileStorage (atomic), PlayerPrefsStorage (WebGL/mobile fallback), in-memory for tests
Encryption providersNoEncryption, AesEncryption (CBC, prod default), AesGcmEncryption (GCM, IL2CPP)
VersioningMigrationHandler, pre-migration backups, RestoreBackup
Slot opsGetAllSlots, SlotMeta (description / custom fields / playtime), SlotSave / SlotLoad
Game systemsQuestStore (5c), SetFlag/GetFlag (5d.7), PlaytimeTracker
Saver componentsPositionSaver, RotationSaver, ActiveSaver, EnabledSaver, AnimatorParametersSaver, RigidbodySaver + SaveSystemSceneController
EditorSaveSystemWindow (inspect / delete / export), SaveWizard (bulk add savers)
Tests738 dotnet NUnit + 17 Unity Test Runner. Run them yourself — CI-friendly.

Where to next