Emulation Homebrew NXStation — ES-DE-style frontend for RetroArch on Switch

Azricc

Member
Newcomer
Joined
Sep 15, 2021
Messages
19
Reaction score
25
Trophies
0
Age
39
XP
194
Country
Malaysia

NXSTATION.COM
ES-DE-style frontend for RetroArch on Nintendo Switch

carousel.gif

game-list.gif

scraper.gif

themes.gif

settings.jpg


Peace be upon all forum members.

A bit of background on why this exists.

I wanted something on Switch that actually handles the library side before RetroArch, not another playlist buried in RetroArch settings. RetroArch itself is fine; configuring playlists by hand is not, and there is not much help for art or metadata without doing everything yourself. The UI also feels dated compared to what people use on other handhelds.

Tico has a solid approach and I respect the work there. It just did not fit me for three reasons: batch scraping was not there yet for how I wanted to work, I could not customize save/load state keys the way I wanted, and managing tiles felt more tedious than I had patience for. What I wanted was closer to what I already do on my other devices: drop ROMs in folders, bring over media if I have it, scrape only what is missing, and move on. Themes matter to me too but not a deal breaker, but nice when you change things up now and then.

I had poked at this idea a few times before. More than once the answer from tooling and AI assistants was basically “this is borderline impossible on Switch” or too heavy to bother. Last week I tried again anyway and thought well, let’s just try and see where the limitation actually is. After a lot of iteration with agentic coding help, I ended up with something I actually use myself. It is not perfect, but it covers most of what I liked about ES-DE-style frontends on my ArkOS R36S and a similar setup on my Mangmi Air X.

WHAT NXSTATION IS

NXStation is a native Switch homebrew frontend (C++, Borealis UI). It scans your SD card, shows systems and games with box art and metadata, and launches through RetroArch. When you close a game, it tries to put you back where you were browsing. It is built around an ES-DE-style roms/ folder layout, so if you already organize that way on a Pi or a Chinese handheld, you can copy media and gamelist.xml over without reinventing everything.

MAIN FEATURES

  • ES-DE-compatible folder layout and media (gamelist.xml, box art, thumbnails)
  • ScreenScraper.fr integration — single game or batch scrape; caches on SD card for offline browsing
  • RetroArch as the emulator backend (per-system cores in config)
  • List / carousel views, favorites, last played
  • Search, jump-to-letter, random pick, screensaver
  • Optional video previews in the game list (needs full RAM — see below)
  • Built-in color themes (dark/light sets) and some customization
  • Optional Home Menu forwarder install from Settings (Title Override required to install)

SUPPORTED SYSTEMS (DEFAULT CONFIG)

20 folder IDs out of the box: nes, snes, n64, gb, gbc, gba, nds, 3ds, megadrive, mastersystem, gamegear, dreamcast, psx, psp, pce, atari2600, cps1, cps2, neogeo. More can be added in roms_config.json if you have a matching RetroArch core.

REQUIREMENTS

  • Modded Switch with homebrew (Atmosphere, etc.)
  • RetroArch for Switch installed (sdmc:/switch/retroarch_switch.nro and cores under sdmc:/retroarch/cores/ as usual)
  • Title Override is required. Hold R on a game icon on the Home Menu, launch homebrew from there, then start NXStation. The normal Homebrew Menu applet mode does not have enough RAM for video previews, caching, and stable launching — the app will tell you if you started wrong.
  • Optional: ScreenScraper.fr account for scraping; Wi-Fi when you scrape

QUICK SETUP

  • Download NXStation.nro from GitHub releases
  • Copy to sdmc:/switch/NXStation/
  • Put ROMs in sdmc:/roms/{system}/ (example: sdmc:/roms/snes/)
  • Launch via Title Override as above

Example layout:

Code:
sdmc:/roms/
├── snes/
│   └── some_game.sfc
├── nes/
└── gba/

DOWNLOAD & LINKS


KNOWN LIMITATIONS

  • Early release — expect bugs, missing polish, and things I have not thought of yet
  • No ROMs, BIOS, or RetroArch in the project; frontend only
  • Some planned ideas (background music, etc.) are not in yet
  • I am not affiliated with Nintendo, RetroArch, ES-DE, or Tico — just a user building what I needed

PERSONAL NOTE

I have been around emulation and homebrew for a long time (close to 15 years), but honestly I probably will not play much on Switch right now. Work, family, and life take most of the time. Still, having the library set up properly on the console feels good. If NXStation saves someone else a bit of setup pain or makes today a little nicer the way it did for me while building it, that is rewarding enough for me.

Bug reports and feedback on GitHub are welcome. If something breaks on your setup, issues with logs or clear steps help a lot.

Peace and love.
 
Last edited by Azricc,
so if put all my es-de themes, all function, design will work? tnx.
btw font color you use is hard to read. lol
 
This looks awesome. Sadly I moved out of retroarch a couple years ago. Man, this would have been a DREAM back in those years. Nevertheless, for the current and new users, it's a total blast!! Thanks for your work.
 
  • Love
Reactions: Azricc
so if put all my es-de themes, all function, design will work? tnx.
btw font color you use is hard to read. lol
the roms and game art+video should works, albeit some systems exceptions. the ES-DE theme is not supported though. this is actually completely a new app built from ground up.

which font you refer to?
Post automatically merged:

This looks awesome. Sadly I moved out of retroarch a couple years ago. Man, this would have been a DREAM back in those years. Nevertheless, for the current and new users, it's a total blast!! Thanks for your work.
Thanks!

What do you meant that you moved out of RA?
 
