Skip to content

Collection reference

Your Collection (default ~/Emulation) is the central location for all your emulation data. This page documents its structure and how synchronization works.

~/Emulation/
├── roms/ # ROM files, organized by system
│ ├── snes/
│ ├── psx/
│ └── ...
├── bios/ # BIOS and firmware files, organized by system
│ ├── psx/
│ └── ...
├── saves/ # Save files (memory cards, battery saves), by system
│ ├── psx/
│ ├── gba/
│ └── ...
├── states/ # Emulator save states, by emulator
│ ├── duckstation/
│ ├── dolphin/
│ └── ...
├── screenshots/ # Captured screenshots, by emulator
│ ├── retroarch/
│ ├── duckstation/
│ └── ...
└── frontends/ # Frontend metadata and media
└── esde/
├── gamelists/ # Game lists per system
└── media/ # Scraped artwork per system

Saves are organized by system so that different emulators for the same system can share save files. States and screenshots are organized by emulator because their formats are emulator-specific. Kyaraben never reads, modifies, or deletes your ROMs, saves, or BIOS files.

Kyaraben uses symlinks to redirect emulator data directories to your Collection . For example, Dolphin normally stores GameCube saves in ~/.local/share/dolphin-emu/GC/. Kyaraben creates a symlink from that location to ~/Emulation/saves/gamecube/. The emulator runs with its default settings; the symlink transparently redirects data to your managed location.

When synchronization is enabled, these folders synchronize between devices:

ContentSync behavior
roms/Bidirectional
bios/Bidirectional
saves/Bidirectional
states/Bidirectional
screenshots/Bidirectional
frontends/esde/gamelists/Bidirectional
frontends/esde/media/Bidirectional

All folders use standard bidirectional sync. Deletions propagate to all devices, except ROM folders when ROM deletion protection is on (the default). See protecting ROMs from deletion.

When using EmulationStation DE, scraped metadata (game descriptions, ratings, etc.) and media (screenshots, videos, box art) synchronize between devices. Kyaraben strips play statistics (playcount, playtime, last played) before syncing to avoid conflicts, then merges local stats back when importing. This means each device tracks its own play history while sharing metadata and artwork.

Scraped videos can be large. See CLI reference to exclude them from synchronization.

Syncthing keeps old versions of save and state files for 30 days. ROM and BIOS folders do not use versioning.

ROM folders do not use versioning because ROMs are large and replaceable, so instead Kyaraben can keep a device’s ROMs even when they are deleted elsewhere. This is controlled per device by the “ignore ROM deletions” sync setting, which is on by default. On desktop and Steam Deck you toggle it from the sync settings. On a headless server use kyaraben sync ignore-rom-deletions on or off, and kyaraben sync status shows the current state for this device and its peers.

This lets you free space on one device by deleting ROMs locally without removing them from your other devices. Each device decides for itself: a device keeps its ROMs only if the setting is on for that device. The setting is local and is not shared between devices, so for a device to stay complete it must have the setting on. Deleting a ROM on a device whose peers have it off still removes the ROM from those peers.

If you run a headless server as a sync hub, a good setup is to leave this setting on for the server and turn it off on your other devices. The server then keeps every ROM as a complete archive, while deletions still propagate normally between your other devices so you can free space across them. To put back a ROM you deleted, copy it from the server.

Trade-offs while the setting is on:

  • ROM deletions from other devices are not applied, so removing a ROM everywhere becomes a manual action on each device.
  • A rename or move is a delete plus a create, so renaming a ROM on another device can leave the old-named copy behind as a duplicate.

Handheld guest integrations such as NextUI have the same setting, but default it off, since a handheld usually wants deletions to free card space.

When the same file is modified on two devices before they sync, Syncthing creates a conflict file instead of overwriting either version. Conflict files have names like game.sync-conflict-ABCD123-20260307-120000.srm.

To check for conflicts:

  • UI: conflict counts appear in the sync status for each folder
  • CLI: run kyaraben sync status to see per-folder conflict counts

To resolve a conflict:

  1. Find the conflict file in the affected folder (look for .sync-conflict- in the filename)
  2. Compare it with the original file and decide which version to keep
  3. Delete the version you do not want

Conflict files sync between devices, so you only need to resolve them once.