Skip to content

v1.1.0

Choose a tag to compare

@vanhaodev vanhaodev released this 16 Oct 05:02
· 8 commits to main since this release

[1.1.0] - 2026-10-16

⚠️ Note: Save Manager depends on Encryption Manager.
Please install Encryption Manager first, otherwise the package may not work properly.


1. Via Git URL (Package Manager UI)

  1. Open Window -> Package Manager
  2. Click the + (plus) icon in the top left corner
  3. Select "Add package from git URL..."
  4. Paste the URLs below:
https://github.com/vanhaodev/unity-encryption-manager.git?path=Exported/com.vanhaodev.encryptionmanager#1.0.0
https://github.com/vanhaodev/unity-save-manager.git?path=Exported/com.vanhaodev.savemanager#1.1.0

2. Via manifest.json

  1. Open file:
    Packages/manifest.json

  2. Add these lines into "dependencies":

"com.vanhaodev.encryptionmanager": "https://github.com/vanhaodev/unity-encryption-manager.git?path=Exported/com.vanhaodev.encryptionmanager#1.0.0",
"com.vanhaodev.savemanager": "https://github.com/vanhaodev/unity-save-manager.git?path=Exported/com.vanhaodev.savemanager#1.1.0"
  1. Save the file and return to Unity (it will auto import)

What's new

  • Crash-safe & consistent: a crash while saving never corrupts or mixes saves; all keys load from the same save
  • Transactions: Save.BeginTransaction() + Commit() — save related keys together, or not at all
  • Await: await Save.SetAsync(...) / await Save.FlushAsync() — wait until data is on disk (e.g. in-app purchases)
  • TryGet: tells a new player (NotFound) apart from a broken save (Corrupt)
  • Security by default: AES-encrypted and signed; edited, swapped or renamed files are detected. SaveEncryption.SetKey(secret, previousSecrets...) to use your own key and change it in updates without losing saves
  • Hooks: SaveStarted, Saved, SaveFailed, IntegrityFailed, TransactionDiscarded — on the main thread
  • WebGL: saves spread over frames on the main thread
  • Sample: SaveHookLogger logs every hook to the Console

Breaking changes

  • New save file layout: saves written by 1.0.0 are not loaded
  • Set / SetAsync encrypt with AES by default
  • SetAsync returns Task (calls without await still work, recompile needed)

Full guide: README