Skip to content

Releases: SkorcherX/SaveLocker

v0.5.5

Choose a tag to compare

@github-actions github-actions released this 15 Aug 09:03
10be23e

v0.5.5

Released 15 August 2026

Steam Decks now update themselves. Until this release the Linux agent was the one machine in the
fleet that could never be current without someone SSHing into it — which, on a device you use by
picking it up and pressing play, meant it usually wasn't.

Also in this release: games that Steam Cloud does not actually back up stop being hidden from
Add games. There were more of them than anyone thought.

Nothing about how saves sync has changed, and no save data is touched by upgrading.

Before you upgrade

  • The agents carry this release. Update them first.
  • This is the last time you update a Steam Deck by hand. Download the newer tarball and re-run
    install.sh once more; from then on the agent keeps itself current.
  • Windows agents update themselves once the installer is uploaded in Config → Agent updates.
  • No database changes. Downgrading the container is a clean rollback.

Steam Deck: the agent keeps itself up to date

The server now hosts a package per platform — the Windows .exe and the Linux .tar.gz side by
side. Config → Agent updates has a row for each, and each can be uploaded or pulled from GitHub
independently. An older server keeps serving Windows agents exactly as before; nothing about an
existing setup changes until you put a Linux tarball in the new row.

A Deck checks every few hours. When a newer version is hosted it downloads it, verifies it against
the checksum the server published, unpacks it, and runs it once to confirm it starts and reports
the version it should be
. Only then does it keep it — and it installs it the next time the agent
starts
, not while you are using the device.

So: nothing changes underneath a running session, no game is ever interrupted, and you are not asked
a question the Deck has no way to show you. If you would rather not wait for a restart:

savelocker update

If an update goes wrong, the Deck fixes itself. The previous version is kept until the new one
has started successfully. A build that installs and then fails to start is rolled back automatically
and reported to this console — a Deck does not strand itself somewhere you would need a keyboard to
rescue it from.

You will see these under a machine's health:

  • update.staged — a newer version is ready and goes in at the next start.
  • update.failed — a package could not be used. Nothing was replaced; the machine still works,
    but it has quietly stopped updating, which is the sort of thing you would never otherwise notice.
  • update.rolled_back — a version was installed here, did not start, and the previous one was
    restored. Do not roll that version out further until you know why.

To turn automatic installing off, set "AutoUpdate": false in the agent's config.json. It keeps
checking, so this console still tells you when a machine is behind.

Games Steam Cloud does not actually cover are no longer hidden

Add games hides titles Steam Cloud already backs up, which is the right default — there is no
point syncing what Valve syncs for you. The problem was how "already backed up" was decided: anything
installed through Steam was assumed to have Cloud.

Most Steam games do not. Of the 48,908 Steam titles in the save-location database, 14,340 have
Steam Cloud. The rest were being hidden from you as though something was looking after them.

SaveLocker now reads the per-game Cloud flag from the database instead of assuming it. Expect games
to appear in Add games that were not there before — those are games nothing was backing up.

Where the database has no entry for a title at all, the old assumption is kept, so this only ever
reveals games; it never hides one that used to be listed.

Release integrity

Every release now publishes SHA256SUMS-windows.txt and SHA256SUMS-linux.txt, and the Linux
tarball carries a build attestation tying it to the workflow run that produced it:

sha256sum -c SHA256SUMS-linux.txt
gh attestation verify savelocker-0.5.5-linux-x64.tar.gz --repo SkorcherX/SaveLocker

The agents' own update channel does not depend on either — the server computes its own checksum over
the bytes it stored, and an agent refuses anything that does not match. These are for the human doing
a manual install.

Also

  • The Deck's systemd unit is hardened (NoNewPrivileges, PrivateTmp, ProtectSystem=full,
    a restricted set of address families, and a 0077 umask). install.sh installs the new unit.
  • savelocker version prints the running version and nothing else.
  • savelocker doctor reports whether an update is available.
  • The agent window has an Updates section, and Game Mode says when an update is waiting.

Known issues

  • The Game Mode update notice and the agent window's Updates section have not been exercised on real
    Deck hardware. Everything behind them has been, in the Linux test suite — what is unverified is how
    they look, not whether they are telling the truth.

v0.5.4

Choose a tag to compare

