Skip to content

Steam Cloud Saves

Save and load data from Steam Cloud.

Methods

fileWrite(filename, content)

Write file to Steam Cloud.

javascript
await steam.fileWrite('save.json', JSON.stringify(gameState));

fileRead(filename)

Read file from Steam Cloud.

javascript
const content = await steam.fileRead('save.json');
const gameState = JSON.parse(content);

fileExists(filename)

Check if file exists.

javascript
if (await steam.fileExists('save.json')) {
  // Load save
}

fileDelete(filename)

Delete file from Steam Cloud.

javascript
await steam.fileDelete('save.json');

fileGetSize(filename)

Get file size in bytes.

javascript
const size = await steam.fileGetSize('save.json');

isCloudEnabledForAccount()

Check if user has Cloud enabled.

javascript
const enabled = await steam.isCloudEnabledForAccount();

isCloudEnabledForApp()

Check if app has Cloud enabled.

javascript
const enabled = await steam.isCloudEnabledForApp();

Examples

Basic Save/Load

javascript
const SAVE_FILE = 'gamesave.json';

async function saveToCloud(gameState) {
  if (!await steam.isCloudEnabledForApp()) {
    console.warn('Steam Cloud not available');
    return false;
  }
  
  const data = JSON.stringify(gameState);
  return await steam.fileWrite(SAVE_FILE, data);
}

async function loadFromCloud() {
  if (!await steam.fileExists(SAVE_FILE)) {
    return null;
  }
  
  const data = await steam.fileRead(SAVE_FILE);
  return JSON.parse(data);
}

Multiple Save Slots

javascript
async function saveToSlot(slot, gameState) {
  const filename = `save_slot_${slot}.json`;
  const data = JSON.stringify({
    ...gameState,
    savedAt: Date.now()
  });
  return await steam.fileWrite(filename, data);
}

async function loadFromSlot(slot) {
  const filename = `save_slot_${slot}.json`;
  if (!await steam.fileExists(filename)) {
    return null;
  }
  return JSON.parse(await steam.fileRead(filename));
}

async function getSlotInfo(slot) {
  const filename = `save_slot_${slot}.json`;
  if (!await steam.fileExists(filename)) {
    return { empty: true };
  }
  
  const data = JSON.parse(await steam.fileRead(filename));
  return {
    empty: false,
    savedAt: data.savedAt,
    level: data.level,
    playtime: data.playtime
  };
}

Auto-Save

javascript
let lastSaveTime = 0;
const AUTO_SAVE_INTERVAL = 60000; // 1 minute

async function autoSave(gameState) {
  const now = Date.now();
  if (now - lastSaveTime < AUTO_SAVE_INTERVAL) {
    return;
  }
  
  await saveToCloud(gameState);
  lastSaveTime = now;
}

// Call in game loop
function gameLoop() {
  update();
  render();
  autoSave(gameState);
  requestAnimationFrame(gameLoop);
}

Backup System

javascript
async function saveWithBackup(gameState) {
  // Keep previous save as backup
  if (await steam.fileExists('save.json')) {
    const previous = await steam.fileRead('save.json');
    await steam.fileWrite('save_backup.json', previous);
  }
  
  await steam.fileWrite('save.json', JSON.stringify(gameState));
}

async function restoreBackup() {
  if (await steam.fileExists('save_backup.json')) {
    const backup = await steam.fileRead('save_backup.json');
    await steam.fileWrite('save.json', backup);
    return JSON.parse(backup);
  }
  return null;
}

Steamworks Setup

Enable Steam Cloud in Steamworks:

  1. Go to Steamworks Partner
  2. Select your app
  3. Navigate to Steam Cloud
  4. Set byte quota (e.g., 1MB)
  5. Set file count quota (e.g., 10)
  6. Publish changes