Godot Simple Game Saves

Save and load named slots with PersistlyGameSaves.

Normal Godot integrations should use PersistlyGameSaves first. The raw runtime client remains available when you intentionally need the account/session contract.

Simple Game Saves

Use this as the default Godot integration pattern.

The slot is saved locally first. The first force_sync, sync_due_slots, or sync_due call creates the remote Persistly account and slot slot if needed.

GDSCRIPT
const PersistlyGameSaves = preload("res://addons/persistly/persistly_game_saves.gd")

var persistly := PersistlyGameSaves.new()
persistly.configure({
  "runtime_key": "ps_test_replace_me",
})

var saved := persistly.save_data({
  "level": 5,
  "coins": 1200,
  "checkpoint": "forest-gate",
}, {
  "characterName": "Astra",
  "slot": "main",
})

if saved.get("status") == PersistlyGameSaves.PersistlySlotStatus.LOCAL_SAVED:
  print("Saved locally. Call force_sync_data or sync_due from a safe lifecycle moment.")

var loaded := persistly.load_data()
var sync := persistly.force_sync_data()

Autosave

Use local-first saves, then sync at safe Godot lifecycle moments.

Call save_slot when game state changes and force_sync when the player pauses, reaches a checkpoint, completes a level, or exits.

PersistlyGameSaves is the default Godot facade for normal game integrations.

save_data and load_data use the default autosave slot for one-save games; save_slot and load_slot remain available for named slots.

The runtime client still exists for advanced account and slot integrations.

Use PersistlySlotStatus constants instead of raw status strings in game code.

Conflict responses preserve the cloud slot branch so Godot games can replace local canonical data before reconciling edits.