Ali Şahan Yalçın
DocsCloud saves

Progression

Cloud saves

Storing save games in Steam Cloud so they follow the player between machines.

Two switches, both able to break it

The player can turn cloud off for their whole account, and separately for your game.

Writes still succeed with cloud off. The file lands on disk and never syncs. A game that only checks for write failures will never notice.

Check Is Cloud Enabled For App if you need to tell the player their saves are not following them. That is the one to gate your UI on.

Saving and loading a save game

The simplest route uses the same Save Game object you already pass to Unreal's own save nodes:

  • Save Game To Cloud (Async) takes a Save Game object and a slot name.
  • Load Game From Cloud (Async) takes a slot name and gives you the object back.
  • Save Game To Cloud also writes the local slot by default, and deliberately does not gate that on the cloud succeeding. A player whose cloud is full should still have a save on the machine they are sitting at, because losing local progress to a sync problem is the worse failure.

    Load Game From Cloud falls back to the local copy on every failure path: no cloud copy, a rejected read, or a cloud copy that does not deserialise. A corrupt cloud file should not cost someone a working local one.

    Raw files

    For anything that is not a Save Game object:

    NodeWhat it does
    Write Cloud File (Async)Write bytes
    Read Cloud File (Async)Read bytes
    Cloud File ExistsCheck
    Get Cloud File SizeSize in bytes
    Get Cloud File TimestampWhen Steam last wrote it
    Is Cloud File PersistedWhether it reached Steam's servers, rather than only sitting on disk
    Delete Cloud FileDelete everywhere, on every machine
    Forget Cloud FileStop syncing but keep the local copy
    Get Cloud File ListEverything this app has stored
    Get Cloud QuotaHow much space is allocated and left
    WARNING: Write Cloud File refuses a zero length payload. Steam treats an empty write as a delete, which is almost never what a caller meant by passing an empty array. Use Delete Cloud File if that is what you want.

    Files changing underneath you

    Steam syncs in the background, so a save your game read at startup can be replaced mid session by a newer copy from another machine.

    Bind On File Changed on the SteamForge Cloud subsystem. Reload anything you are holding in memory, or tell the player their progress from elsewhere arrived. Ignoring it is how a session silently overwrites newer progress on the next save.

    Conflicts

    Check Save Conflict compares a cloud file against a local slot and reports both timestamps, both sizes, and which is newer.

    It resolves nothing on purpose. Picking the newer file is wrong often enough to matter: a player who quits without saving on machine B, then plays on A, has a newer file on B with less progress in it. Only your game knows which save represents more progress.

    It reports Ambiguous when the timestamps match but the sizes do not, because Steam's timestamps have one second resolution.

    Saving several files at once

    Begin Write Batch and End Write Batch group the writes between them into one atomic sync. Without them, an interruption can leave the cloud holding this session's save next to last session's inventory.

    Always pair them. Leaving a batch open holds the sync indefinitely.

    Quota

    Quota is per app and set on the partner site. Going over makes writes fail rather than evicting anything, so prune old slots yourself.

    WARNING: App ID 480 has a cloud quota of 4096 bytes. Enough to prove the feature works, not enough for a real save. Use your own App ID for anything meaningful.