Changelog
Update Notice:
Please create Backups of your Project and Crystal Save Settings!
Recommended: Delete the previous version before importing the new version
Crystal Save – Version 1.6.40 – 26 Oct 2025
✨ Added
Documentation: CRYSTALSAVE_SCENE_LOADING_INTEGRATION_API.mdScene Loading Integration API - Complete system for custom scene loaders ISceneLoadOrchestrator interface with 4 lifecycle callbacks SceneLoadOrchestratorBase abstract base class Registration system in SaveManager SceneActivationPipeline hook for delayed prefab spawning
Guards against SaveData corruption during prefab populationScene Loading Guard Rails - Automatic timing validation warnings ValidatePrefabPopulateTiming() method with 4 validation checks Warns about timing issues during scene loading
🔄 Changed
Visual update for Remember Component
🐛 Fixed
Critical: RememberTransform + RememberHomeScene Bug - Fixed scene GameObjects not restoring positions
Critical: RememberParent + RememberHomeScene Bug - Fixed parented GameObjects not restoring on scene switching
Minor: PrefabManager False Warning - Reduced log noise during scene switching (
Error: "Requesting 'prefabContentsRoot' from Awake and OnEnable is not supported"Prefab Editor Bug - Fixed InvalidOperationException when adding RememberComposite in prefab mode Wrapped IsInPrefabMode() calls in try-catch to handle Unity's timing restrictions
Fixed Remember Home Scene for Remember Component
Crystal Save – Version 1.6.29 – 07 Oct 2025
🔄 Changed
Removed Debug log spam
Remember Components no longer share the same Unique ID in multiple instantiated Prefabs with Remember Prefab component
Deferred Prefab Radius Streamer: Added Debug Visualization
Crystal Save – Version 1.6.28 – 06 Oct 2025
🐛 Fixed
Fixed a critical bug that occurred when adding a Remember Prefab in Prefab View to another Prefab, which automatically added a hidden UniqueID component.
The Inspector view of the Remember Prefab now provides a one-click fix if a UniqueID component is detected. Failing to remove this component may lead to incorrect serialization or deserialization of data.
Check your Prefabs both in the Scene and in the Project window.
Crystal Save – Version 1.6.27 – 04 Oct 2025
🐛 Fixed
Fixed Quick Save
Crystal Save – Version 1.6.26 – 04 Oct 2025
🔄 Changed
Remember Prefab Inspector shows now warning and Fix button when there is a Instance Unique ID referenced in the Prefab Asset.
Hardened SaveablePrefab.RuntimeMod, it ignores now missing scripts
Crystal Save – Version 1.6.25 – 28 Sep 2025
🔄 Changed
Improved support for scene-baked Remember Prefabs
Added a demo scene for SceneBakedRememberPrefabs
Moved the Live-Conflict Resolver to the Cloud Save section
Removed Auto-Prefab Registration from Save Settings
Moved the Auto-Tag Update toggle in Save Settings into the Tag Registry foldout
Added an Addressables page to the Save Settings Wizard
Updated several tooltips in Save Settings
Enabled most Performance Settings by default
Crystal Save – Version 1.6.24 – 26 Sep 2025
🐛 Fixed
Fixed StringWrapper conversion.
Fixed Lookup Cache not deserializing correctly on the first load.
Fixed Skip Saving When Unchanged on Remember Prefabs, which was falsely returning "no change" when a Remember Component serialized a change, causing the instantiated Remember Prefab not to be restored upon load.
Fixed Remember GameObject incorrectly destroying a GameObject when switching between scenes via LoadSceneAfterSnapshotAndPopulatePendingPrefabsAsync, then saving, and later loading the saved game.
Crystal Save – Version 1.6.23 – 23 Sep 2025
🐛 Fixed
Fixed RememberGameObject Deserialization
Fixed LegacyStringWrapper
✨ Added
RememberUISlider
RememberUIToggle
Destroyed Scene GameObjects are now restored at their last location
Crystal Save – Version 1.6.22 – 22 Sep 2025
✨ Added
SaveablePrefab aka Remember Prefab supports now scene baked Prefabs
Important: When you enable Remember Home Scene for scene-baked Prefabs, make sure to set the Home Scene Mode to Last Snapshot.
🔄 Changed
Destroyed Scene GameObjects are now restored at their last location
Crystal Save – Version 1.6.21 – 20 Sep 2025
✨ Added
Deferred Remember X Component Streaming
Save Optimization 'Skip Saving When Unchanged' for Remember Prefab and every Remember Component
New Demo Scene DeferredComponentStreaming
Groundwork for Crystal Save's own Visual Scripting Solution
Crystal Save – Version 1.6.20 – 20 Sep 2025
✨ Added
Remember X Component Streaming
Save Optimization 'Skip Saving When Unchanged' for Remember Prefab and every Remember Component
New Demo Scene DeferredComponentStreaming
Groundwork for Crystal Save's own Visual Scripting Solution
Crystal Save – Version 1.6.20 – 18 Sep 2025
✨ Added
Performance settings in Save Settings
Auto-pooling support for Registered Prefabs
Streaming of SaveablePrefabs
New demo scene demonstrating streaming
Load Priority option for Remember Prefab
Tracking of Blendshape Weights for children in SaveablePrefabs (no longer requires Remember SkinnedMeshRenderer for Children)
Snapshot feature, now used in demo scenes showing Restore SingleGameObject and RestoreDestroyedGameObject
Example script showing RememberGameObject retaining active state across scene switches
Groundwork for Adventure Creator Save Module
Coroutine entry point for processing deferred prefabs by instance ID, Prefab Asset ID, Reference, and Radius
🔄 Changed
SaveablePrefabFactory now instantiates or spawns from a pool
Restore Destroyed methods for SaveablePrefabs now also apply all component data
Applied cached scene data during scene load using snapshots, restoring GameObject active states and cleaning cache entries
Replaced SaveManager.DestroyWithSnapshot calls in Dispose() with a deactivate–unregister–destroy sequence, extending cleanup to pooled children
Supabase, Firebase, and Unity Cloud Save screenshot deletions now use 10-second timeouts and non-blocking polling to prevent workflow hangs
Expanded cleanup logging to report purged counts of destroyed-ID list entries
🐛 Fixed
Addressables integration
Prevented UniqueIDValidator from flagging pooled components by skipping checks under the pool root, removing duplicate ID warnings
Cleared DestroyedGameObjects entries for restored IDs across incoming and current save data, ensuring consistent cleanup and reactivation
Crystal Save – Version 1.6.17 – 06 Sep 2025
Updated SaveSlotsRuntimeUI.OnDestroy to null-check SaveManager.Instance before unsubscribing from OnSaveSlotsUpdated.
Improved underlying SaveSlot-Check processes
Crystal Save – Version 1.6.16 – 06 Sep 2025
Remember Custom Components serializes and restores now also properties
Added optional delay to apply serialized values
Crystal Save – Version 1.6.15 – 05 Sep 2025
Please Note: Existing Crystal Save Installation - If you do not want to delete the old installation before updating:Delete the file NamePatternResolver.cs before importing this update Create a backup of your project!
Added Settings Wizard
Crystal Save – Version 1.6.14 – 05 Sep 2025
Please Note: Existing Crystal Save Installation - If you do not want to delete the old installation before updating: Delete the file NamePatternResolver.cs before importing this update Create a backup of your project!
Fixed Performance Caching Implementation in SaveablePrefab aka Remember Prefab
Crystal Save – Version 1.6.13 – 05 Sep 2025
Please Note:
Existing Crystal Save Installation: Delete the file NamePatternResolver.cs before importing this update. Create a backup of your project!
Ensured the SaveSlotManagerWindow re-subscribes to SaveManager events when entering Play Mode, preventing the window from stalling during initialization if it was left open before playing
Performance Caching in Remember Prefab and Remember GameObject is now disabled by default
Crystal Save – Version 1.6.12 – 04 Sep 2025
Fixed RestoreDestroyedAllGameObjects
Fixed newly added caching - Remember Components should now restore all data again
Performance Caching is now disabled by default as it can't be used in all situations
Fixed Race Condition in SaveSlotManagerWindow
Crystal Save – Version 1.6.11 – 03 Sep 2025
Please create backups before updating. Deleting the old installation is not required but recommended. ✨ Added
Metadata Import (Beta): You can now import metadata from save files created by another game that also uses Crystal Save as its backend. This enables you to extend stories across different game genres within a shared world narrative. A similar feature exists in The Witcher series, where save files can be imported from The Witcher 2 into The Witcher 3.
Grouped Save Slots UI: A sample Save Menu with dropdown fields.
Performance Settings in selected Remember Components (Beta): Components such as RememberGameObject and RememberTransform now include performance settings, improving load times by up to 30%.
Open Save Folder Button: Available in Save Settings.
File Name Patterns for Saves and Metadata: Use {meta:key} or {n} to automatically include in-game metadata in file names.
Slot Name Patterns.
🔄 Changed
WebGL Support: WebGL projects can now use encryption, compression, save file verification, and screenshots even when using Unity Cloud Save.
Extended Encryption: Encryption can now optionally include screenshots and metadata.
🐛 Fixed
The methods HasSaveAt, HasSave, HasSaveAsync, and HasSaveAtAsync now return the correct values when using Supabase as the save backend.
Domain Reload Issues
Known Issue: Forced Refreshes happen more frequently and may break the Save Slot Manager Window. This is affects only the Editor and not the game build.
Crystal Save – Version 1.6.10 - 28 Aug 2025
Save Slot Manager Window refreshes now slots after save and load
SaveSync and all the methods that it calls are now synchronous methods. This guarantees that the saving of the game state, metadata, and screenshots on application quit is sequentially executed and completed. (Please note: This method won't work in Cloud Save Scenarios)
No longer causes dead locks
Crystal Save – Version 1.6.09 - 27 Aug 2025
Fixed a bug in the Save Slot Manager Window where loading a saved game would show stale metadata and screenshot
Removed Debug Logs from Save Load UI
Crystal Save – Version 1.6.08 - 27 Aug 2025
Fixed Console Warning in PersistenVisbilityController - Unused Variable
Crystal Save – Version 1.6.07 - 26 Aug 2025
Fixed a minor bug in the PrefabManager causing the warning: Setting linear velocity of a kinematic body is not supported when using the RememberRigidbody component
Fixed build/rebuild button in PersistenObjectScene2
Fixed PersistentVisibilityController
Reapply at scene activation, one frame later, and again at end-of-load.
Force-enable states for visible scenes even if original snapshots were stale or a pool changed them.
Cover pooled reactivation via OnEnable.
Crystal Save – Version 1.6.06 - 26 Aug 2025
Removed pre-installed Settings
Crystal Save – Version 1.6.05 - 26 Aug 2025
Fixed script compilation error caused by new demo script SceneChanger
Fixed Remember Prefab vs. Remember Skinned Mesh Renderer issue: Material Swaps should now get applied correctly. Recommended: Stick to a single source of truth: Use either Remember Prefab or Remember Skinned Mesh Renderer to track Material Swaps
Fixed Console Obsolete Method Warnings in Unity Version 6000.3 or higher
Crystal Save – Version 1.6.04 - 26 Aug 2025
Fixed rare editor performance issue caused by SceneObjectIDEditor
Scene GameObjects with Remember Component, can now optionaly Remember their Home Scene.
This is a RAM-friendly alternative solution for Keep Across Scenes.
This feauture will only work when used with LoadSceneAfterSnapshotAndPopulatePendingPrefabsAsync" (saves the state to memory, faster (don't forget to save later)) or "LoadSceneAfterSaveAndPopulatePendingPrefabsAsync" (saves to disk immediately) instead of Unity’s own LoadScene method
PersistentObjectScene demonstrates this new feature (yellow spheres)
In Crystal Save's Save/Load UI, you can now hide save slots. You can also optionally sort Auto Saves first, followed by Quick Saves, followed by regular Saves
Crystal Save – Version 1.6.03 - 24 Aug 2025
HasSave & HasSaveAt check now if Save Slots are ready before returning a bool value
Fixed Save Buttons in Demo Scenes
Fixed Save Button in Save Slot Manager Window
Removed Debug Logs
Crystal Save – Version 1.6.02 - 23 Aug 2025
Added utility methods to sanitize file names and purge all local save data, removing PlayerPrefs keys, save files, metadata, and screenshots while logging the action
Introduced a “Wipe Local Save Data” button in the settings window that displays a confirmation dialog before triggering the wipe to prevent ghost saves
Ensure slot deletions trigger a full UI refresh, preserving metadata and screenshots for unaffected slots
Triggered a full slot refresh after completing a rename, ensuring other save slots retain screenshots and metadata when one slot is renamed
Exposed the runtime UI’s slot refresh routine so other components can invoke it directly after operations like renaming
Updated the save slot manager to avoid triggering cloud downloads when metadata and local mirrors are disabled by returning an in‑memory timestamp check instead, preventing editor hangs during save existence queries
Refactored save existence checks to run asynchronously, using await saveSystem.LoadAsync(slot) when cloud saves are enabled without a local mirror, and added legacy wrappers for synchronous callers
Introduced async slot-existence helpers (HasSaveAsync, HasSaveAtAsync, HasSaveAfterAsync, HasSaveInSceneAsync) alongside synchronous wrappers for backward compatibility
Exposed corresponding async methods in SaveManager so save checks can be awaited without blocking the main thread
Save Slot Screenshots are locked now to 16 : 9 or 9 : 16 image ratio with a max Full HD resolution. Anything larger is now cropped. WebGL Screenshots are downscaled to max 512 pixels, jpg format and jpg quality 50 to stay within the WebGL limits of the Data API.
Save Slot UI auto-disables Rename, Delete and Load Button for Empty Save Slots
Crystal Save's Save Load UI is now fully compatible with WebGL and Local Save or Unity Cloud Save
SaveManager's HasSave can now check if a Save File Exists even if it has no meta data.
Use new bool parameter hasMetaData = false if there is no meta data.
HasSave is now async
Save Load UI input field is now themeable
Crystal Save – Version 1.6.01
Fixed a Build Error in WebGL Build Targets
Version 1.6.0 (12 Aug 2025)
Update Notice:
Uninstall previous versions of Crystal Save before you import Version 1.6
OR
If you can not or do not want to uninstall the old version:
Delete ISupabaseAuthorizationResolver in Assets/Plugins/CrystalSave/Runtime/Managers/Interfaces
Delete the Supabase folder and its content in Assets/Plugins/CrystalSave/Runtime/ScriptableObjects/
Delete the SupabaseCustomFolderAuthResolver asset in Assets/Plugins/CrystalSave/Modules/Unity/Demos/Resources/
✨ Added
Added MySQL Save Backend support
Added Firebase Save Backend support
Added a LiveConflictResolver MonoBehaviour that compares local and remote objects at runtime, displays a Canvas overlay highlighting differing fields, and lets players accept the remote state, keep the local one, or merge field-by-field
Introduced a reflection-based RuntimeObjectDiffer helper to detect and apply field differences when merging conflicting objects
Added new conflict resolution options to save settings, including a flag to auto-resolve conflicts, a selectable policy, and optional metadata-based rules for fine-grained resolution decisions
Updated the settings window to expose the auto-resolve toggle, policy dropdown, and dynamic metadata rule rows with “AND” chaining support
Added a new conflictOverlayCanvas field in SaveSettings to let projects specify a canvas prefab for conflict-resolution overlays
Extended RememberMeSettingsWindow so developers can assign the overlay canvas directly in the Conflict Resolution section of the settings UI
Updated SaveManager to push the configured canvas to LiveConflictResolver when it initializes, enabling custom conflict-resolution UIs
Save Load UI: Added new OnScreenshotCaptureStarted and OnScreenshotCaptureFinished events in SaveManager with internal methods to raise them before and after screenshot capture
Save operations now invoke these events around screenshot capture, allowing external listeners to react to the process
SaveSlotsRuntimeUI and SaveSlotEntryUI subscribe to the new events and temporarily disable their canvases while screenshots are taken, hiding the UI from the captured image
Added an optional slot naming feature to SaveSlotsRuntimeUI, letting designers select a custom metadata key to name save slots or fall back to the scene name
WebGL: Added a WebGL-aware fallback in the save pipeline so that when the Cloud Save Files API returns 404, the system transparently falls back to the Data API instead of failing the save
Extended metadata handling to use the same Files-to-Data fallback logic, ensuring slot metadata persists even when the Files endpoint is unavailable on WebGL builds
Hardened screenshot cleanup so missing Cloud Save files on WebGL no longer abort the save process, logging a warning instead of throwing errors
Added exception handling and logging around Unity Services initialization so that failures (such as in WebGL builds) surface as explicit error messages instead of silent failures
Ensured Unity Cloud Save sign-in callbacks are only registered after Unity Services are successfully initialized, preventing attempts to use uninitialized services
Introduced a WebGL plugin based on the File System Access API, enabling asynchronous read/write, existence checks, and deletion of save files directly through the browser’s storage directory
Added a C# wrapper exposing the JavaScript functions to Unity, allowing binary and text file operations on WebGL builds
Updated the save system to leverage the new File System Access layer in WebGL, falling back to standard file APIs elsewhere
Ensure Unity Cloud Save is initialized after sign-in so WebGL builds can save data properly by invoking UnityCloudSaveService.Instance.InitAsync() within the cloud sign-in sequence
Added a WebGL-specific override in the binary cloud-save path so that WebGL builds encode data to Base64 and route saving through Unity’s Data service, avoiding CORS issues with the Files API
Note: Unity now synchronizes the WebGL persistent data path automatically. Crystal Save exposes a useManualSync flag in SaveSettings for legacy projects that still call FS.syncfs, but the option is deprecated and will be removed once Unity drops the API. Ensure your WebGL build's *.loader.js sets config.autoSyncPersistentDataPath = true to enable auto-sync.
Implemented a corresponding WebGL override for loading binary cloud saves, decoding the stored Base64 string retrieved via the Data service instead of using the Files API
Save Settings: Added independent configuration flags for uploading screenshots and slot metadata to cloud storage, separating what was previously a single combined option
Updated the settings UI to present separate “Upload Screenshots” and “Upload Slot Metadata” toggles for finer control over cloud behavior
Revised save system logic to remove screenshots or metadata only when their respective flags are enabled and to upload metadata based on the new setting
Introduced a storage path abstraction (IStoragePathProvider) and custom provider that supports a stable WebGL directory and JS flush helper for idbfs synchronization
Extended SaveSettings with configurable persistent path options, a migration toggle, and factory for path providers, all wired through SaveManager to run a one-time migration from legacy paths
Added migration utility and editor UI to preview, test, and move data between old and new locations, plus documentation on enabling a custom persistent path
Metadata: Enabled optional Unity Localization support for save slot metadata by conditionally referencing UnityEngine.Localization, storing LocalizedString values, and resolving them through a new GetValue helper within each entry and ToDictionary
Debug: Added a runtime initialization warning that logs an error when any required scripting define symbols for cloud save are missing, making symbol issues visible in development builds
Wrapped Unity Services initialization and authentication steps in granular try/catch blocks, logging detailed messages and stack traces for failures, and added a catch around cloud sign-in to surface errors during the login process
Added a general authentication warning helper so that any attempted sign‑up or sign‑in reports missing scripting define symbols
Introduced stub cloud‑authentication methods in SaveManager that log errors and return false when username/password sign‑up, cloud sign‑in, email login, or identity linking are attempted without the required symbols
🔄 Changed / Improved
Supabase: Renamed the Supabase-specific resolver to a more generic CustomFolderAuthResolver and updated its asset menu path accordingly
Simplified asset creation menu for the folder resolver to remove Supabase references, making it applicable to broader use cases
Revised CloudSaveService and the demo email auth panel to use the new CustomFolderAuthResolver name throughout the codebase
Introduced a new IUserAuthorizationResolver interface and added an obsolete ISupabaseAuthorizationResolver wrapper for backwards compatibility, centralizing authorization token resolution
Updated SaveManager and Firebase/Supabase save systems to rely on the new interface for custom authorization, ensuring consistent token handling across backends
Revised resolver assets to implement the new interface while still inheriting the obsolete alias, and refreshed SaveSettings guidance to reference the new name
Removed UserFolderResolver
🐛 Fixed
Sync Overlay in Save Load UI no longer freezes
Last updated