the roms and game art+video should works, albeit some systems exceptions. the ES-DE theme is not supported though. this is actually completely a new app built from ground up.

which font you refer to?
Post automatically merged:


Thanks!

What do you meant that you moved out of RA?
forum font. ik its because im using light theme of gbatemp. im just pointing that out that on light theme its hard to read the content.
 
SUPPORTED SYSTEMS (DEFAULT CONFIG)

20 folder IDs out of the box: nes, snes, n64, gb, gbc, gba, nds, 3ds, megadrive, mastersystem, gamegear, dreamcast, psx,
[B][SIZE=5]ps2[/SIZE][/B], psp, pce, atari2600, cps1, cps2, neogeo. More can be added in roms_config.json if you have a matching RetroArch core.
There is a PS2 core on retroarch Switch ??
 
forum font. ik its because im using light theme of gbatemp. im just pointing that out that on light theme its hard to read the content.

I see. I was thoughtless. Will change it soon. Thanks for highlighting this.👍

Amazing work!!
Thank you!💖💖

There is a PS2 core on retroarch Switch ??
Sorry for getting the hopes up. That was huge error from me😅. I thought it was taken down together with GC. Will remove it from default system in upcoming fix. Thank you for highlighting🤝
 
  • Like
Reactions: Ligeia
Update v0.1.7 bundles all improvements since v0.1.0 — library scanning, scraping, large-library performance, Y-menu tools, and modal UI fixes.


Highlights

  • Library index cache on SD — ROM lists survive returning from RetroArch without a full rescan
  • Virtualized game list — large libraries (600–900+ games) open and respond like small ones
  • Manual & first-launch scanning with smooth progress UI
  • Y-menu tools — Search, Jump to Letter, Jump to System, metadata popup, Rename/Delete ROM, per-system scan
  • Custom ROMs path — point NXStation at a shared ROM root (e.g. sdmc/tico/roms) instead of sdmc:/roms
  • Scrape reliability — skip titles that already have art, persist metadata per game, clearer errors
  • Modal UI fixes — overlay no longer blocks A / X / Y / L / R after Jump to Letter; metadata dialog centered with proper focus


New since v0.1.0

  • Completion sound when a scrape batch finishes (NES-style placeholder)
  • Scan Games in the Y menu on the main carousel (full library) and in the game list (current system only)
  • First-launch library scan with a centered progress screen (system name + Processing X/Y games)
  • Library index cache on SD (data/cache/library_index.json) so the ROM list survives NRO handoff relaunches (e.g. returning from RetroArch)
  • Custom ROMs Path in Settings — browse for a different ROM root; triggers an automatic rescan
  • Folders & Logs screen in Settings — all data/settings/log paths in one scrollable view
  • Left analog stick browses the system carousel (hold to auto-repeat), in addition to D-pad and L/R
  • Jump to System in the main Y menu
  • Favorites / Last Played rows show a short system acronym (SNES, MEGADRIVE, PSX, …)
  • Rename ROM and Delete ROM in the game list Y menu and on the metadata popup
  • Metadata popup shows the ROM filename to tell similar/duplicate files apart
  • changelog.md for release notes (in repo)



Changed since v0.1.0

  • Library scan runs once on first start; further updates are manual via Scan Games or Settings → Rescan Libraries
  • Scraper log no longer auto-scrolls after a batch finishes so you can review entries before pressing B
  • Screensaver video has top padding so previews are not flush with the screen edge
  • Switch stays awake during scraping (screen may dim; auto-sleep disabled until scrape ends)
  • Game list loads a system on demand if the in-memory index is missing but the library was previously scanned
  • Startup reloads the library from cache when available; falls back to a one-time rescan only if the cache is missing
  • Library scan progress (Processing X/Y games) updates smoothly at display refresh rate instead of jumping to the final count
  • Game list is a virtualized/recycled list — only visible rows are built, fixing severe input lag on large libraries
  • Settings About version reflects the actual build version instead of a hardcoded string
  • Metadata opens as a centered popup dialog instead of a full screen
  • Scraper status lines no longer repeat the title after OK
  • Scraper errors use clearer wording (e.g. No match (HTTP 404), Server rejected (HTTP 403))



Fixed since v0.1.0

  • Game list appearing empty after returning from RetroArch until browsing away and back
  • Game list focus highlight showing behind the Y menu on large libraries
  • Large lists (600+ games) stutter while building; Y menu blocked until the list finished building
  • Scrape Missing Art skipping games that already have art on SD (checks ES-DE image folders, not only the scraped flag)
  • Scrape metadata and library cache persisting after each successful game so aborted batches do not cause re-scrapes
  • Game list refreshing from AppState after scrape so the next batch uses up-to-date metadata
  • Jump to letter skipping starred games pinned at the top, landing in the alphabetical list
  • Blank gap under the system name in the game list (empty recycler section header measured as a full row)
  • Fast L/R page scrolling desyncing selection highlight from art/preview; A now launches the previewed game consistently
  • Selection rectangle briefly flashing behind the system title when holding R during page scroll
  • After Jump to Letter / Search / metadata / scan modals, A / X / Y / L / R stopped working (stuck overlay block)
  • Selection highlight no longer floats over metadata popup or system scan screen; video preview stops while those are open
  • Game list behind the metadata popup can no longer be navigated
  • Metadata popup middle-centered again (content no longer wider than the dialog frame)
  • Metadata popup focus limited to Rename / Delete; B closes; D-pad no longer selects the whole panel



Removed since v0.1.0

  • PlayStation 2 (ps2) from the default roms_config.json (no practical PS2 core on Switch)
 

Site & Scene News

Popular threads in this forum