niklas‑stephan.de

WolfES-DE on metis: curated ROM library, storage layout, Wolf API socket

Last updated 05/11/2026 · wolf, es-de, gaming, metis

Wolf compose (decided 2026-10-30)

  • Project /data/docker/wolf/, container wolf-wolf-1 (image ghcr.io/games-on-whales/wolf:stable), Moonlight on host port 47999.
  • Added mount /var/run/wolf:/run/user/wolf so the Wolf REST API is reachable from the host: sudo curl --unix-socket /var/run/wolf/wolf.sock http://localhost/api/v1/... (socket is root-owned; plain curl gets permission denied). Endpoints: /apps, /clients, /sessions, /profiles…; session launch still needs a Moonlight client.

ROM library layout

  • /data/sources/ROMS/ = the ES-DE games mount (mounts = ["/data/sources/ROMS/:/ROMs/:rw"] in config.toml; ES-DE setting ROMDirectory=/ROMs). Directory names are ES-DE system IDs.
  • Curated set (2026-10-30): one game per platform across 23 platforms (nes, snes, gb, gbc, gba, gc, n64, megadrive, mastersystem, gamegear, sega32x, neogeo, arcade, atari2600, atarijaguar, c64, msx, tg16, turbografx-cd, virtualboy, wonderswan, capcomplaysystem2, capcomplaysystem3); ~1.7 GB total.
  • Full GameCube collection (~50 ISOs, 38 GB) moved to /data/sources/ROMS-archive/gc/ (only Super Mario Sunshine stays in ROMS/gc). 223 empty placeholder dirs deleted.
  • (Re)seed script: /data/maintenance/wolf-esde-seed.sh pulls one ROM per platform from RomM /zfsdata/apps/romm/library/roms on handtrixxx.com via rsync; RomM megacd is empty. Filenames with apostrophes break ssh "test -f ..." quoting — let rsync handle it.
  • BIOSes: neogeo.zip, syscard3.pce, MSX.ROM, MSX2.ROM, MSX2P.ROM in /data/docker/wolf/data/profile-data/user/WolfES-DE/bioses/ (= container $HOME/bioses).

Persistent storage

  • Wolf keeps per-app state under ./data/profile-data/<profile>/<app> (bind-mounted as /home/retro in app containers): ES-DE gamelists, downloaded media, themes, saves/savestates all persist there (~1.3 GB for ES-DE). WolfSteam is actively used (46 GB profile incl. homebrew) — never prune or delete it (Niklas, 2026-10-30).
  • Only files under the mounts survive: the app containers themselves are deleted when a session ends.

Gotchas / perf notes

  • ES-DE container runs es-de:edge as an AppImage; it exits immediately if run standalone (needs Wolf’s session orchestration), so validate by launching from a Moonlight client and checking gamelists/ afterwards.
  • CreatePlaceholderSystemDirectories is false in es_settings.xml (good — keeps /ROMs clean).

Source: Wiki.js