Slot-based save and load with its own JSON engine and zero external dependencies. Atomic writes,
backups, optional encryption, scene state from a component you tick — local files or Firebase cloud.Pipeline-agnostic: no shaders/materials; Built-in, URP and HDRP. Zero dependencies (own JSON engine,no Newtonsoft.Json). Optional modules compile only when their Unity module or SDK is present:converters (uGUI, TextMeshPro, Physics, Animation, Particles, Audio) and Firebase cloud backends(Firestore, Realtime Database). Mono and IL2CPP. WebGL NOT supported. Unity 6000.2+.Beasty Save System saves and loads your game without dragging anything else into your project.NO DEPENDENCIESIt ships its own JSON engine. No Newtonsoft.Json, no third-party DLL, nothing to version-conflict with what you already have. Import it into an empty project and it compiles.A RESULT YOU CAN CHECKEvery call hands back a typed result instead of throwing. A save that failed says so — it does not look like a save that worked. That one detail is the difference between a player who sees "could not save" and a player who closes the game believing their progress is safe. var settings = new BeastySaveSettings { Folder = "Saves", Extension = "save" }; SaveResult saved = BeastySave.Save(myData, "slot1", settings); if (!saved.Success) Debug.LogError(saved.Message); LoadResult loaded = BeastySave.Load("slot1", settings); if (loaded.Success) Use(loaded.Value); else if (loaded.BackupAvailable) BeastySave.RestoreBackup("slot1", settings);SCENE STATE WITHOUT WRITING A SERIALIZERDrop a BeastySaveable on an object and tick the components you want persisted — including inactive objects, and several components of the same type on one object. A BeastySaveManager in the scene saves and loads all of them at once, straight from a uGUI button. Objects you spawn at runtime get a stable id of your choosing, so a chest you instantiated finds its own state again next session.It saves what Unity itself would serialize: public and [SerializeField] fields, including private ones inherited from a base class, plus arrays, List, Dictionary, HashSet, SortedSet, Queue and Stack, and the Unity value types (Vector, Quaternion, Color...).SAFE BY DEFAULTAtomic writes: the file is written to a temp and swapped in, so a crash mid-write cannot leave half a save behind.Backups: the last good version of each slot is kept, and a corrupted slot can be restored from it. Saving on top of a damaged slot does not destroy the recoverable copy.Strict loading is all-or-nothing: if any component fails, nothing is applied and the world is left exactly as it was. Tolerant loading skips the offending field, reports it in Warnings, and loads the rest — the escape hatch for when you rename a field mid-production.Optional AES-256 encryption with a random IV and a key derived with SHA-256. It is obfuscation against casual save editing, not real security, and the package says so out loud: the key ships inside your game.And it tells you what it did: every save, load, delete and restore logs its slot, size and timing — with a Verbose mode for chasing bugs — in the editor and development builds, silent by default in a release build.LOCAL FILES OR THE CLOUDSaves go to local files by default — or to a database: pick a storage backend from a dropdown on the Beasty Save Manager. The Firebase modules (Cloud Firestore and Realtime Database) compile only when the Firebase SDK is in the project — nothing to set up beyond importing it — sign the player in anonymously, and store each user's saves under their own id. The same slot API works against any backend, async-first: a synchronous call on a cloud backend comes back as a typed error instead of blocking, and the manager's UnityEvent entry points route asynchronously on their own. Want your own endpoint instead? Implement IBeastySaveStorage and register it, or use SaveToJson / LoadFromJson and ship the JSON wherever you like.CUSTOMIZABLEThe converter layer is open: write a converter for your own type, or replace the one for a Unity type, and the pipeline picks it up. The settings object (folder, extension, encryption, strict mode, storage backend) is passed per call, so an autosave and a manual save can behave differently in the same project.Genre-agnostic — it persists C# objects and scene components, so it fits an RPG, a survival game, a visual novel or an editor tool equally well. It is the same save system that ships inside Beasty Visual Novel, extracted and usable on its own.Documentation: https://bauflowbeasty.github.io/Zero external dependencies: own JSON engine, no Newtonsoft, no DLLs.Slot API: Save, Load, LoadInto, SaveAsync, LoadAsync, Exists, Delete, ListSlots, ReadMeta, RestoreBackup — each slot utility also available async (ExistsAsync, DeleteAsync, ListSlotsAsync, ReadMetaAsync, RestoreBackupAsync).Typed results (SaveResult / LoadResult / SaveResult) with an error code and message. The API never throws at you.Pluggable storage backends: local files by default, or pick another backend from a dropdown on the manager (BeastySaveSettings.StorageId). Custom backends implement IBeastySaveStorage and register in BeastySaveStorageRegistry.Firebase cloud modules — Cloud Firestore and Realtime Database — compiled only when the Firebase SDK is present, with automatic anonymous sign-in via Firebase Auth. Saves are stored per user under users/{uid}/saves/{slot}; the editor keeps the required scripting defines in sync automatically.User identity seam (IBeastyUserProvider / BeastySaveUsers) decides whose saves these are; ScopeByUser also scopes local files per user.JSON without files: SaveToJson / LoadFromJson (full integrity envelope) and ToJson / FromJson (clean payload) for custom endpoints.Save Mode on the manager: Synchronous or Asynchronous for the UnityEvent-friendly SaveAll / LoadAll / DeleteSlot; cloud backends always run async, and a sync call on an async-only backend returns a typed BackendRequiresAsync error instead of blocking.Atomic writes (temp file + swap) and per-slot .bak backups with recovery.Optional AES-256 encryption: random IV, key derived via SHA-256, plaintext files rejected when encryption is on. Obfuscation, not real security.Strict loading (all-or-nothing rollback across the scene) or tolerant loading (skip the broken field, report it, keep the rest).BeastySaveable component: persist the components you tick, including inactive objects and several components of the same type on one GameObject.BeastySaveManager: SaveAll / LoadAll for the whole scene, callable from a uGUI button, plus Register(go, id, components) for objects spawned at runtime.Serializes public and [SerializeField] fields (including inherited private ones), arrays, List, Dictionary, HashSet, SortedSet, Queue, Stack and Unity value types.Optional converter modules, each gated behind the Unity module it needs so a project without it still compiles: audio, uGUI, particles, animation, TextMeshPro, Physics 2D and 3D.Custom converters: implement your own for any type, or override a built-in one.Editor: a status-card inspector on the manager (active backend, user session, last save/load result) with the two decisions — Storage and Save Mode — up front, a Save Manager window grouped by role (Backend, Location, Security, Reliability, Versioning, Logging) with contextual help, and a slot browser (list, inspect, delete, restore a backup).Logging you control: an Auto / On / Verbose / Off dropdown on the manager (Auto = on in the editor and dev builds, off in release), every line tagged [BeastySave], and a pluggable sink to route logs to your own console or a file. Results report BytesWritten and MigratedFrom for your own UI.Mono and IL2CPP, verified against a real IL2CPP build. Compiles warning-free on every Unity 6 generation, including 6.5.Full C# source included. Test suite included.AI was used as a reviewer and as a writing assistant, under my direction and review:Code review and auditing: AI agents were used to audit the codebase adversarially (looking for data loss, corruption and platform issues). Every finding was verified by hand against the code before any change was made, and the change itself was covered by tests that I run in Unity.No AI-generated art, audio or 3D content ships in this package: it contains no art assets at all.