@github-actions github-actions released this 11 Aug 00:46

v0.5.4

Released 10 August 2026

A release for large libraries. Add games now has filters, the Linux agent finds your Steam-store
games instead of pretending they don't exist, and the console's game list scrolls on its own so
picking a game no longer scrolls its settings off the screen.

Nothing about how saves sync has changed, and no save data is touched by upgrading.

Before you upgrade

  • The agents carry this release. Update them first. The console redeploy brings the scrolling
    fix, the updated Help and these notes — worth doing, but it can follow whenever it suits you.
  • On Steam Deck, download the newer tarball and re-run install.sh. Windows agents update themselves
    once the installer is uploaded in Config → Agent Updates.
  • No database changes. Downgrading the container is a clean rollback.

Added

  • Filters in Add games. A row of chips above the list: Suggested, All, Steam,
    Added to Steam, Heroic, and Needs path. Each shows how many games it holds, and a
    filter with nothing in it is not shown at all — so the row reflects the machine you are on.

    Suggested is the view you already had, now named: everything except the games Steam Cloud
    already backs up. The difference is that All is one click away.

    Needs path is the one worth knowing about if you have a lot of games. It gathers every game
    SaveLocker could not find a save folder for — the ones that need you to pick a folder before they
    can be enrolled — instead of leaving you to spot them scattered down a list of two hundred.

  • Heroic games can be filtered by store. With the Heroic filter on, a second row appears for
    Epic, GOG, Amazon, Sideloaded and Other. It only appears when you actually have
    games from more than one store, since narrowing to your only store narrows nothing.

  • The same filters in Game Mode. The Steam Deck's gamepad app gets the same row, minus the store
    breakdown. This is where it matters most — a long list is far worse with a thumbstick than with a
    mouse.

  • Steam-store games are now found on Linux and Steam Deck. They were previously not scanned at
    all, on the grounds that Steam Cloud already covers them. That reasoning still holds for the
    default view, and they stay out of it — but they are now reachable through the Steam filter.

    This matters for the games it left stranded: not every Steam title opts into Steam Cloud, and some
    people want their own copy of a save regardless. Previously there was no way to reach those at all
    on a Deck, and no way to tell that from a game SaveLocker had simply failed to find. Windows has
    always worked this way; Linux now matches it.

Fixed

  • The console's game list scrolls by itself. With more than a screenful of games, picking one
    from the bottom of the list used to leave its settings off the top of the page, so you scrolled
    back up to read them. The list and the game's details are now separate panes that scroll
    independently, and the page itself no longer scrolls at all.

  • Proton and the Steam runtimes are no longer listed as games. On a Steam Deck, Proton 9.0,
    10.0, 11.0, Proton Hotfix and Steam Linux Runtime showed up in Add games as though
    they were titles you could sync. They are recognised as compatibility tools now, by what they
    contain rather than by a list of known versions — so next year's Proton will not come back.

Known issues

  • Emulator saves are not detected. RetroArch, Dolphin, PCSX2 and friends keep their saves in
    their own folders, which the community game manifest does not describe, so nothing finds them
    automatically. You can still add them by hand with Set save folder. Proper support is planned,
    and will come with an Emulator filter of its own.

  • Native Linux games are still not supported, through Heroic or Steam. Only Windows titles
    running under Wine or Proton — a Proton save is a Windows save, which is what lets a Deck and a
    Windows PC share one.

  • A few older games whose saves sit loose in the install folder still need their folder set by hand,
    as described in v0.5.3. So do very recent releases missing from the community manifest.

v0.5.3

Choose a tag to compare

@github-actions github-actions released this 09 Aug 22:52
6fb46d3

v0.5.3

Released 9 August 2026

Steam Deck and Linux release. Games staged in Heroic Games Launcher — Epic, GOG, Amazon and
sideloaded titles — are now discovered with their save folders already filled in, without having to
be added to Steam first.

Nothing about how saves sync has changed, and no save data is touched by upgrading.

Before you upgrade

  • This is an agent release. Update your agents; the console only carries the updated Help and
    these notes, so redeploying it is optional and can wait.
  • On Steam Deck, download the newer tarball and re-run install.sh. Windows agents update themselves
    once the installer is uploaded in Config → Agent Updates.
  • No database changes. Downgrading the container is a clean rollback.
  • If you rely on auto-detection for older games that keep their saves in the game's own install
    folder, read Known issues first — a few of those now ask you to pick the folder by hand.

