Save Sync¶
Save sync keeps your game saves in sync between multiple devices through your RomM server. Play a game on your Steam Deck, then continue where you left off on your HTPC — your saves travel with you.
How It Works¶
Tender uploads and downloads your RetroArch game saves to and from your RomM server. When you start a game, Tender checks if the server has a newer save and downloads it. When you stop playing, it uploads your updated save.
Important: Save sync runs before and after a RomM game you start with Tender's Play button on the game detail page, with Steam's own Play, or through a
steam://rungameidlink. If Tender does not answer within about five seconds of a start with Steam's own Play or a link, the game starts without the sync before it, and a message says so. If Tender answers that first time but a later step of the check before the start gets no answer in time — or, with Tender's Play button, any step before the save sync does — a Save Sync Unavailable dialog asks "Couldn't check your saves in time — launch with local saves?". Launch Anyway starts the game on the save already on the device, and Cancel starts nothing. When the sync before the start is not done after about fifteen seconds, the start does not go ahead by itself: a Waiting for Save Sync dialog says why it is held up and lets you Wait, Play Anyway — which stops the sync — or Cancel (Play is waiting for a save sync).
Sync uses a newest-wins model with a hash-divergence guard:
- Tender asks the RomM server for the saves in your active slot for the game and picks the newest (highest
updated_at). - If the server tracks your device as up-to-date and your local file matches the recorded baseline, there's nothing to do.
- If your local file is already identical to the newest save in RomM — a fresh install, a copied SD card, the same save synced from elsewhere — nothing is transferred: Tender records it as synced and, where RomM does not yet count this device as having it, tells RomM so.
- If another device pushed a newer save and your local file is unchanged, the new server save is downloaded silently.
- If you played offline and your local file changed, your save is pushed back to the server.
- A conflict modal only appears if both sides changed to different content since the last sync, if a save on this device that Tender never synced meets a different save in RomM, or if your local save looks emptied or cut short — Tender won't silently overwrite either version. A save is measured by its content, not counting the empty padding some emulators write at its end, so one that is smaller only because its emulator writes less padding is not taken for a cut-short one. Where the emulator writes a save at a fixed size, such as a cartridge's battery save, a memory card image or a console's backup RAM, a save that is now smaller than what it held at the last sync (padding not counted) counts as cut short, however little it lost. (A save last synced by an older version of Tender and changed since is judged once by its full size; if that raises a prompt, resolving it settles it.)
This is the same model used by the official RomM clients (Argosy and Grout). It keeps cross-device save sync simple: one timeline per slot, newest wins.
Saves are per version¶
When a game has several versions — a (USA) dump and a (Europe) one, a (Rev 1), and
so on — each version has its own saves, on RomM and on disk. Automatic sync only ever touches the active version
(the one currently bound to the shortcut). Switching versions never copies, moves, or deletes a save.
That means an inactive version's local saves simply wait: if you switch away from a downloaded version whose saves haven't been synced to RomM — saves that were never uploaded, or that changed since their last sync — those saves stay on disk untouched and resume syncing the moment you switch back to that version. Tender warns you before you leave such a version and shows a reminder banner on the Saves tab so the saves aren't forgotten (see Managing Games → Versions). Nothing is lost — the saves just don't sync while their version is inactive.
- With save sync off neither the warning nor the banner appears: nothing is being synced, so nothing is left behind by a switch.
- Where Tender couldn't check whether a version's saves have been synced — a save file it can't read, for instance — it warns all the same, and says that it couldn't check.
- A version no longer available on RomM can't receive its saves any more, so the warning offers only Switch anyway and Cancel; the saves stay on disk.
The reminder never tells you to switch back to a retained version that the current version-list check positively confirmed is no longer available on RomM. Such a row may still keep its local files and saves, but it cannot be selected; the Saves tab skips it and continues looking for unsynced saves on later live inactive versions.
While a game is running¶
Tender does not change the saves of a game Steam lists as running — starting, running or exiting: the emulator still has them, and a save swapped under it would be written over by the game, or sent to RomM later in place of another device's newer one. The game's saves sync before it starts and after you quit it, as always. Tender asks Steam over the same connection it loads its panel through; when it cannot ask, it treats no game as running. A game Steam does not list yet, in the moment after you start it, does not count either, and a RetroDECK home migration moves a game's saves whether it runs or not. While a game runs:
- Sync All Saves Now syncs every other game and names the one it left out: "\<game> was skipped because it is running".
- On the running game's page, Sync Save Files and Delete Local Saves in the RomM Actions menu, switching, creating or deleting a slot, Copy to slot, restoring a version, resolving a conflict and the setup's copy of older saves into a slot are refused: "\<game> is running. Quit it first." A version switch that first syncs the version you leave says the same.
- Deleting all local saves of a platform keeps the running game's saves and names it.
- Clean Up Removed RomM Games leaves a removed game that is running as it is — its shortcut, its files and its saves — and offers it again the next time.
- Starting a game with Play Anyway while Sync All Saves Now or Sync Save Files is syncing that game stops that game's sync; the rest of a Sync All Saves Now goes on.
- A conflict you resolve in the check before a game starts is not refused, even where Steam still lists a start that check held back.
When a press is refused and no game is running, see A save action says the game is running.
Important: Use Your Own RomM Account¶
Save files in RomM are tied to the authenticated user account. If multiple people share the same RomM account, their saves will overwrite each other. Each person should have their own RomM account with their own credentials configured in Tender.
Supported Systems¶
Save sync works on the per-game save files written by the emulator a game launches with, on the systems RetroDECK supports. Standard cartridge saves (SRAM) sync automatically; several systems also sync their own formats — RTC, EEPROM, and console-specific backup RAM — so it is not limited to a single file type. Exactly what syncs varies by system: for the current per-system breakdown of what carries across devices today and what's planned, see the save sync support matrix.
That includes standalone emulators (PCSX2, DuckStation, Dolphin, PPSSPP, melonDS and the like): Tender asks the emulator a game launches with where that game's saves are, and syncs them whenever the answer names files that belong to that one game. Whether that works from start to finish with a particular standalone emulator has not been established, so treat a standalone emulator's saves as untested. The answers that keep save sync off, standalone PCSX2's shared memory card among them, are listed under When save sync does nothing, and why.
Each game's Saves tab says whether its saves sync:
- A downloaded game whose saves Tender cannot sync has a warning mark beside the tab's title, so you see it without opening the tab, and the tab says why instead of offering slots. That holds for a game you set up earlier too: its slots on RomM stay as they are and show again once its saves can be synced. Play starts such a game without a setup step. Where the reason is a saves folder that does not exist, Play still asks before starting the game on the saves on the device, while Sync before launch is on and RomM can be reached.
- A game whose saves sync and that has no save yet reads "No save yet — emulator's saves for this game sync with RomM once it writes one.", naming the emulator entry the game starts with, as the emulator menu shows it, or "No save yet — this game's saves sync with RomM once its emulator writes one." where the game starts with no entry. While RomM cannot be reached, a slot with no save on the device reads "No save on this device."
- A game that is not downloaded says whether its saves will sync once it is: "Not downloaded. Once it is, emulator's saves for this game sync with RomM.", or "Not downloaded. Once it is, its saves sync with RomM." where the game starts with no entry; "Not downloaded. Once it is, its saves will not sync:" and the reason; or "Not downloaded. Whether its saves will sync could not be established." where Tender could not tell. Tender works that out from where the game would be downloaded to. Its slot setup stays as it is, and the tab is not marked.
The tab asks when the game's page opens, and again after a version switch, a change of emulator, switching save sync on, a download, an uninstall, and each time you open the tab. So when the emulator's own settings change so that a game's saves can be synced, its refusal and its mark go the next time you open its Saves tab.
With save sync off¶
The Saves tab is there with save sync off too. It reads "Save sync is off." and lists the save files this device holds for the game in the folder its emulator reads now — each with the folder it lies in, its size and when it last changed — without asking RomM anything, or "No save on this device." where there is none. Saves a sorting change left in a folder the emulator no longer reads are not listed while save sync is off: following them is part of save sync. For a downloaded game whose saves Tender cannot sync it gives the reason instead, and lists nothing; the tab carries no warning mark while save sync is off. A game that is not downloaded reads "Not downloaded — no save on this device." The tab offers no slot, sync, copy or restore, since each of those needs save sync. It reads the files again each time you open it and after the game is downloaded or uninstalled, and switching save sync on or off while it is open switches what it shows.
With save sync off, Play — Tender's, Steam's own, or a link — starts a game without the slot setup: it asks RomM nothing, shows no message and sets up no slot, whether RomM can be reached or holds slots for the game.
Settings¶
Open Save Sync from the main QAM page to configure sync behavior.
Auto Sync¶
- Sync before launch (default: on) — runs sync before a game starts. If the server is unreachable, the game starts with your local save — or asks first, if that save has changed since its last sync. On a game's page, Play reads Preparing... while Tender gets the start ready, and Syncing saves... only once this sync has begun. With this setting off, with save sync off, with RomM's own save sync switched off for this device, or for a game whose saves Tender cannot sync, it never reads Syncing saves....
- Sync after exit (default: on) — runs sync after closing a game. A toast confirms what moved and which way — "Saves uploaded to RomM", "Saves downloaded from RomM", or "Saves synced with RomM (1 up, 2 down)" when a run went both ways; a sync that transferred nothing shows no toast. If the sync fails, the toast names the actual cause (see Offline Behavior) instead of a generic message.
When saves conflict¶
Tender uses a single, automatic resolution policy:
- Newest server save in your slot wins by default. If your local save hasn't changed since the last successful sync, the server version is downloaded silently; if it is already identical to that version, nothing is downloaded at all.
- Your local edits push automatically when the server still considers your device up-to-date — for example, you played offline and no other device synced in the meantime.
- A conflict modal appears only when both sides changed to different content since the last sync, when a save on this device that Tender never synced meets a different save in RomM, or when your local save looks emptied or cut short. You pick which version to keep.
Tap Sync All Saves Now to sync saves for all installed ROMs at once. This is useful for:
- Bulk backup before uninstalling ROMs
- Catching up after a period of offline play
- Verifying that all saves are in sync
This only covers games you've already set up save sync for (games whose save slot you've confirmed). Games you haven't configured yet are left untouched, so a stale local save can't accidentally overwrite newer progress from another device.
In the line it answers with, "Synced N save(s) across M ROM(s)", M counts the games whose saves it compared with RomM, those already in step included. After it, it says how many games it skipped and why, one reason at a time: games not set up for save sync, games whose saves cannot be synced, games whose saves folder does not exist (naming the folder), games whose saves are written beside the game file, and, by name, games that are running. A missing saves folder makes the sync fail, as syncing that one game would; every other skip is no error.
Resolving Conflicts¶
When both your local save and the server save have changed to different content since the last sync, or a save Tender never synced meets a different one in RomM, or your local save looks emptied or cut short, a modal appears with both versions.
Each side shows:
- File size
- Modified / uploaded timestamp
Three actions:
- Keep Local — keeps your local save; it becomes the server's save.
- Use Server — downloads the server save and overwrites your local file.
- Cancel — dismisses the modal without changing anything. The conflict will reappear on the next sync as long as both sides still differ. If another device pushes an update in the meantime, the situation may resolve automatically (your unchanged local file gets the new version) and the modal won't reappear.
The modal blocks the Play action until you choose. If a post-exit sync detects a conflict you'll see a toast — the modal opens the next time you tap Play, where it blocks launch until resolved. If Sync Save Files in the RomM Actions menu finds a conflict, you'll see a toast and the Play button turns into Resolve Conflict; tap it to open the modal and resolve the conflict there. There is no longer a separate "pending conflicts" list on the settings page.
Copying a Save to Another Slot¶
On the SAVES tab, most save rows carry a Copy to slot… button — the active slot's current save, its Previous Versions, and the saves listed under any other slot (including the read-only Manual archive — saves uploaded to RomM without a slot). Tap it to copy that save into another slot:
- Pick an existing slot, or type a name to create a new one.
- The copy is not a move — the original save stays where it is. Delete it from the RomM web app later if you want it gone.
- The slot you copy into becomes the game's active slot, with the copied save as its current save.
- If that save's content is already in the destination slot, nothing is copied — you're told it's already there
(shown as
#<id>). - If the save can't be fetched onto your device, the copy fails and your active slot stays as it was.
- If the save is copied onto your device but can't be uploaded to RomM, you're told so: the destination slot is active with the copied save, and the next sync uploads it. Where the destination slot already holds a save this device is not up to date with, or one more than twice the copy's size, the next sync asks you which to keep instead. If the destination slot held no save of this file and another device puts a different file of this game's save into it at the same moment, the next sync reports an error for the copied file instead.
Common uses: promote a save from the Manual archive into a named slot, or bring a save from one slot onto another so you can continue it there.
The button is unavailable while RomM is offline. If the game's current slot has an unresolved conflict, resolve it first (you'll be prompted). If the destination slot has newer changes from another device, nothing is copied and your active slot and save stay as they were: activate that slot with Activate Slot, which syncs it, then copy again.
A game whose save Tender does not sync is refused here too, and so are switching its slot and restoring an older version — for example a memory card every game shares (standalone PCSX2's, even though Tender knows its folder), a save written into the game file itself, or saves written beside it; the message says why.
Copying a save and restoring an older version are also refused while Tender installs an update, while a RetroDECK home migration is waiting, and while Clean Up Removed RomM Games runs. Either press then shows "Couldn't copy the save: …" or "Couldn't restore the save: …" with the reason, and nothing changes.
Core Switch Warning¶
When you switch the emulator core for a game (e.g., from mGBA to gpSP for GBA), Tender detects the change and shows a warning before launching. This is because some cores use incompatible save formats — launching with a different core may overwrite your existing save with data the previous core can't read.
The warning shows which core you're switching from and to. You can:
- Continue — launch with the new core (your save may be overwritten)
- Cancel — go back and switch the core back before launching
A per-game core applies for any ROM filename — Tender starts the chosen core's command itself rather than relying on RetroDECK's gamelist lookup. See Changing the Active Core for how per-game and per-platform cores work.
Which cores are compatible?¶
Most cores for the same system produce compatible .srm saves because the save format is defined by the original
hardware, not the emulator. However, there are exceptions:
| System | Cores | Compatible? | Notes |
|---|---|---|---|
| SNES | Snes9x, Supafaust, bsnes | Yes | All dump raw cartridge SRAM identically |
| PSX | Beetle PSX, PCSX ReARMed | Generally yes | Both use RetroArch's .srm memory card convention, but verify after switching — historical edge cases exist with memory card handling |
| N64 | Mupen64Plus, ParaLLEl | Generally yes | ParaLLEl-N64 is based on Mupen64Plus-next and shares save logic; save-type auto-detection can occasionally mismatch between cores |
| GBA | mGBA, VBA-M | Generally yes | Minor edge cases with save type detection |
| GBA | mGBA ↔ gpSP | No | gpSP uses different save type detection; may corrupt saves |
| NDS | MelonDS ↔ DeSmuME | No | Completely different save formats |
If in doubt, don't switch cores mid-playthrough. Before switching, back up your
.srmfile — copy it somewhere safe (e.g. asaves-backup/folder). If the new core loads your save correctly, you can delete the backup. If it doesn't, you can restore the backup and switch the core back.
Offline Behavior¶
If the RomM server is unreachable when a sync is attempted:
- Before launch: the game starts with your local save. If that save has changed since its last sync, you are asked first whether to start anyway, retry the connection, or cancel.
- After exit: the upload is skipped. Your local save is untouched, and the next sync attempt produces the same outcome — typically pushing your changes once the server is reachable again.
- No save data is ever lost due to a failed sync.
The slot list comes from the server, so while RomM is unreachable the SAVES tab has no confirmed slot to show — and it names none rather than guessing. Your locally tracked save files are still listed, just not filed under a slot panel, and the offline banner at the top of the tab explains why slot switching is unavailable. The slots, and the active one among them, reappear as soon as the server is reachable again.
The sync status recovers with them. While RomM is unreachable the tab shows "Server unreachable" where the sync state would be, and the per-file rows are missing the parts that only the server can answer — when the save was last updated, which save is on the server, and which device synced last. Once the server is reachable again the tab re-reads all of it and fills those rows in, with the game's page still open. You do not have to leave the page and come back.
Below those files the tab shows the slots as RomM last reported them, with the one that was active then marked — dimmed, not pressable, and introduced by a line saying the save counts and times are from that last contact rather than from now. It is there so an offline tab shows what the device knows instead of an empty space; nothing in it can be expanded or activated, and creating a slot still needs the server. A game you have never set up a slot for has no such history to show, so its tab stays as described above.
"Server offline" is reported only for a genuine reachability failure (the server can't be reached or times out). A sync that fails for another reason — for example an expired or revoked login token, or an SSL certificate problem — shows that specific reason instead (such as "Authentication failed — check your username and password"), so a working server is never mislabelled as offline. That includes the case where RomM answers that it no longer has something Tender asked about: if the game was deleted and re-added on the server (which gives it a new id), or the RomM database was wiped and this device's registration went with it, the server is answering perfectly well. You'll see a message naming what's missing rather than "RomM is offline", and the offline badge stays clear. The same holds when RomM or a proxy in front of it refuses a request outright (a save too large for the proxy shows "RomM or a proxy in front of it refused the request (HTTP 413 Request Entity Too Large)"), when RomM is rate-limiting requests, when RomM reports an error of its own, and when this device cannot write a save it downloads, a full disk among them. A "not found" or a server error that does not come from RomM itself — the kind a proxy sends when RomM behind it is stopped — still counts as the server being unreachable, because it says nothing about RomM being up. This applies to both surfaces: the warning shown before launch and the "after exit" toast both name the actual cause rather than a generic "failed to sync" message. When more than one save file fails in the same sync, the toast shows the first file's reason followed by a "(+N more)" count so the message stays short. If you see an authentication message, re-enter your server URL and sign in again in Tender's settings.
One more thing "Server offline" is never used for: syncs run one at a time on your Deck, so if you exit two games within moments of each other, the second one's sync waits for the first. If that wait runs long the second sync is skipped, and it says so — "Another save sync was still running — saves will sync next time". Your local save is untouched and is picked up by the next launch or by a manual Sync All Saves Now; nothing about your server is wrong.
The after-exit sync is skipped the same way while Tender is installing an update from Settings, and the toast says so — "Tender is installing an update — saves sync with the next sync that runs". Your local save is untouched, and the first sync after the update picks it up. It is skipped as well while a RetroDECK path migration is pending, and the toast asks you to deal with the migration first — "Pending RetroDECK migration. Open the Tender menu (QAM) to migrate or dismiss." With Tender's Enable Save Sync toggle or Sync after exit switched off, neither of these toasts appears: no sync would have run.
A game that exits while a cleanup of games removed from RomM is running gets no after-exit sync, and neither its session's playtime nor its saves are synced — the toast says "Playtime and saves for this session were not synced — a removed-game cleanup was running". The saves stay on your Deck, and the next sync takes them.
After a failed sync the game-detail save panel reflects the honest state right away: a file whose upload failed shows a yellow Local changes badge (not a green "synced"), and its "Last synced" line keeps the time of the last successful sync — a green checkmark appears only once a sync actually succeeds. A separate "Checked" line shows when Tender last attempted a sync, so a recent failed attempt and the last good sync are both visible.
Sync Disabled for This Device on the Server¶
RomM lets you turn save sync off for a specific device in its own device settings (on the RomM web UI). If you disable sync for this device there, Tender stops syncing that device's saves and tells you so — a manual sync reports "Save sync is disabled for this device on the RomM server", and the after-exit toast says the same. Your local saves are left untouched, and the game still launches normally (before-launch sync just skips). Re-enable sync for the device in RomM to resume. This is separate from Tender's own Enable Save Sync toggle in the QAM — either one being off stops syncing.
Playtime Tracking¶
Tender tracks playtime per game. Session start and end times are recorded, and time the device spent suspended (asleep) during a session is excluded, so a game left running overnight in sleep does not inflate its playtime. Playtime is displayed on the game detail page, in the Playtime cell next to the Play button.
Each finished session is sent to RomM's built-in play-session store, so your last_played time shows correctly in the
RomM web UI. This is separate from save sync — playtime is recorded for every game on every exit, even when save
sync is off. The one exception is a game that exits while a cleanup of games removed from RomM is running: that
session's playtime and saves are not synced, and a notification says so; the saves stay on your Deck for the next sync.
If RomM is unreachable, the session is queued locally and uploaded automatically the next time you launch a game or
reconnect (nothing is lost).
The displayed playtime refreshes live: when you finish a session the PLAYTIME value updates on the same detail page without needing to navigate away and back. Opening a game's detail page also reconciles playtime with RomM — if you played the same game on another device, that device's play is folded in (the total only ever goes up, never backwards) and shown as soon as the page loads. Cross-device reconcile needs a RomM server version that grants the play-session read scope and a fresh sign-in; until then the displayed value is your local total. After upgrading, sign in again to enable cross-device playtime — Tender shows a banner in the QAM panel prompting this whenever your saved login predates the play-session read scope. When RomM is unreachable the displayed value stays on your local total.
The LAST PLAYED date on the detail page comes from this same cross-device history, so it stays correct after you move to a new device — where Steam would otherwise reset it and show every game as just played. Until the server has a recorded session for a game (or while RomM is unreachable), the date falls back to Steam's own last-played value. When a session ends, the date shows it at once, also on a detail page that stayed open.
Steam also tracks playtime natively for non-Steam shortcuts, so you'll see playtime in the standard Steam UI as well.
Upgrading from an older version: earlier releases stored playtime in a hidden RomM note named
romm-sync:playtime. Tender no longer uses these notes and starts fresh with the native store — your local total is preserved and keeps showing until the server re-accumulates. The old notes are left on the server, harmless; you can delete them yourself from RomM if you like.
Save File Location¶
Save files live where the emulator itself keeps them. Tender does not work that folder out on its own: it asks, for each game and for the emulator that game launches with, where that emulator reads and writes the save — the same answer that says which files the save consists of. On a stock RetroDECK install that is typically:
- Internal SSD:
~/retrodeck/saves/{system}/{rom_name}.srm - SD card:
/run/media/deck/Emulation/retrodeck/saves/{system}/{rom_name}.srm
Some cores keep their saves in a folder of their own below that — the 3DO core, for example, writes to
saves/3do/opera/per_game — and Tender now looks there, because that is where the answer points. That has not yet been
observed on a device.
Tender never creates the saves folder an emulator source's settings name. While that folder does not exist — on an SD
card that is not inserted, say — no save of that source's emulators is synced: created anyway, the folder would land on
internal storage, and the SD card would hide what was synced into it once it is back. A game's save sync says what the
main panel's notice for that folder says, and starting a game asks first whether to launch with the saves on this
device, while "Sync before launch" is on and RomM can be reached. A game's exit says Save sync is unavailable: the
saves folder path does not exist. in a notification while "Sync after exit" is on, because the saves you just made
were not synced. A saves folder the settings do not name — RetroDECK's retrodeck.json damaged or unreadable, say —
stops nothing. Folders below an existing saves folder, for one emulator or one game, are still created as the emulator
would create them.
Tender also syncs and writes no save at a place the emulator's own settings did not name. Where an emulator's settings
file is missing — it was never started, say — or cannot be read, Tender cannot tell where it really keeps the game's
saves. That game's save sync then says why: with the main panel's notice where the problem is one the notice shows
(RetroArch's own settings file, or an emulator source that is not set up), and otherwise with Emulator's settings
file file is missing, so Tender cannot tell where it keeps this game's saves. (or cannot be read). A sync before
a game starts or after it exits passes such a game over without a message. A damaged or unreadable retrodeck.json
alone does not stop save sync: it names RetroDECK's own folders, while each emulator's save place comes from that
emulator's own settings.
RetroArch Save Sorting¶
RetroArch's two "Sort Saves into Folders" settings (Settings › Saving) decide which folder a game's save goes into. Save sync follows whichever combination you use — none of them is required:
| Content Directory | Core Name | Save path |
|---|---|---|
| ON | OFF | saves/gba/game.srm |
| OFF | ON | saves/mGBA/game.srm |
| ON | ON | saves/gba/mGBA/game.srm |
| OFF | OFF | saves/game.srm (flat) |
On a fresh RetroDECK install the first row is what you have.
When you change the sorting¶
RetroArch does not move existing saves when you change these settings, so after a change your saves sit in a folder it no longer reads. Tender notices the next time it touches that game's saves — at launch, when the server can be reached; at exit, when Sync after exit is on; when you sync the game by hand; when the game page shows its saves; before a slot switch, a restore of an older version, a copy to another slot or a conflict resolution; before Delete Local Saves; when Library › Platforms counts a platform's save files as you pick it, or before its Delete N save files; or, for games whose save slot you have set up, when you use Sync All Saves Now — and moves that game's save files into the new folder first. There is nothing to confirm and no notice to act on; each game follows on its own.
Following a game's saves into the new folder is part of save sync: with save sync off, neither happens. A sorting change made while it is off is followed once save sync is on again, the next time Tender touches that game's saves — for a game whose save folder Tender had already noted before the change. It notes every installed game's folder once, on the first start of this version, and each game's again whenever it follows it; a game it had never noted starts from where RetroArch looks now. While a RetroDECK home migration is waiting or running, nothing is followed: those files are the migration's to move.
If the new folder already holds a file with the same name, nothing is overwritten: the older of the two copies is moved
into a .romm-backup folder beside it, and the newer one is kept where RetroArch looks.
Saves written next to the game file¶
When a game's saves are written beside the game file instead of in the saves folder — usually because RetroArch's
Write Saves to Content Directory is on — save sync stays off for that game. The game still launches, and its
Saves tab is marked and says why its saves are not synced, with RetroArch's setting named under the reason. Turning
that setting on moves no save into the game's folder, and turning it back off finds the saves where they were. A save
the emulator writes into the game file itself (an Amiga .adf, an Atari ST .st) is a different case, and syncing that
game by hand says so.
Updating from a version with the save-sorting migration¶
Earlier versions asked you to migrate save files in Settings after a sorting change. If you changed the sorting and had not run that migration yet when you updated, Tender cannot tell where those saves were: it starts from where RetroArch looks now. A game whose save is on your RomM server gets it back at its next sync, downloaded into the new folder. A save that exists only on this device stays in the old folder — move it into the new folder yourself, or set the sorting back to what it was before.
RomM Version Compatibility¶
Tender requires RomM >= 5.4.1. Pre-release builds whose numeric core is above that floor pass — for example
5.4.2-beta or 5.5.0-alpha.1. Tags at the exact floor (5.4.1-beta.1, 5.4.1-alpha.1) are rejected because they
rank below the 5.4.1 release. Servers below 5.4.1 are rejected at connection time with a full error page in both the
QAM panel and the game detail view. Tender uses server-side device tracking, content hashing, save slots, and
device_syncs for conflict detection. Save sync is built on RomM's Device Sync, which arrived in RomM 4.9.0; the
minimum is 5.4.1 so that a download can leave a game's manuals, soundtracks and other extras on the server. It reads the
category RomM files each file under, which from RomM 5.4.0 on comes only from the folder directly below the game's own
folder.
For technical details on how save sync works internally (three-way conflict detection, state schema, session detection), see the Save File Sync Architecture technical reference.
Previous: RetroDECK Path Migration | Next: Troubleshooting