<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>EWA&#x27;s blog - Playnite</title>
    <link rel="self" type="application/atom+xml" href="https://blog.worldofpixels.ovh/tags/playnite/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://blog.worldofpixels.ovh"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-10-08T00:00:00+00:00</updated>
    <id>https://blog.worldofpixels.ovh/tags/playnite/atom.xml</id>
    <entry xml:lang="en">
        <title>ROG Xbox Ally: Playnite, RomM and saves everywhere</title>
        <published>2026-10-08T00:00:00+00:00</published>
        <updated>2026-10-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              endyw
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.worldofpixels.ovh/rog-xbox-ally-playnite-romm/"/>
        <id>https://blog.worldofpixels.ovh/rog-xbox-ally-playnite-romm/</id>
        
        <content type="html" xml:base="https://blog.worldofpixels.ovh/rog-xbox-ally-playnite-romm/">&lt;p&gt;A handheld running Windows sounds great, until you have to find your games and your saves.
Between the various launchers and the various apps you play with, everything ends up
scattered.&lt;&#x2F;p&gt;
&lt;p&gt;Here is how I set up my ROG Xbox Ally to get &lt;strong&gt;a single retro library&lt;&#x2F;strong&gt;, with &lt;strong&gt;my ROMs
served by my own server&lt;&#x2F;strong&gt;. Along the way, my &lt;strong&gt;saves exist in three copies&lt;&#x2F;strong&gt; and follow me
from one device to another.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;overview&quot;&gt;Overview&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Component&lt;&#x2F;th&gt;&lt;th&gt;Role&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;playnite.link&#x2F;&quot;&gt;Playnite&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;The launcher, with a desktop mode and a fullscreen mode, the latter controllable by gamepad.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rommapp&#x2F;romm&quot;&gt;RomM&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;My self-hosted server that organizes my ROMs and keeps a copy of my saves.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rommapp&#x2F;playnite-plugin&quot;&gt;RomM extension for Playnite&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;Imports the RomM library into Playnite and syncs saves.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;1118310&#x2F;RetroArch&#x2F;&quot;&gt;RetroArch (Steam version)&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;The emulator, launched &lt;em&gt;via&lt;&#x2F;em&gt; Steam to get Steam Cloud, Steam Input and Remote Play Together.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;WindAflame&#x2F;playnite-plugins&quot;&gt;RetroArch (Steam) plugin&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;td&gt;My plugin: it makes Playnite go through the Steam version of RetroArch.&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;The idea: Playnite is the interface where you pick a game. It lists the games provided by
RomM, then launches them &lt;em&gt;via&lt;&#x2F;em&gt; the Steam version of RetroArch.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;step-1-install-playnite&quot;&gt;Step 1: install Playnite&lt;&#x2F;h2&gt;
&lt;p&gt;On the ROG Xbox Ally, I use Playnite in &lt;strong&gt;fullscreen mode&lt;&#x2F;strong&gt;. It is designed for gamepads
and shows Steam games, games from other launchers and RomM games in a single interface.&lt;&#x2F;p&gt;
&lt;p&gt;Playnite can be downloaded from &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;playnite.link&#x2F;&quot;&gt;its official website&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Switch the ROG Xbox Ally to Desktop mode.&lt;&#x2F;li&gt;
&lt;li&gt;Download and install Playnite.&lt;&#x2F;li&gt;
&lt;li&gt;In Armoury Crate, add a shortcut to &lt;code&gt;Playnite Fullscreen&lt;&#x2F;code&gt; to launch it straight from
the console interface.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;step-2-set-up-the-retroarch-emulator&quot;&gt;Step 2: set up the RetroArch emulator&lt;&#x2F;h2&gt;
&lt;p&gt;First, install &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;1118310&#x2F;RetroArch&#x2F;&quot;&gt;RetroArch from Steam&lt;&#x2F;a&gt;
(it&#x27;s free), then enable Steam Cloud in its properties if it isn&#x27;t already.&lt;&#x2F;p&gt;
&lt;p&gt;By default, Playnite launches &lt;code&gt;retroarch.exe&lt;&#x2F;code&gt; directly. On a handheld, you then lose
everything Steam brings:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Steam Input&lt;&#x2F;strong&gt; and its controller profiles;&lt;&#x2F;li&gt;
&lt;li&gt;the Steam &lt;strong&gt;overlay&lt;&#x2F;strong&gt;;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;playtime&lt;&#x2F;strong&gt; tracked on Steam;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Steam Cloud&lt;&#x2F;strong&gt;, which syncs RetroArch saves;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Remote Play Together&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;My &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;WindAflame&#x2F;playnite-plugins&quot;&gt;RetroArch (Steam) plugin&lt;&#x2F;a&gt; creates a
&quot;RetroArch (Steam)&quot; emulator in Playnite, with one profile per &lt;em&gt;core&lt;&#x2F;em&gt;. Each profile goes
through &lt;code&gt;steam.exe -applaunch 1118310 ...&lt;&#x2F;code&gt; instead of launching the executable. The plugin
also automatically downloads missing &lt;em&gt;cores&lt;&#x2F;em&gt; when a game is launched.&lt;&#x2F;p&gt;
&lt;p&gt;To install it: grab the &lt;code&gt;.pext&lt;&#x2F;code&gt; from the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;WindAflame&#x2F;playnite-plugins&#x2F;releases&quot;&gt;releases
page&lt;&#x2F;a&gt; and open it with Playnite.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;step-3-connect-playnite-to-romm&quot;&gt;Step 3: connect Playnite to RomM&lt;&#x2F;h2&gt;
&lt;p&gt;RomM is a self-hosted ROM manager: it organizes the collection, fetches metadata and cover
art, and serves the files to clients.&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rommapp&#x2F;playnite-plugin&quot;&gt;official RomM extension&lt;&#x2F;a&gt; bridges it with
Playnite:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Install the extension from Playnite (&lt;strong&gt;Add-ons&lt;&#x2F;strong&gt; menu).&lt;&#x2F;li&gt;
&lt;li&gt;Enter the RomM server address and authenticate (credentials, API token or QR code).&lt;&#x2F;li&gt;
&lt;li&gt;Map each RomM platform to an emulator and a profile (the &quot;RetroArch (Steam)&quot; &lt;em&gt;core&lt;&#x2F;em&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;Run the import: games show up in Playnite and are downloaded on demand.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;blockquote class=&quot;markdown-alert-note&quot;&gt;
&lt;p&gt;The extension needs a RomM instance configured with IGDB API credentials.
See the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.romm.app&#x2F;&quot;&gt;RomM documentation&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;A big advantage of RomM: a ROM has &lt;strong&gt;the same file name on all my devices&lt;&#x2F;strong&gt;. And that is
exactly the name RetroArch uses to name the save file. This is what makes saves portable
from one device to another.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;step-4-enable-romm-sync&quot;&gt;Step 4: enable RomM sync&lt;&#x2F;h2&gt;
&lt;p&gt;Since version 0.9.0, the RomM extension can sync saves with the server. Just tick
&lt;strong&gt;Enable save sync&lt;&#x2F;strong&gt; in its settings. Then:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;before launching&lt;&#x2F;strong&gt; a game, it fetches the latest save from the server;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;on exit&lt;&#x2F;strong&gt;, it uploads the local save;&lt;&#x2F;li&gt;
&lt;li&gt;the &lt;strong&gt;Sync saves with RomM&lt;&#x2F;strong&gt; action, in a game&#x27;s menu, forces a manual sync;&lt;&#x2F;li&gt;
&lt;li&gt;in case of conflict, &lt;strong&gt;the most recent version wins&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;To find the saves, the extension reads RetroArch&#x27;s configuration directly: nothing to set
up there either.&lt;&#x2F;p&gt;
&lt;p&gt;Pleasant surprise: the RomM extension&#x27;s save sync works perfectly with our
&quot;RetroArch (Steam)&quot; emulator, even though it goes through Steam. There is nothing more to
configure.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-result-three-copies-of-every-save&quot;&gt;The result: three copies of every save&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Copy&lt;&#x2F;th&gt;&lt;th&gt;Where&lt;&#x2F;th&gt;&lt;th&gt;When&lt;&#x2F;th&gt;&lt;th&gt;Content&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Local&lt;&#x2F;td&gt;&lt;td&gt;RetroArch folder on the console&lt;&#x2F;td&gt;&lt;td&gt;Continuously, while playing&lt;&#x2F;td&gt;&lt;td&gt;Saves and &lt;em&gt;save states&lt;&#x2F;em&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Steam Cloud&lt;&#x2F;td&gt;&lt;td&gt;Valve&#x27;s servers&lt;&#x2F;td&gt;&lt;td&gt;When RetroArch starts and exits&lt;&#x2F;td&gt;&lt;td&gt;Folders tracked by Steam&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;RomM&lt;&#x2F;td&gt;&lt;td&gt;My server&lt;&#x2F;td&gt;&lt;td&gt;Before and after each game launched by Playnite&lt;&#x2F;td&gt;&lt;td&gt;In-game saves (&lt;code&gt;.srm&lt;&#x2F;code&gt;)&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;In practice:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;if the console breaks&lt;&#x2F;strong&gt;, the saves are both on Steam and on my server;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;if my server is down&lt;&#x2F;strong&gt;, Steam Cloud takes over, and vice versa;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;on another device&lt;&#x2F;strong&gt; (desktop PC, Steam Deck…), just install RetroArch from Steam:
Steam Cloud brings the saves back, whether the machine runs Windows or Linux;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;with another RomM client&lt;&#x2F;strong&gt;, sync goes through the server.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;one-save-many-screens&quot;&gt;One save, many screens&lt;&#x2F;h2&gt;
&lt;p&gt;Since RomM centralizes saves, I get my progress back whichever app I play with:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;the &lt;strong&gt;RomM web interface&lt;&#x2F;strong&gt;, which lets you play right in the browser;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rommapp&#x2F;argosy-launcher&quot;&gt;Argosy&lt;&#x2F;a&gt;, the official RomM Android client;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;1118310&#x2F;RetroArch&#x2F;&quot;&gt;RetroArch (Steam)&lt;&#x2F;a&gt;, through
Playnite on Windows.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So I can start a game on the ROG Xbox Ally, continue it on my phone on the train, then
finish it in the browser.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bonus-remote-play-together&quot;&gt;Bonus: Remote Play Together&lt;&#x2F;h2&gt;
&lt;p&gt;Since RetroArch is launched &lt;em&gt;via&lt;&#x2F;em&gt; Steam, Steam sees it like any other game. For a local
multiplayer game (split screen, fighting games, &lt;em&gt;party games&lt;&#x2F;em&gt;…), I can invite a friend with
&lt;strong&gt;Remote Play Together&lt;&#x2F;strong&gt; from the Steam overlay. They play from home, without owning
RetroArch or the ROM.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;limitations-to-keep-in-mind&quot;&gt;Limitations to keep in mind&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Save states are not portable&lt;&#x2F;strong&gt;: they depend on the &lt;em&gt;core&lt;&#x2F;em&gt; and sometimes on its
version. To continue a game on another device, rely on the in-game save rather than a
&lt;em&gt;save state&lt;&#x2F;em&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Two syncs run in parallel&lt;&#x2F;strong&gt;: Steam Cloud and RomM each have their own conflict logic.
In practice, playing on one device at a time is enough to avoid surprises.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Systems with folder-based saves&lt;&#x2F;strong&gt; (PS2, PSP, GameCube, Switch…) are not yet supported
by RomM sync.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;You need a server&lt;&#x2F;strong&gt;: RomM is self-hosted, so you need a machine running (NAS, mini PC,
VPS…) to benefit from it, especially away from home.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;With Playnite as the interface, RomM as the library and RetroArch routed through Steam, the
ROG Xbox Ally becomes a true retro console: one place to launch your games, saves in three
copies and remote multiplayer as a bonus. Once it&#x27;s set up, everything happens
automatically: all that&#x27;s left is to play.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;useful-links&quot;&gt;Useful links&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;playnite.link&#x2F;&quot;&gt;Playnite&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rommapp&#x2F;romm&quot;&gt;RomM&lt;&#x2F;a&gt; and its &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.romm.app&#x2F;&quot;&gt;documentation&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rommapp&#x2F;playnite-plugin&quot;&gt;RomM extension for Playnite&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;rommapp&#x2F;argosy-launcher&quot;&gt;Argosy, the RomM Android client&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;1118310&#x2F;RetroArch&#x2F;&quot;&gt;RetroArch on Steam&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;WindAflame&#x2F;playnite-plugins&quot;&gt;My RetroArch (Steam) plugin for Playnite&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
</feed>