Added

  • Heroic Games Launcher games are detected. SaveLocker reads Heroic's own library and finds
    games installed from the Epic, GOG and Amazon stores, as well as anything sideloaded
    into it. Unlike everything else on Linux, these do not need adding to Steam first — SaveLocker
    finds them from Heroic directly.

    Save folders are resolved inside the Wine prefix Heroic runs each game in. This is why they never
    worked before: adding a Heroic game to Steam gave it a Steam shortcut, so it appeared in Add
    Games
    , but its saves live in a prefix Heroic manages and Steam knows nothing about — so the
    folder came up empty, every time, and had to be typed in by hand.

  • A Heroic game added to Steam is listed once, not twice. It is genuinely discoverable two ways;
    you see one entry, the one that knows where the saves are.

  • savelocker doctor reports Heroic. Which games it found and from which store, and the prefix
    each one runs in. On a Steam Deck in Game Mode this is often the only place to see what went wrong.

Fixed

  • A game's own install folder is no longer offered as its save folder. Some games — mostly older
    ones — keep their saves as loose files sitting beside the game's .exe. SaveLocker syncs folders,
    so the only folder it could offer for those was the whole game directory.

    That was worse than untidy. Restoring a save deletes anything in the save folder that is not in the
    backup, so restoring one of these games onto a second machine could have deleted files from that
    machine's game installation. Where the install folder is the only candidate, SaveLocker now shows
    No save folder set and asks you to pick one.

    Some games improve from this outright: Cave Story+ stores a few files beside its executable
    and keeps its real saves in Documents, and the install folder used to win. It now finds the
    right folder on its own.

Known issues

  • A few older games no longer detect their save folder automatically. These are the games
    described above, whose saves sit loose in the install folder with nothing better to offer. They
    still sync perfectly once you point SaveLocker at a folder — use Set save folder in the agent,
    or savelocker add-game --dir. Support for backing up individual save files, which is what these
    games actually need, is planned.

  • Native Linux games installed through Heroic are not detected. Only Windows titles running under
    Wine or Proton are supported.

  • Heroic sometimes names a game's prefix Prefixes/Title. That comes from Heroic's own "add a
    game" form, not from SaveLocker, and it is harmless. Do not rename the folder to tidy it up
    Heroic keeps the old path in its settings, creates a new empty prefix there, and runs the game in
    that one, stranding your existing saves in the folder you renamed. Change the prefix in Heroic's
    per-game settings instead. savelocker doctor points this out if it finds a game in that state.

  • Very recent releases are often missing from the community game manifest entirely. Those still need
    their folder set by hand, and always have.

v0.5.2

Choose a tag to compare

@github-actions github-actions released this 09 Aug 06:56
a70b0d4

v0.5.2

Released 8 August 2026

Save-folder detection release. Adding a game used to mean typing its save path by hand more often
than not, and occasionally being handed a folder that looked right and was not. Measured against the
community game manifest, detection went from finding the right folder for 57.5% of games to
99.5%, and the cases where it confidently returned the wrong folder are gone.

Nothing about how saves sync has changed, and no save data is touched by upgrading.

Before you upgrade

  • Redeploy the console (docker compose pull && docker compose up -d) and update every agent.
    The detection work is in the agent; the console carries the updated Help and these notes.
  • Windows agents update themselves once the installer is uploaded in Config → Agent Updates. On
    Steam Deck, download the newer tarball and re-run install.sh.
  • No database changes. Downgrading the container is a clean rollback.
  • If you already have the same game listed twice on the server, this release does not merge them.
    See Known issues.

