Devices
A device is anything that syncs saves with RomM on your behalf: a handheld running Grout, a phone running Argosy, RetroArch, or a web browser you play in. Each device belongs to one user and keeps a record of the last version of each save it synced, which is how an ordinary update is told apart from a conflict.
Your devices are listed at /devices, where you can rename a device, turn sync off for it, or remove it.
Browsers are devices too
All five in-browser players (EmulatorJS, EasyRPG, js-dos, PICO-8 and Ruffle) sync saves through device sync. Each browser profile registers itself as a device the first time you play, named after the browser and OS, such as "Firefox on macOS", so a second browser, or a second profile in the same browser, is a separate device.
When a game launches, the browser negotiates its saves with the server, the same way a handheld does at the start of a sync (see Saves & States). A save made in one browser is waiting in another, and when both changed the same slot, the browser plays the server's copy and archives its own so neither is overwritten.
A browser keeps its saves in local storage until they reach the server. Because that storage can be cleared or evicted, a save the browser no longer holds is treated as lost rather than deleted, and the server offers it back on the next launch.
An account without the devices.write permission can't register devices, so its browsers keep their saves locally and skip device sync.
Managing devices
- Renaming changes only its display name, for example to tell two handhelds of the same model apart.
- Turning sync off means that device's sync requests are refused, so nothing moves in either direction until you turn it back on, and a browser with sync off keeps its saves locally.
- Removing a device deletes it, its sync history and any installs queued for it, but the saves it uploaded stay on the server. A browser registers itself again the next time you play in it, and an app re-registers on its next sync, so removing is mostly for cleaning up a device you no longer use.
Install on device
A game you send to one of your devices is added to its download queue and fetched the next time the device is online.
Only devices whose app reports that it accepts installs are offered, which leaves out browsers and RetroArch. Devices also show their online status, meaning the app holds an open connection to the /devices socket, as a supporting app does while it runs.
A request waits in the device's queue until the device takes it and reports back. You get a notification when it finishes or fails, and you can cancel a request any time before it finishes. A request nothing picks up expires after DEVICE_INSTALL_REQUEST_TTL_DAYS days without a change (2 by default).
The device receives the game's own files, along with any update and DLC files in its folder, but not manuals or other extras. A game with none of those files on disk can't be installed.
Server settings
| Variable | Default | Description |
|---|---|---|
DEVICE_INSTALL_ENABLED |
true |
Turn installs on or off for everyone |
DEVICE_INSTALL_REQUEST_TTL_DAYS |
2 |
Days an unfinished request waits after its last change (0 waits forever) |
DEVICE_INSTALL_EXCLUDED_PLATFORM_SLUGS |
win,win3x,win9x,windows-apps |
Comma-separated platform slugs that can never be sent to a device |
Install requests live in Valkey rather than the database, so they're lost if Valkey loses its data, and devices then see an empty queue.
Apps that accept installs follow the request lifecycle and /devices socket events described in the Device Sync Protocol.
See also
- Saves & States: how they sync
- RetroArch Cloud Sync: saves and states over WebDAV
- Client API Tokens: how apps pair with RomM