EmulationStation Desktop Edition + Citron Emulator Setup

If you’re tired of hunting through folders just to launch a Switch game, this guide is for you. Pairing EmulationStation Desktop Edition (ES:DE) with the Citron emulator gives you a clean, controller-friendly interface, no terminal required after setup.

This guide walks through the full ES:DE setup, from placing the Citron AppImage in the right spot to launching Switch games directly from the front-end. For a smoother gaming experience, consider optimizing your game controller setup to ensure seamless gameplay.

ES-DE Switch game library interface showing Citron listed as an alternative Nintendo Switch emulator.

What you need first

Make sure these are already sorted:

  • ES:DE installed and opening normally
  • Citron AppImage downloaded
  • Your Switch game dumps ready and stored somewhere sensible
  • Access to your home folder + basic file manager use

If you’re working on a Steam Deck setup, you might also find our Steam Deck Setup Guide helpful for configuring emulators and optimizing performance.

Step 1: Put the Citron AppImage somewhere stable

ES:DE needs a predictable location for the emulator.

Move the AppImage into:

<command label="Citron (Standalone)">

  %INJECT%=%BASENAME%.esprefix %EMULATOR_CITRON% -f -g %ROM%

</command>

Rename it so you don’t have to deal with version numbers later:

<command label="Citron (Standalone)">

  %INJECT%=%BASENAME%.esprefix %EMULATOR_CITRON% -f -g %ROM%

</command>

Make it executable:

<command label="Citron (Standalone)">

  %INJECT%=%BASENAME%.esprefix %EMULATOR_CITRON% -f -g %ROM%

</command>

That’s enough on the Citron side.

Step 2: Point ES:DE toward Citron

ES:DE uses custom system configs to detect and launch emulators.

Go to:

<command label="Citron (Standalone)">

  %INJECT%=%BASENAME%.esprefix %EMULATOR_CITRON% -f -g %ROM%

</command>

If it doesn’t exist, just create it.

Step 3: Edit es_find_rules.xml

This is how ES:DE figures out where Citron lives.

Add something like this:

<command label="Citron (Standalone)">

  %INJECT%=%BASENAME%.esprefix %EMULATOR_CITRON% -f -g %ROM%

</command>

Basically:
If Citron is in PATH → use it
If not → look for the AppImage in Applications

Step 4: Edit es_systems.xml

Now you tell ES:DE how to actually launch games through Citron.

Inside the Switch system section, add:

<command label="Citron (Standalone)">

  %INJECT%=%BASENAME%.esprefix %EMULATOR_CITRON% -f -g %ROM%

</command>

What this ends up doing:

  • Opens Citron fullscreen
  • Loads the selected game automatically
  • Keeps Citron as its own selectable emulator option

Step 5: Test it inside ES:DE

  • Open ES:DE
  • Go to your Switch games
  • Open the menu (Start button or menu icon)
  • Then go:
    Other Settings → Alternative Emulators → switch
  • Pick Citron (Standalone)
  • Launch a game and see what happens.

If it boots, you’re done.

If something doesn’t work:

  1. Citron missing from emulator list:
  • Check you ran chmod +x
  • Make sure the AppImage path is right
  • Restart ES:DE after config edits
  1. Game opens then crashes:
  • Check firmware + keys inside Citron
  • Try launching the game directly in Citron first
  1. Black screen at startup:
  • Try disabling fullscreen in Citron
  • Update GPU drivers / Vulkan

Addressing common emulator errors can help resolve issues like crashes, missing files, or black screens during setup.

Why people bother with this setup

  • One interface for everything
  • Launch games faster
  • Much nicer with a controller
  • Feels closer to using a real console
  • No terminal once it’s set up