Improved

  • Save folders are found for far more games. Three things the detector never understood are now
    handled: games that keep saves inside their own install folder, games that store them under a
    Steam library path, and games that separate saves per Steam account. Installed Steam games on
    Windows were the worst case — they never consulted the game manifest at all, so every one of them
    arrived with no save folder and had to be filled in by hand.

  • A game is no longer listed twice under two spellings. A non-Steam shortcut carries whatever
    name you typed when you added it to Steam, and matching used to be exact apart from letter case.
    DRAGON QUEST III HD 2D Remake and DRAGON QUEST III HD-2D Remake are now understood to be the
    same game, so it appears once, with its folder already filled in.

  • The same game on two machines is now one game. This is the important one. Because each machine
    used its own shortcut name as the game's identity, a Steam Deck and a PC that spelled a shortcut
    even slightly differently created two separate games that could never sync to each other — with
    no error shown anywhere. Games are now registered under the manifest's own title, so both machines
    land on the same game no matter how each shortcut is named. Your own naming is untouched in the
    agent's list.

  • Steam Cloud games are hidden in Add Games by default. SaveLocker exists for games Steam does
    not back up, and a long list of Cloud-backed titles buried the handful you came to add. The Hide
    Steam Cloud
    button still toggles them back, and the footer now tells you how many were hidden.

Fixed

  • A settings folder is no longer offered as your save folder. Some games describe their config
    directory alongside their saves, and the detector could pick whichever it happened to resolve
    first — for DRAGON QUEST III it reliably chose Steam\Config\WindowsNoEditor. Roughly one game in
    twenty-five was affected. Where the real save folder cannot be identified, the agent now shows No
    save folder set
    and asks you to pick, rather than presenting a wrong path as if it were certain.

  • Detection can no longer suggest a folder outside your profile or game prefix. A handful of
    malformed manifest entries could expand to a path anchored at the root of whichever drive the agent
    happened to be running from.

Known issues

  • Duplicate games already on your server are not merged. If two machines previously registered
    the same game under different spellings, both remain, each with its own save history. There is no
    merge tool — they have to be reconciled by hand in the console. New enrolments will not create
    further duplicates.

  • A game must be discoverable to be detected at all. The agent finds games from Steam — either
    installed by Steam, or added to Steam by you as a non-Steam game — or from a save folder that
    already exists. A game installed outside Steam that has never been launched matches none of those
    and will not appear in Add Games until you add it to Steam. This is not new, but it was never
    written down; Help → Adding games now explains it.

  • Very recent releases are often missing from the community manifest entirely. Those still need their
    folder set by hand, and always have.

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 05 Aug 20:42
51b64a8

v0.5.1

Released 5 August 2026

Two fixes reported from real use, both cosmetic in cause and misleading in effect: one made a healthy
fleet look like a broken one, the other made the Steam Deck app look like it had stopped responding.
Nothing about how saves sync has changed.

Before you upgrade

  • Redeploy the console (docker compose pull && docker compose up -d) and update every agent.
    The version fix is split across both, so doing only one of them leaves Config still reporting a
    version split until the other catches up.
  • Windows agents update themselves. On Steam Deck, download the newer tarball and re-run
    install.sh.
  • No database changes. Unlike v0.5.0, this one carries no migration and downgrading the container
    is a clean rollback.

Fixed

  • Config no longer reports one release as two versions. A fleet running a single release could
    show up as v0.5.0 on some machines and v0.5.0.0 on others, which reads as agents disagreeing
    with each other — a genuine fault, and one worth acting on, since agents on different versions can
    disagree about exclude globs and save paths and produce repeated sync conflicts. There was never a
    disagreement: Windows and Steam Deck agents were reporting the same build in two different formats.
    Every agent now reports one format, and the console treats the old four-part strings as equivalent
    so a fleet part-way through updating is not flagged either.
  • The Steam Deck app no longer shows two things highlighted at once. On opening the app, and
    intermittently on the Overview list, two items could appear selected — and pressing A seemed to
    do nothing, because only one of them was really selected and it was rarely the one you were looking
    at. Moving the D-pad appeared to fix it, which made it look random. The Deck always has a pointer,
    whether or not you have touched the trackpad, and wherever it happened to be resting was drawn as a
    second selection. The pointer is now ignored until you actually use it.

For the curious

The second one could not be reproduced anywhere except on a Deck, which is a bad place to debug: the
development loop runs the Deck interface in a window on a PC, where the mouse sits outside that
window and never hovers anything. The fix that mattered most was therefore to the test setup — the
Deck interface can now be told to park a pointer at a fixed position, which turns "cannot reproduce
on demand" into a check that runs unattended and captures a screenshot.

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 29 Jul 03:32
4944d8f

v0.5.0

Released 29 July 2026

The largest release so far, and almost all of it is repair. Three deliberate hunts for defects — one
through the server and console, one through the Steam Deck agent, one through the Windows agent —
turned up 34 problems, including one that was quietly destroying save history. They are all fixed
here.

If you read only one thing: back up /data before upgrading, and note that SaveLocker no longer
pulls automatically when a game launches on Windows.

Before you upgrade

  • Back up /data. This release changes the database, and the change runs automatically the first
    time the new container starts. Going back to an older container afterwards is not a clean rollback
    — that is why this is 0.5.0 and not 0.4.2. The nightly backups in /data/backups/ are a reasonable
    starting point, but take a fresh one.
  • The console must be redeployed (docker compose pull && docker compose up -d). Previous
    releases only touched the agents; this one changes the server.
  • Windows agents update themselves. On Steam Deck, download the newer tarball and re-run
    install.sh.

Changes worth knowing about

  • Windows no longer pulls your save automatically when a game launches. This was never safe and
    could not be made safe: Windows only notices a game up to four seconds after it starts, by which
    point the game already has its save files open. What was described as a "pre-launch pull" could
    therefore write over a save that the game then overwrote again when you quit — losing whatever was
    pulled, silently. SaveLocker now refuses to pull while a game is open and tells you why.
    Pull before you play. Launching still checks the game out to your machine, and quitting still
    pushes; only the automatic pull at launch is gone. Steam Deck is unaffected — there the launch
    wrapper genuinely runs before the game does.
  • Pointing an agent at a different server now asks you to register again. The machine key, ID and
    certificate fingerprint were issued by the old server and mean nothing to the new one, so they are
    cleared rather than sent on to a server that was never meant to see them.

Fixed — your saves

  • Removing a machine no longer deletes its saves. The confirmation dialog promised the version
    history would be kept, and it was not: removing a machine destroyed every save version that machine
    had uploaded. If one of them was the current Latest, the game was left with no Latest at all — its
    saves still on disk, but nothing left to reach them with. Storage totals dropped to match. This
    upgrade preserves existing history; anything already lost this way cannot be recovered from the
    database, though the archive files themselves were never deleted.
  • An interrupted upload no longer leaves a broken save on the server. A save sent by a machine
    that lost its connection part-way was written straight to the place a real save lives, and repeated
    failures quietly filled the disk. Saves are now assembled aside and only put in place once
    complete, so what the server keeps is either a whole save or nothing.
  • "Set as Latest" now actually reaches your machines. It promised every machine would pull the
    save you chose and then told none of them: the choice was recorded on the server while the machines
    carried on from the save they already had, hitting a conflict on their very next save. The same gap
    applied to rollback and to the automatic conflict settings. All of them now queue a sync for every
    machine that syncs that game — and, as everywhere else, that sync will not overwrite local changes
    you have not pushed. Those machines report the pull as blocked so you can decide.
  • Choosing a Latest clears the argument it settles, instead of the console continuing to flag the
    very save you just picked.
  • A game can no longer be pointed at a folder that isn't a save folder. A drive root, your user
    profile, C:\Windows, Program Files or SaveLocker's own settings folder are refused outright —
    they could previously be uploaded, and a force-pull would have replaced them. Folders that merely
    look wrong, like a Wine prefix or something suspiciously large, ask for confirmation instead of
    proceeding quietly. The check runs again at the moment of syncing, so a mapping edited by hand or
    sent by the server is caught too.
  • Quitting a game always releases its checkout, even if the save fails to upload. It previously
    released only after a successful push, so a failed upload left the game checked out to your PC —
    and every other machine locked out of it — until the checkout expired.
  • Two SaveLocker processes can no longer sync the same game at once. When one was busy, the other
    gave up waiting after 30 seconds and proceeded anyway, which is exactly what the wait exists to
    prevent. It now waits as long as the work could legitimately take, and reports that the game is
    busy rather than joining in.
  • Deleting a save version cannot leave the server offering one it no longer has, and a file the
    server fails to delete is recorded in the audit log rather than forgotten.
  • A save that is too large is refused clearly — "too large", against the configured limit, rather
    than a generic server error.

