Skip to content

Headless server

Run Kyaraben on a headless Linux server as a central sync hub. The server stores your collection and syncs with devices that run emulators locally.

Use cases:

  • Home server as the primary storage for ROMs and saves
  • NAS device syncing to multiple gaming machines
  • Cloud VPS as a backup destination

Download the CLI binary from GitHub releases:

Terminal window
curl -fsSL https://github.com/fnune/kyaraben/releases/latest/download/kyaraben-cli-linux-amd64 -o kyaraben
chmod +x kyaraben
sudo mv kyaraben /usr/local/bin/

Initialize a headless configuration:

Terminal window
kyaraben init --headless --collection /path/to/emulation

This creates ~/.config/kyaraben/config.toml with:

[global]
collection = "/path/to/emulation"
headless = true
[sync]
enabled = true

Apply the configuration:

Terminal window
kyaraben apply

This creates the full directory structure for all systems and installs Syncthing, but does not install any emulators.

Enable user services to run without an active login session:

Terminal window
loginctl enable-linger $USER

This allows Syncthing to keep running after you disconnect from SSH.

Generate a pairing code on the server:

Terminal window
kyaraben sync pair

On your desktop or Steam Deck, enable synchronization and enter the code.

If the pairing code doesn’t work (requires Syncthing relay access), use the device ID directly:

Terminal window
kyaraben sync pair --device-id
# Copy the full ID and enter it on the other device

Place ROMs directly in the collection:

Terminal window
cp game.chd /path/to/emulation/roms/psx/

The directory structure follows Kyaraben’s collection layout. Files sync automatically to paired devices.

Check sync status:

Terminal window
kyaraben sync status

This shows whether sync is running, connection status, paired devices, synced folders, and any connectivity warnings.

If sync shows “not running”, check the Syncthing service:

Terminal window
systemctl --user status kyaraben-syncthing

Access the Syncthing web UI at http://server-ip:8484 for detailed monitoring.

Keep the CLI up to date:

Terminal window
kyaraben update

By default, Kyaraben syncs devices on the same local network. For syncing across different networks (e.g., a cloud VPS or a home server accessed remotely), you need to enable global discovery.

Global discovery announces your device to Syncthing’s discovery servers, allowing devices to find each other’s IP addresses across the internet. Without it, devices can only locate each other on the same LAN.

Add to your config:

[sync.syncthing]
global_discovery_enabled = true
relay_enabled = true

With both settings enabled:

  • Global discovery lets devices find each other
  • Relays transfer data when direct connections aren’t possible

Verify linger is enabled:

Terminal window
loginctl show-user $USER | grep Linger

Check service status:

Terminal window
systemctl --user status kyaraben-syncthing