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
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
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
Engine
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.