Fixed — the console

  • A Pull, Push, Sync or Scan sent from the dashboard no longer goes missing. If the machine
    dropped off between picking the job up and finishing it — a reboot, a crash, the network going away
    mid-report — the job sat in "Dispatched" forever and nothing ever ran it or said so. Jobs are now
    handed out on a time limit: one that is not confirmed goes back in the queue and the next check-in
    picks it up. The dashboard shows "retried ×2" when that happens, and says whether a job is running
    or waiting to be handed out again.
  • Launching the same game on two machines at once no longer errors. Whichever got there first
    takes the checkout and the other is told who holds it, which is what it was always meant to say.
    Previously one of the two got a server error instead — at exactly the moment the checkout is the
    thing protecting your save.
  • Enrollment files can no longer be created with an address the new machine cannot use. If you
    opened the console on the server itself, at localhost, the file told the new machine to sync with
    itself, and the only sign was enrollment failing for reasons that pointed nowhere. The console
    now shows the exact address the file will carry before you create it, refuses to create one that
    cannot work, and rejects a mistyped address without spending the single-use token on it. There is a
    new optional Server:PublicBaseUrl setting if you want to pin the address agents should use.
  • An enrollment file is never used up without handing back a key. Setting up a machine spent the
    single-use token first and issued its key second, so a failure in between left the file dead and
    the machine still not enrolled.
  • A bad SteamGridDB key no longer wipes out your working one. The key was saved first and checked
    afterwards, and the console said "saved" either way — so a mistyped paste quietly replaced a key
    that worked. It is now checked before anything is stored, your existing key is untouched, and what
    you pasted stays in the box so you can fix it. The check itself was also wrong: it asked
    SteamGridDB something that does not need a key, so any text passed.
  • Uploading an agent installer can no longer break the update channel. Any file was accepted:
    uploading a text file by mistake replaced the working installer and left every machine being
    offered that as an update. Uploads are now validated before anything is replaced, and the new
    installer is only put in place once it has arrived in full. There is a real size limit again
    (200 MB, configurable).
  • A machine that has never checked in says "never reported" rather than "offline since —", which
    read as a machine that had stopped rather than one that had not started.
  • Browser Back and Forward work again across Games, Configuration and Audit Log.
  • The console uses the fonts it was designed with. A stylesheet ordering mistake meant the
    browser discarded the font import and fell back to system fonts everywhere.
  • Saves uploaded by a machine you later removed still say who made them — the machine's name
    followed by (deleted), rather than a blank — and stay downloadable and selectable when resolving
    a conflict.

Fixed — Windows

  • Updates are checked before they run. The server publishes a checksum for the installer and the
    agent refuses anything that does not match, or that is not actually a program. Updates from a
    location other than your own server are refused unless a checksum is published for them, and your
    machine key is never sent to a download host. Changing servers discards any update the previous one
    had offered.
  • A mistyped server address is rejected instead of saved. It used to be written to disk and then
    crash the agent on every start afterwards.
  • The folder holding this machine's credentials is now restricted to the account that set
    SaveLocker up
    , plus SYSTEM and administrators. %PROGRAMDATA%\SaveLocker holds this machine's
    server key and the token for its local settings API, and it had been inheriting Windows' default
    permissions, which grant every account on the PC read access.
  • Games added through the app now know which program to watch for. Only the command line could
    set this, so games added through the window were invisible to launch and exit syncing entirely.
    Where SaveLocker cannot work it out — an installed Steam game, for instance — Settings now says
    "Launch/exit sync not configured" and lets you fill it in, rather than implying it works.
  • **"S...
Read more

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 25 Jul 22:44
f596fba

v0.4.1

Released 25 July 2026

Steam Deck navigation. v0.4.0 made the Game Mode app look right; this makes it work right. If you
tried it and found the D-pad fought you, that is fixed.

On Steam Deck, download the newer tarball and re-run install.sh. Windows agents update themselves,
and nothing here changes the server — the console does not need redeploying for this one.

