Build a Self-Hosted Retro Gaming Hub with ES-DE and RetroArch

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

The HomeLab Arcade: Repurposing Idle Silicon

We’ve all got that one Raspberry Pi 4 or an old Dell Optiplex tucked away in a closet. While most HomeLabbers focus on file storage or home automation, there is a unique satisfaction in turning that hardware into a centralized gaming powerhouse. Instead of buying a dedicated console, I prefer building a system that serves the entire house over the local network.

Building a gaming server is a great way to learn about hardware optimization and low-latency networking. It isn’t just about playing games. You are building a high-performance streaming server capable of delivering 16-bit nostalgia to any screen with less than 15ms of lag.

Quick Start: The 5-Minute Foundation

If you are running a Debian-based system like Ubuntu 22.04 or Raspberry Pi OS, getting started is straightforward. We use RetroArch as the “engine” and EmulationStation-DE (ES-DE) as the interface.

1. Install RetroArch

sudo add-apt-repository ppa:libretro/stable
sudo apt update
sudo apt install retroarch

2. Get EmulationStation Desktop Edition (ES-DE)

Download the AppImage or DEB package from the ES-DE website. For a dedicated server, the DEB package usually offers better system integration. If you’re using a Raspberry Pi, ensure you grab the ARM64 version.

3. Initial Directory Setup

Run ES-DE once to generate the necessary configuration files:

./ES-DE_x64.AppImage

The software will ask for a ROM storage path. I recommend a dedicated partition or an external SSD with at least 128GB of space if you plan on hosting PlayStation 1 or Dreamcast titles.

The Setup: Configuring the Core Engine

RetroArch is powerful but its menu system can be a maze. The software uses “Cores,” which are essentially dynamic libraries that act as the console hardware. To keep things smooth, you need to automate how these cores are handled.

Optimizing for Network Streaming

Open RetroArch and head to Settings → Drivers. Switch your Video driver to vulkan for modern integrated graphics or glcore for older hardware. This change significantly cuts down input latency during network play.

Next, use the Online Updater → Core Downloader to grab these reliable defaults:

  • NES: Mesen
  • SNES: Snes9x (Current)
  • PlayStation 1: DuckStation (Best for upscaling to 1080p)
  • GameBoy Advance: mGBA

Linking ES-DE to Your Library

ES-DE acts as the visual front-end. It looks for ROMs in specific subfolders like ~/ROMs/snes. Keeping your naming conventions clean is vital here. If your files are named correctly, ES-DE will automatically pull high-quality box art and 30-second video previews for your entire collection.

The Game Changer: Streaming to Every Device

The “Self-Hosted” advantage means you aren’t tethered to a monitor. You can play on a tablet in bed or a laptop in the kitchen. We achieve this using Sunshine on the server and Moonlight on the client.

1. Installing Sunshine

Sunshine is a powerful host that implements the GameStream protocol. It works across AMD, Intel, and Nvidia hardware.

# Download the latest .deb from Sunshine's GitHub
sudo apt install ./sunshine-linux-amd64.deb

Access the web configuration tool at https://localhost:47990. This is where you will pair your remote devices.

2. Adding the Console to Sunshine

In the Sunshine Web UI, navigate to the Applications tab and add a new entry:

  • Application Name: Retro Console
  • Command: /path/to/ES-DE_x64.AppImage

Now, when you open the Moonlight app on your phone or TV, your “Retro Console” will appear as a launchable app. It just works.

3. Managing Controllers

Moonlight handles the heavy lifting by passing your controller input back to the server as a virtual Xbox controller. RetroArch typically recognizes this immediately via the xinput driver, requiring zero manual mapping.

Lessons from the Field

I’ve run this setup for years. These three tips will save you hours of troubleshooting and frustration.

The BIOS Requirement

NES and SNES games run instantly, but systems like the PS1, Saturn, and Dreamcast require BIOS files. You must place these in ~/.config/retroarch/system. Without them, you’ll be staring at a black screen. I keep a verified backup of this folder on my main PC because hunting for specific MD5-matched BIOS files is a chore.

Hardwire for Stability

Always connect the server via Ethernet. Even if you stream to a Wi-Fi-based tablet, having a wired source cuts jitter by 50%. If the video stutters, cap the bitrate in the Moonlight settings to 20 Mbps. For 2D retro games, you won’t see a drop in quality, but the stability will improve immensely.

Automated Save Backups

Losing 40 hours of progress in Final Fantasy VII because of a corrupted SD card is a rite of passage you should avoid. RetroArch stores .srm and .state files in specific directories. Use a simple cron job to sync these to your NAS or cloud storage every night.

# Sync saves to NAS every night at 3 AM
0 3 * * * rsync -av --delete ~/.config/retroarch/saves/ /mnt/nas/backups/game_saves/

This setup transforms your HomeLab into a functional entertainment center. It’s a practical way to explore virtualization and network tuning while keeping gaming history alive in your own home.

Share: