Repository navigation
[Feature Request] Add RomM integration as a retro game library server backend #1848
Description
What problem does this solve?
Moonfin already includes a built-in retro gaming module powered by EmulatorJS, allowing users to browse and play retro games directly within the app, with gamepad support and synchronized save states.
However, users who already manage their ROM collections through a dedicated platform such as RomM cannot directly connect their existing library to Moonfin.
RomM already provides game management, platform organization, metadata, artwork, and save synchronization. Being able to connect Moonfin to an existing RomM instance would allow users to combine RomM's library management capabilities with Moonfin's existing interface and in-app gaming experience, without having to maintain a separate game library or manually copy ROMs between services.
Proposed solution
Add native RomM integration to Moonfin's existing retro gaming module, allowing users to connect to their own RomM server while continuing to use Jellyfin as their primary media server.
The integration should reuse Moonfin's existing EmulatorJS player and retro gaming interface, while retrieving the game library and associated information directly from RomM.
Key features:
- RomM server connection: Allow users to configure their RomM server URL and authenticate using a supported authentication method.
- Game library browsing: Retrieve and display games from RomM, organized by platform and using the metadata and artwork already available in RomM.
- In-app gameplay: Launch games directly within Moonfin using its existing EmulatorJS integration, loading the ROM from RomM when supported.
- Save state synchronization: Where compatible with RomM's existing APIs and save formats, synchronize save states between Moonfin and RomM so progress can be shared across supported clients.
- No duplicated library management: Keep RomM responsible for managing ROMs, metadata, and artwork, while Moonfin acts as the client used to browse and play those games.
The goal is to integrate the two existing projects with minimal duplication of functionality, making Moonfin another client for an existing RomM library rather than creating a separate ROM management system.
Platform
All / Not platform-specific
Server
Jellyfin
Alternatives considered
Manually copying ROMs into a separate library accessible to Moonfin, or continuing to use RomM and Moonfin independently.
Both alternatives require users to maintain separate workflows or switch between applications. Direct integration would allow users to keep RomM as their single source of truth for their game collection while enjoying Moonfin's existing gaming interface.
Additional context
Project references:
- Moonfin: https://github.com/Moonfin-Client/Moonfin-Core
- RomM: https://github.com/rommapp/romm
- Moonfin Retro Games documentation: https://github.com/Moonfin-Client/Moonfin-Core/wiki/Retro-Games
- RomM documentation: https://docs.romm.app/
This proposal is intended to request a direct integration between Moonfin and an existing RomM instance. Jellyfin would remain the primary server for Moonfin's media features, while RomM would provide the game library and its associated metadata.
Ideally, users should be able to configure their RomM connection once and access their games from Moonfin's existing retro gaming section, without manually importing ROMs into Jellyfin or maintaining a duplicate collection.
Implementation details can follow RomM's supported API and authentication mechanisms, as well as the capabilities and limitations of Moonfin's current EmulatorJS integration.
Activity
rochdev commentedon Oct 16, 2026
I've been looking into implementing this, but I'd like games to be playable from both Jellyfin and Moonfin from the same library, so I'm not sure that adding RomM support directly in Moonfin is the right option. I think support should be added to JellyEmu, and then JellyEmu support should be added to Moonfin, so that the whole server can benefit and not just Moonfin, and both clients can use the same library for games.
According to #170 support for JellyEmu has already landed, but I'm not sure how it works. If it has indeed landed, then it should just be a matter of adding RomM support to JellyEmu directly, assuming they accept such a PR (otherwise it can also be done in Moonfin but that wouldn't be my preference).
In any case, happy to work on this, just need some guidance from the maintainers on which approach to take 🙂
rochdev commentedon Oct 16, 2026
A lot of Romm references in the JellyEmu codebase, I wonder if support was silently added? https://github.com/search?q=repo%3AJellyfin-PG%2FJellyEmu+romm&type=code
rochdev commentedon Oct 17, 2026
Installed JellyEmu and indeed it seems to support Romm:
So I'd favour adding support for JellyEmu unless the maintainers have a strong opinion towards keeping the metadata management within Moonfin.
rochdev commentedon Oct 18, 2026
I attempted to implement this (without JellyEmu, see #170 (comment) for my reasoning), which was easy enough for metadata and basically anything that is not tied to a user.
Where I hit an issue is user mapping. I'm not sure how that should work. Using one account for the whole server would be easy, but then individual Jellyfin users would share the same saves. Automatic mapping using the Jellyfin internal user ID would create users tied to that instance. Manual user mapping would allow maximum flexibility but be a chore for the administrator. All of those options seem subpar to me.
JellyEmu uses a single account, but separates saves using a tagging trick per user. Would that work for your use case? I'm thinking of just doing whatever JellyEmu is doing as a start to make things simpler.
Jolaru21 commentedon Oct 18, 2026
That sounds like the right approach! Levering JellyEmu as the bridge makes total sense—it keeps Moonfin clean, avoids reinventing the wheel, and lets the entire Jellyfin ecosystem benefit from the integration.
Regarding the user mapping and save states: adopting JellyEmu's single-account + user tagging approach is more than fine as a starting point. For most home/self-hosted setups, that's more than enough to keep individual save files separated without adding administrative complexity.
From a user perspective, as long as we can seamlessly browse the RomM collection, launch standard retro platforms, and ideally leverage client capabilities for heavier systems (like PS2, PSP, N64, etc., via native desktop/standalone clients where supported), that would be an absolute game-changer.
Thanks a lot for taking the time to investigate and push this forward! Looking forward to seeing where the JellyEmu approach takes this!!
rochdev commentedon Oct 18, 2026
I'm actually not going in that direction as mentioned above, because Moonfin also supports Emby which doesn't have a JellyEmu equivalent, so it would tie support to something unique to Jellyfin. Building RomM support right into Moonfin was also the preferred approach from the maintainer. I'm only looking at JellyEmu to learn from how they implemented their own support at this point.
Looking into this further, I misunderstood how it works. It's able to support separate slots but not users. So all users would see the same slots and have to self-organize to not overwrite each other which is not ideal.
I don't really see a way to make this seamless for users without putting the burden on the administrator to properly map users. I guess the closest would be automatic creating of users with the user ID from Jellyfin, but that would not allow easily reusing those same RomM user accounts outside of Moonfin, which kind of defeats the purpose of RomM. It would also not allow migrating to a new Jellyfin instance as the user IDs would change in a new installation. The alternative would be the admin managing the mapping but that would be a chore. I guess it could auto create users based on the username instead of user ID, but then that could create conflicts unless RomM is mostly used for Moonfin (which again kind of defeats the purpose) and users wouldn't have a proper password to login into RomM.
I started my journey with Moonfin only last week, trying to fix any issue that I can before I replace my Plex with it 🙂
@Jolaru21 Thoughts on all the above? I don't think the implementation would be too complicated as Moonfin already has most of the capabilities built-in, but I'm not sure how to manage the syncing with RomM.
Jolaru21 commentedon Oct 18, 2026
Ah, my bad! I completely misunderstood where you were heading with JellyEmu—now I get why sticking to direct RomM integration in Moonfin makes way more sense, especially to keep Emby support intact and follow what the maintainer prefers.
Honestly, I still hope we can eventually reach that seamless, full-featured integration where every user gets their own isolated RomM account effortlessly. But as a starting point, what you're proposing sounds like a solid step forward.
To keep things simple for now without getting bogged down in user mapping, maybe a progressive approach could work?
Just connect using a global RomM admin API key to handle library browsing, metadata, artwork, and basic playback. For single-user setups, this gets the job done right away.
Try auto-matching by username (if "Ruben" exists on both Jellyfin/Emby and RomM, automatically bind their save context). If usernames don't match or the admin prefers control, just offer a simple text field in the settings to manually map the RomM username/token.
Matching by username avoids breaking things if someone migrates their Jellyfin instance (since internal IDs change), while still keeping RomM as the true source of truth for users who use it standalone.
Even if we start simple and build up from there, having RomM's library right inside Moonfin will be amazing. Thanks again for taking the time to tackle this and for all the work you're putting into making Moonfin a solid Plex alternative!
RadicalMuffinMan commentedon Oct 18, 2026
This whole conversation sounds like two AIs talking to each other. Anyway I'm already handling romm stuff among other things. Also Moonfin is coming to Plex soon Roch so you can have it both ways, Moonfin AND Plex.
Jolaru21 commentedon Oct 19, 2026
Far from the truth, even if it might seem that way, lol.
English isn’t my native language, so I have to use a translator for some parts.
Thanks a lot for your help!
Can you spoil anything about the romm stuff you are working on?
Or let me know if I can help somehow
rochdev commentedon Oct 19, 2026
I have not used AI at all for any of my comments above, not sure where this is coming from lol. I only use AI for PRs and sometimes when opening issues, or when responding to AI. I never respond to humans using AI.
So should I just stop working on the implementation if you prefer to take it over? If you want the help just let me know how you would like it to work and I can rework my implementation based on those parameters. I was going to look into implementing the approach mentioned in #1848 (comment) tonight.
This is great! Unfortunate timing for me though as Plex is now dead to me 😛 (their business practices are in my opinion hostile to the very audience they're targeting)