Fixed

  • Left returns to the menu from every screen. It previously did nothing at all, on every screen —
    the only way back was B. The release notes for v0.4.0 said Left worked from Overview; it did
    not.
  • Up and Down stay in the pane you are in. Pressing Down at the bottom of a screen used to jump
    across to Quit in the left menu, which is not somewhere you want to arrive by accident.
  • The D-pad no longer ignores presses. After a Left that did nothing, roughly three quarters of a
    second of further presses were silently discarded — the reason it took two presses of Down to move
    once.
  • The focus ring is no longer cut off on checkboxes and rows that sit near the edge of a pane.
  • The focus ring is easier to see. It now breathes in and out rather than only changing
    brightness, which on a 7" screen at arm's length was too subtle to notice at all.
  • The line under the header runs the full width instead of being hidden behind the panes below it.
  • B is a proper Back button. In the save-folder browser it goes up one directory; the hint bar
    used to promise "Cancel" there and do neither.
  • The sync-delay − and + buttons are stacked vertically, so Up and Down reach them in the order
    they appear. Side by side, Down skipped past entirely.
  • The A and B button hints are centred in their circles.
  • Screen transitions are slightly slower, enough to read as a transition.

For the curious

The navigation bug survived two previous attempts because the fix was thought to require an ImGui
feature that is not exposed. It is exposed — just not by the .NET binding, while the native library
shipped alongside it has always had it. Nothing was upgraded to fix this.

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 25 Jul 18:34
68e28c1

v0.4.0

Released 25 July 2026

The Steam Deck app grows up. It now looks like the rest of SaveLocker, sounds like the rest of Game
Mode, and carries the same information the desktop agent UI does.

On Steam Deck, download the newer tarball and re-run install.sh. Windows agents update themselves.

New

  • The Game Mode app has been redesigned. Same palette and typography as the web console and the
    desktop agent — no longer a bare debug panel. A header with connection status, a left rail of
    destinations, and a proper 1280×800 layout that actually uses the Deck's screen.

    • Overview leads with the numbers that matter — games tracked, saves backed up, last sync —
      then your tracked games and this device's details.
    • Settings is new here: change the sync settle delay, toggle start-on-boot, and remove games
      from this device. Connection details are shown read-only, since Game Mode has no keyboard.
    • A gamepad hint bar shows what A, B and the D-pad do on the current screen.
  • Interface sounds. Navigation and selection now make a sound. Where SteamOS's own Game Mode
    sounds are present they are used, so the app sounds like the rest of the console; otherwise
    SaveLocker generates its own. Turn them off in Settings → Interface.

  • Conflict warnings now reach the Deck. If you launch a game another machine has checked out,
    the warning appears in the Game Mode app.

Fixed

  • Save-conflict warnings were never shown on Linux at all. The Steam launch wrapper detected the
    conflict and then discarded it: it is a separate, short-lived process from the sync daemon, so the
    warning had nowhere to go and only reached a log file that Game Mode never displays. A Deck user
    who launched a game another machine had checked out was simply never told. Warnings are now stored
    on disk, so both the Game Mode app and the browser UI show them, they survive a restart, and
    dismissing one dismisses it everywhere. They expire after 24 hours.

  • D-pad navigation in the Game Mode app. Moving between the menu and the page content required
    pressing A to enter a pane and B to leave it, and the selection highlight was so faint as to be
    invisible. Now: the D-pad moves straight between the menu and the content, Right jumps to the
    first control on the page, and the cursor is clearly outlined wherever it is.

  • The discovered-games list was unreachable after a scan. Pressing Down from Scan for games
    jumped back to the menu instead of moving into the results, so there was no way to tick a game or
    reach Enroll selected.

  • The footer could be selected, and doing so scrolled its own contents out of view.

  • Long save paths ran off the edge of the screen. They are now shortened in the middle, keeping
    the part that identifies the game.

Known issues

  • Pressing Left does not always return to the menu. It works from Overview; from other screens
    you may need B instead. This is a limitation in the UI toolkit's gamepad navigation rather
    than a simple bug — see Backlog.md.

v0.3.6

Choose a tag to compare

@github-actions github-actions released this 25 Jul 02:07

v0.3.6

Released 24 July 2026

Steam Deck gets a gamepad-native Game Mode app. Add and configure a game's save sync from the
couch with the D-pad — no Desktop Mode, no browser, no typing.

On Steam Deck, download the newer tarball and re-run install.sh. Windows agents update themselves.

