Releases / v0.77.0

v0.77.0 Well Earned

2026-08-24 Engine Latest

Achievements, stats and Cloud saves reach Lua, and a game can ask whether it's running on Steam Deck or in Big Picture mode.

Achievements and stats

lua
if steam.statsReady() then
  local ok, err = steam.unlockAchievement("FIRST_WIN")
  steam.setStatInt("wins", steam.statInt("wins") + 1)
end

steam.unlockAchievement/clearAchievement/achievementUnlocked cover unlock/clear/query; steam.achievementGlobalPercent is the share of players worldwide who've earned one; steam.achievementName/achievementDescription read Steam's own localized text for it. steam.statInt/setStatInt and statFloat/setStatFloat cover int/float stats. Every write goes into a local queue and reaches Steam's servers on an automatic batch every few seconds — call steam.flushStats() if you want it sent right now instead — and a failed send is never silently lost; it stays queued and the next batch tries again. Every write also answers ok, err rather than just failing quietly, and err names the actual problem — a mistyped achievement ID says so, rather than leaving you to guess. steam.resetAllStats(achievementsToo) wipes everything for testing.

Not in this release: average-rate stats and achievement-progress notifications aren't wired up yet — Valve's own toolkit for this engine doesn't currently support either, and closing that gap is its own piece of work. Achievement icons are in the same boat as avatars (see the last release): nothing in the engine can turn raw image bytes into something a script can put on screen at runtime yet.

Cloud saves

lua
local ok, err = steam.cloudWrite("save1.dat", data)
local data, err = steam.cloudRead("save1.dat")

steam.cloudWrite/cloudRead/cloudDelete cover the basics; cloudFiles() lists everything currently in Cloud storage, cloudFileExists and cloudFileTimestamp let you check before you read, and cloudForget removes a save from the Cloud while keeping the local copy — for a player who wants one save to stop syncing without losing it. steam.cloudEnabled() and setCloudEnabled toggle Cloud for this game specifically; the account-wide setting is read-only here, same as it is anywhere else — that one belongs to the player, not the game. There's no built-in notion of a save "conflict" to resolve for you: cloudFileTimestamp is there so you can compare it against your own local save's modification time and decide what "newer" means for your own game.

Not in this release: Steam's storage-quota numbers aren't exposed yet.

Knowing where you're running

steam.uiLanguage() reads Steam's own current UI language — a reasonable default for your own localization. steam.isSteamDeck() and steam.isBigPictureMode() tell you when to assume no keyboard and mouse, or to lean into a bigger, couch-friendly layout.

Upgrading

Nothing to do.

Floptle Hub

Linux x86_64 7.5 MB Download → sha256 77d2ec60a6990137a83f0c9a507e1ebb649299310feba83baa124504edd3ae44
macOS Apple Silicon 5.7 MB Download → sha256 af6386bcfa3724436470af00729631889a270eaa63a46f0c8de5865ef4471d3d
macOS Intel 6.2 MB Download → sha256 a4db49728f4e41ccd25ceab5578b2cce68bdb537967c2f90d4ff8cc39a08524e
Windows x86_64 7.1 MB Download → sha256 378970549e887fa69921a3a08ccc865a474bf2c6f0e1ee433b36b574b9850c89

Engine

Linux x86_64 20.7 MB Download → sha256 40a53984b990ec768b5d2ca8e8310bb1f50e02de24236fc48df38804b1d04096
macOS Apple Silicon 16.7 MB Download → sha256 bfdccd6871a4ce22268ad6c9a57a2f5561a5d42304a860f8964bf372f0c775ca
macOS Intel 18.1 MB Download → sha256 33f3714ef0916ca0ebdeb82853ed950209d5c94c9df9d332331694ba16656e37
Windows x86_64 20.5 MB Download → sha256 ba14e48832b816f34834855df5c5013f7c545d4472ca0a034a57dc69c6f55131

The binaries are not signed yet. On macOS, right-click the app and pick Open the first time. On Windows, if SmartScreen appears, pick More info then Run anyway.