Saves & States
Two different things, often confused:
- Save files: the in-game save (
.srm,.sav,.save, etc.). What the game writes when you use the in-game save feature. Works across emulator cores that share the format. - Save states: a full memory snapshot of the emulator at a moment in time. Emulator-specific. A SNES9x state won't load in bsnes.
Both are per-user per-ROM and stored under /romm/assets/<user>/<rom>/. They follow you across browsers and devices.
Uploading
You can upload save files for your own games (handy for importing from real hardware via Retrode/GB Operator or from another emulator). Same flow for states, with an optional screenshot attachment that's autogenerated when the state is created from in-browser play.
Selecting on launch
If a ROM has multiple saves or states, RomM presents a picker before the emulator loads.
In-emulator behaviour
In-game save/save-state/load-state actions are written straight back to the server, so there's no "forgot to upload" step.
Device sync
Saves and states can sync to/from registered devices (Grout on muOS, DeckRommSync on a Deck, etc.). Covered in depth in the ecosystem section:
- Device Sync Protocol: wire-level reference
- SSH Sync: operator-side config
- Argosy Launcher/Grout: per-app setup
Once a device is paired and sync is running, saves made on the device appear server-side within a couple of sync cycles (default: 15 minutes). Conflicts (same ROM saved on two devices between syncs) surface as two separate save entries, so pick which to keep.
Format/core compatibility
Saves
Save files are usually format-interchangeable across cores for the same platform but not always.
| Platform | Format | Usually-compatible |
|---|---|---|
| NES | .sav |
Yes, across FCEUmm/Nestopia |
| SNES | .srm |
Yes, across SNES9x/bsnes |
| Genesis/Mega Drive | .srm |
Yes |
| Game Boy/GBC/GBA | .sav |
Yes, across Gambatte/mGBA |
| N64 | .srm, .eep, .fla |
Yes but per-type: the right file must be uploaded |
| PSX | .srm (memory card) |
Yes, across Mednafen/PCSX cores |
| Saturn/Dreamcast | Varies | Check core docs |
If you're moving saves between the bundled EmulatorJS and a stand-alone emulator (RetroArch, Dolphin, PPSSPP), it usually works for mainline cores.
States
Save states are always core-specific. A SNES9x state will not load in bsnes. If you switch cores, your states become useless.
Practical advice: stick to one core per platform if you use states heavily, or use save files (which are interchangeable) as your primary persistence.
RetroAchievements and states
If you use RetroAchievements in hardcore mode, loading a save state disables achievement tracking for that session. This isn't enforced locally but the RA server will stop crediting achievements. Use save files (the in-game save) instead of states if you care.
Troubleshooting
- Save uploaded but the game doesn't see it: wrong format for the core. Check the compatibility table above, then re-upload or switch cores.
- State loads a corrupted frame: state was saved by a different build of the core. If the emulator bundle updated, old states may not load cleanly. Re-create or start a fresh save.
- Save disappears after play: the emulator didn't flush on quit. Use the in-game save feature instead of just closing the browser.
- Can't upload, "file too large": reverse proxy limit. Raise
client_max_body_size/proxy-body-size(see Reverse Proxy).
More in Troubleshooting.