New

  • Steam Deck Game Mode UI — savelocker ui. Add SaveLocker to your Steam library as a non-Steam
    shortcut (the installer explains the one-time setup) and launch it like any game. Four screens,
    fully operable with the D-pad and A/B:

    • Add game — scan for your non-Steam games and tick the one to sync.
    • Set save folder — a folder browser that opens inside the game's own Proton prefix, with a
      side pane listing the files in each folder so you can confirm the save is really there. You can't
      enroll a game until its folder is set.
    • Steam launch setup — the launch-options command with a Copy button, ready to paste into
      the game's properties.

    That's the whole flow, start to finish, without ever leaving Game Mode.

  • Library artwork included. The Linux install now ships proper capsule, hero and logo images so
    you can replace the grey box with real cover art (right-click the shortcut → Manage → Set Custom
    Artwork
    ). A new Help article — Steam Library artwork — walks through it.

Fixed

  • A game added on the Deck is now mapped everywhere it should be. Setting a save folder in the
    Deck UI used to leave that path only on the device: the console showed the game as "not set", and a
    Sync from the console could come back with "no matching mapped game on this machine."
    Enrollment now reports the save path to the server as soon as you enroll, so the console sees it
    immediately and syncing just works. (This affects every agent, not only the Deck.)

Upgrading

docker compose pull && docker compose up -d

There is no database change in this release, so rolling back is safe. The server update just refreshes
the console's built-in Help.

Windows agents update themselves. On Steam Deck, download the newer tarball and re-run install.sh,
then add SaveLocker to your library (Add a Non-Steam Game → the savelocker binary, Launch
Options ui).

Known issues

  • The D-pad limitation was only ever the Desktop Mode browser. The old agent web UI at
    localhost:5178 still needs point-and-click (or a keyboard) for its folder picker — but the new
    Game Mode app is fully gamepad-navigable, so on a Deck reach for that instead.
  • Linux and Steam Deck have no auto-update. Download the newer tarball and re-run install.sh.

v0.3.5

Choose a tag to compare

@github-actions github-actions released this 24 Jul 17:05

v0.3.5

Released 24 July 2026

Prevention and escalation for conflicts. If you are already caught in one, you can now keep both
saves rather than choosing. If no one acts, the console and your Windows tray will eventually say so.

Both the server and the agents need updating. Windows agents update themselves. On Steam Deck,
download the newer tarball and re-run install.sh.

New

  • Per-game conflict policy. In a game's detail card you can now set how conflicts are handled:

    • Manual (the default) — unchanged. Conflicts wait for you.
    • Newest wins — when two machines diverge, the server keeps the newer save automatically and
      notifies both machines to pull. No conflict row is ever written.
    • Prefer machine — one machine's saves go through auto-resolve; all other machines still
      produce a conflict.
  • Keep both. When resolving a conflict you can now choose to keep both saves. The one you select
    becomes the current Latest; both snapshots are protected from automatic retention so you can
    promote the other later if you change your mind. The Versions list labels protected rows and offers
    an Unprotect button for when you are done.

  • Stale conflict escalation. A conflict that has sat unresolved for more than six hours
    is now marked overdue. The console shows a persistent Overdue conflicts badge, and agents
    are told on their next heartbeat — so a connected Windows machine raises a notification even if
    you are away from the console.

  • Agent backoff. After three consecutive rejected saves for a game, the agent stops uploading
    new archives and instead reports the open conflict without adding to it. This is the behaviour that
    should have prevented 2.6 GB of redundant uploads in the Octopath incident. A clean pull followed
    by a normal save resets the counter; force-push bypasses it if you know what you are doing.

Fixed

  • Resolving to an older version. If a machine uploaded a save between when the conflict was
    opened and when you resolved it, the console would silently replace the newer Latest with the older
    conflict option. That is now refused: the conflict stays open, the current head is untouched, and
    the console explains what happened.

Upgrading

docker compose pull && docker compose up -d

The database updates itself on start. ⚠️ Rolling back to 0.3.4 or earlier is not supported after
the update — take a copy of the database first if you want the option.

Windows agents update themselves. On Steam Deck, download the newer tarball and re-run install.sh.

Known issues

  • Steam Deck: the D-pad does not work in the agent's folder browser. Use point-and-click, or
    arrow keys with a keyboard attached.
  • Linux and Steam Deck have no auto-update. Download the newer tarball and re-run install.sh.