Contents

Unreal Engine 5.8 · System guide

Save and Load

Build durable versioned Unreal persistence

On this page

Choose a task

Workflow and boundaries

Use these checks when a task crosses several systems. The focused references above contain the specific actions.

Define the persistence contract first

Read references/system-selector.md.

  1. List state that must survive a checkpoint, map travel, application restart, device change, patch, account change, and multiplayer session separately.
  2. Assign each datum an authority, stable ID, owner file/slot, lifetime, default, validation rule, and migration policy.
  3. Separate immutable definitions from mutable saved state. Persist definition IDs, not asset objects.
  4. Capture a consistent snapshot, write through a serialized per-user operation queue, and acknowledge success/failure visibly.
  5. Load into data first; validate type/header/version, migrate, resolve definitions, travel/construct the world, then apply state in a deterministic phase.
  6. Preserve a last-known-good path and never overwrite a readable older/newer save after a failed load.
  7. Test real previous-version files, corruption, missing content, low storage, interrupted operations, multiple users, and packaged target builds.

Route neighboring work deliberately:

  • definition assets, Primary Asset IDs, tables, and redirects -> unreal-data-assets-tables;
  • subsystem/Actor interface architecture -> unreal-blueprint-architecture;
  • save-related loading/memory hitches -> unreal-memory-streaming and unreal-insights-profiling;
  • release artifact, patch, platform packaging, and crash collection -> unreal-packaging-deployment;
  • replicated runtime authority -> unreal-replication.

Load only what applies:

Hard rules

  • Do not serialize live Actor/UObject pointers as durable identity. Persist stable domain IDs, Primary Asset IDs, tags, names, GUIDs, and value records with explicit resolution behavior.
  • Do not save immutable definition data into every slot. Save the definition ID plus minimal mutable state.
  • AsyncSaveGameToSlot still serializes on the game thread; it moves the platform write to a worker. Keep snapshot/schema cost bounded and measure hitches.
  • Serialize save/load operations per platform user/slot. UE warns that some platforms may not support simultaneous save and load; completion order must not decide data authority.
  • Treat callbacks as stale-capable. Bind weak ownership/request generations and verify slot/user/request.
  • Never mutate the live world incrementally from unvalidated bytes. Validate and migrate a data snapshot before applying it.
  • Never overwrite an unknown newer-version, corrupt, or failed-to-migrate save automatically.
  • Do not rely on application shutdown as the only persistence point.
  • Local save data is untrusted for competitive authority, paid entitlement, or server economy.
  • SaveGameToSlot documents that it writes all non-transient properties and does not check the SaveGame property flag. Do not repeat the common claim that the flag filters this built-in call.
  • Verify path, quota, user identity, slot enumeration, cloud behavior, suspend/resume, and atomicity with the target platform's current save API; desktop .sav behavior is not a universal contract.

See references/sources.md for the UE 5.8 primary-source trail.

Version and evidence

Targets Unreal Engine 5.8 documentation. This label does not establish that every procedure was tested in an editor or packaged build.

Read the documentation sources and verification notes →

Original AI skill and source files

Open the complete skill on GitHub