A RomM companion client for jailbroken PS5 consoles (etaHEN or onionHEN, with kstuff) and PS4 consoles (GoldHEN). Through my insatiable need to mod everything electronic I encounter, I had my 12.70 PS5 jailbroken the minute that P2JB was out. I maintain a RomM server to centralize all my legal ROMs, saves, and savestates, which all my devices sync with, and the PS5 needs similar treatment.
- Save and sate sync
- Monitors save file changes in the background, and uploads them as soon as they've changed. Periodic syncs also ensure that your PS4/5 always has the latest saves and save states.
- Interactive library
- Browse your RomM library from the RommPS app (or some other device via the Web UI), download games and BIOS files into the right emulator folders, and resolve save conflicts.
- Pluggable emulator profiles and multiple emulators per platform
- Fully customizable sync destinations, but includes frequently updated preset profiles for existing homebrew emulators.
- Can sync games and saves and states for multiple emulators per platform (PS2 on RetroArch and PS5SX2 as an example) using hardlinks.
- Beautiful and Responsive UI
- Based on mihawk-99's Vulkan homebrew apps and BlackBearReloaded's UI kit, we get a nice, responsive feel. So worth it, it looks 1000x better. 15+ different themes to pick from.
- Background Service
- All operations are handled by a backend payload, which means syncing, downloading, and updating keep working in the background, so you can keep gaming.
- RomM API Compliant
- RommPS is meant to strictly stick to RomM's API and method of syncing saves and states, ensuring we don't break anything and support RomM's latest features.
- Secure and Human-Coded
- Each release is signed. The payload checks the signature before it updates itself, and ProsperoStore checks every download against the release's checksum. This app was primarily coded by a human, and will be frequently updated and maintained. AI was primarily used for explaining concepts, creating documentation, and converting data. Ya know, the tedious stuff.
- Easter Eggs
- Check in the Settings, scroll the settings list, see if you find the X. This hint won't be here forever.
- RommPS has built-in profiles for all known emulators on the PS5, and will set the correct default game, save/save state, and bios directories for them. Since there is a huge influx of new emulators popping up, I will be doing my very best to keep up with them and add profiles accordingly.
- You can also manually set the directories for each emulator/platform via the PS5 app or or the Web UI.
- RommPS relies on your emulator NOT being sandboxed. Some emulators require a separate payload that must be launched to be able to access outside of the sandbox, so make sure you've followed their instructions to properly install. Sandboxed emulators will not be able to read games or save files.
| Emulator | Systems | Game Downloads | Saves | Comments |
|---|---|---|---|---|
| RetroArch | NES, Famicom Disk System, SNES, Game Boy, Game Boy Color, Game Boy Advance, Genesis/Mega Drive, Master System, Game Gear, Sega CD, SG-1000, arcade (FinalBurn Neo), PS2 (LRPS2), PSP (PPSSPP), GameCube and Wii (Dolphin) | Full Support | Full Support | - |
| PSXS5 | PS1 | Full Support | One memory card per game, and states | - |
| SwanStationPS5 | PS1 | Full Support | One memory card per game, and states | - |
| PS5SX2 | PS2 | Full Support | Its two shared memory cards, backed up to RomM (5.3 or newer) | - |
| PS5N64 | N64 | Full Support | Full Support | - |
| PS5NES | NES | Broken | Broken | Broken, tried to report issue, but GH page gone |
| Porpoise | Wii/GameCube | Full Support | N/A | Couldn't exit sandbox w/o crash. Issue reported. Downloading games should work if the emulator is actually working for you. |
| ProsperoEden | Switch | Manual Support | Researching | - |
| PS5X360 | Xbox 360 | Manual Support | Researching | - |
To give some meaning to the table above. Full support means RommPS can detect and properly set game/save directories for that emulator. Manual Support means you can use it to sync games and/or saves, but you'll need to point it to the directories yourself. This typically means that full support is coming shortly. Broken or N/A means there was a problem keeping us from sync games and saves, or the emulator just fall out doesn't work or crashes. Researching means I am seeing what is possible when it comes to that sync type for the given emulator or game system.
| Emulator | Systems |
|---|---|
| RetroArch | The RetroArch systems above, wherever the PS4 build has the core |
| pSNES, pNES, pGEN, pGBA, pFBN | SNES; NES; Genesis, Master System, Game Gear, Sega CD, SG-1000; GBA, GBC, GB; arcade |
Only RetroArch has been tested on the PS4 so far.
If you are interested in downloading PS4 and PS5 games from your RomM server, RomM has direct FPKGi support, simply add it as a library. This sync client does NOT handle PS4/PS5 save syncing at this time, but is being researched for potential future inclusion.
- A PS5 running etaHEN or onionHEN, or a PS4 running GoldHEN
- RomM 5.2.0 or newer (5.3.0 if you want to do shared memory card syncing instead of per-game)
- RetroArch installed
- Whichever other emulators you want
- RommPS exposes a separate Web UI at http://your-ps5-ip:8780 which allows you to access most of the features present in the web app, but can make things like sync profiled editing, and adding multiple downloads of games easier from your computer instead.
Install RommPS from ProsperoStore and open it. It'll set up the background daemon, and take you through a setup wizard. That's it: RommPS carries the RomM Sync payload and starts it for you. From then on it starts with your HEN, so after a jailbreak or waking the console it's ready to go.
Not using the store? Download PPSA76677.zip from the releases page, unzip it and copy the PPSA76677 folder to /data/homebrew/ on the console.
If you'd rather run just the payload, without the app:
- Download the latest
romm-sync.elffrom the releases page. - Send it to the console (or use whichever favorite tool you wish):
nc -w 1 <ps5-ip> 9021 < romm-sync.elf
- Set it up at
http://<ps5-ip>:8780from another device.
On the PS5 the payload doesn't update itself: new versions come with RommPS. Without the app, download the new romm-sync.elf yourself.
RomM Sync starts with your HEN, and setup turns this on for you. Both HENs start payloads/romm-sync.elf when romm-sync.elf.auto_start sits next to it, and RomM Sync puts both in every HEN's folder on the console (/data/etaHEN/payloads and /data/OnionHEN/payloads), so switching HENs keeps working. If a payload manager like pldmgr has its own copy, that copy is kept up to date too. If you build it yourself, make install PS5_HOST=<ps5-ip> copies it over FTP (add PS5_FTP=ftp://<ps5-ip>:1337 PS5_HEN_DIR=/data/OnionHEN for onionHEN's FTP plugin).
Experimental. The PS4 build has only been tested with RetroArch so far. Standalone emulators may work, but haven't been confirmed. I spent all my focus on the PS5 build, so I didn't get to test as much, so consider it unstable and there may be gremlins for now.
Needs GoldHEN 2.4b18.5 or newer, whose payload menu runs ELF payloads.
- Download the latest
romm-sync-ps4.pkgfrom the releases page and install it with your package installer. - Open RomM Sync from the home screen. It copies its payload,
romm-sync-ps4.elf, to/data/payloads/. - In GoldHEN Settings, open the payloader, pick
romm-sync-ps4.elfand run it. Add it to the AutoRun queue there and it starts on every jailbreak. - Open RomM Sync again: it shows the web UI. It's also at
http://<ps4-ip>:8780from another device.
The app only installs the payload and shows the web UI; the payload does the syncing, in the background, whether or not the app is open. Without the package, copy romm-sync-ps4.elf to /data/payloads/ yourself (GoldHEN's FTP server, or make install-ps4 PS4_HOST=<ps4-ip>).
Don't send the payload to GoldHEN's network loader on port 9090: GoldHEN 2.4 crashes on ELFs sent there. Make sure the console's date and time are set (GoldHEN can keep them updated), or HTTPS won't work. RetroArch is found in /data/retroarch, with its cores in /data/self/retroarch/cores, as its retroarch.cfg says.
On the PS5, just update RommPS: from ProsperoStore (or other homebrew storefronts eventually), or by copying the new zip's folder over the old one. The background service comes with it, and RommPS swaps it in the next time you open it, once nothing is syncing or downloading. An older version never replaces a newer one.
On the PS4, the payload updates itself from Settings.
The setup walks you through five steps:
- Connecting to your server.
- Approving the console in RomM, by scanning a QR code or entering a code.
- Choosing which emulators to sync.
- Checking what the first sync will do.
- Choosing when to sync in the background.
Back up your saves before the first sync. Copy your emulator save folders to a computer or USB drive. RomM Sync keeps a local copy before replacing any file, but your own backup is the safest option.
LRPS2 keeps every game on one shared memory card by default. RomM stores saves per game, so pick one of these during setup:
- One card per game. Works with any RomM version. In RetroArch, open the LRPS2 core options and turn off Shared Memory Cards. After that, each game's card syncs like any other save. Saves already on the shared card stay there.
- Back up the shared card. Needs RomM 5.3.0 or newer. The whole card is uploaded when it changes, and you can restore it from Settings in the web UI. It isn't merged with other devices.
PS5SX2 used 2 shared memory cards in slots 1 and 2. While it does support per-game memory cards, they need to be specified in a per-game ini file. In 1.2.0, I plan on adding the ability to directly modify those .ini files in PS5SX2 to write the proper per-game memory card path, effectively making RommPS handle per-game memory cards for it gracefully. Until then, I suggest using whichever emulator fits your preferred method (PS5SX2 for shared mem cards or use LRPS2 in retroarch for per-game support). If you have both installed, RommPS will sync game and saves, but they will be separate and different saves (PS5SX2 will download your shared memory cards, LRPS2 will grab the memory card per game). I know...it's confusing, but this is just a side-effect of the boom in emulators being released.
PSP, GameCube and Wii saves are synced as one zip per game, the same format other RomM clients use. Depending on the client, they may or may not support unzipping the saves (I don't truly know), but this client does!
My opinion? One card per game is better since 8MB memory cards fill up quick.
I've included direct support for most of the emulators that are out right now, except for the ones that won't even launch... you can sync games, states, and saves anywhere you want, but the presets should do it for most people.
Settings in the web UI has a JSON editor for emulator profiles, and a table showing which folders are used for each platform. A profile lists an emulator's folders and the RomM platforms it plays:
{
"id": "retroarch",
"name": "RetroArch",
"root": "/data/homebrew/PPSA99169",
"retroarch_cfg": "{root}/config/retroarch.cfg",
"rom_dir": "{root}/content/{platform}",
"save_dir": "{root}/savefiles",
"state_dir": "{root}/savestates",
"bios_dir": "{root}/system",
"save_exts": ".srm,.sav",
"platforms": [{ "romm": ["snes", "sfam"], "dir": "snes", "emulator": "snes9x", "core_name": "Snes9x" }]
}make host tools # macOS or Linux build for development, plus tools/release-sign
tools/ps5-build.sh # PS5 build in Docker, output in build/ps5/
tools/ps4-build.sh # PS4 payload in Docker, output in build/ps4/
tools/ps4-build.sh ps4-pkg # plus the PS4 home screen app (platform/ps4/app)
tests/e2e.sh # end-to-end tests against a mock RomM server
tests/autostart.sh # autostart, version checks and HEN foldersBoth consoles build from the same code in src/. What differs lives in platform/<console>/: platform.c (the src/platform.h interface), the make rules and the Docker SDK image. platform/console/ has the parts the PS4 and PS5 share, and platform/host/ is the development build.
If buying isn't owning, then piracy isn't stealing. 🖕
GPL-3.0. Parts of the console code are adapted from ftpsrv and websrv by John Törnblom. cJSON and qrcode-generator are MIT licensed. Monocypher is CC0 or BSD-2-Clause.

