# RetroArch Netplay Setup Guide
## What This Guide Covers
RetroArch is a multi-system emulator with built-in netplay that lets both players run the emulator independently while staying synchronized. This guide walks you through setting up RetroArch netplay for online multiplayer, including installation via Homebrew or direct download.
## How RetroArch Netplay Works
**The key concept:** Both players run the emulator on their own computers. The emulators exchange controller inputs and stay synchronized frame-by-frame.
- **Both players** see their own screen (no streaming)
- **Both players** need the exact same ROM file
- **Both emulators** simulate the same frame at the same time
- **Synchronization** keeps them in lockstep 60 times per second
## Why RetroArch vs Parsec?
### RetroArch Netplay (Synchronized Emulation)
- **How it works:** Both run emulator → exchange inputs → both simulate same frame → verify sync
- **Latency:** 20-50ms+ (synchronization overhead)
- **Pros:** True peer-to-peer, each player sees their own screen, cross-platform
- **Cons:** More complex setup, requires identical ROM files, can stutter if sync drops
- **Best for:** Cross-platform play, when you want true peer-to-peer without streaming
### Parsec (Screen Streaming)
- **How it works:** Host runs game → streams video to guest → guest sends inputs back
- **Latency:** 10-30ms (usually lower)
- **Pros:** Simpler setup, works with any emulator, smoother experience
- **Cons:** Only host runs the game, requires good upload speed
- **Best for:** Mac-to-Mac play, easiest experience, lowest latency
**Bottom line:** Use RetroArch if you need cross-platform play or want true peer-to-peer. Use Parsec if you want the easiest setup and lowest latency.
## Pre-Setup Checklist
Before starting, make sure you have:
✅ **Both players:**
- Mac, Windows, or Linux computer
- Controller (Xbox, PlayStation, Switch Pro, etc.)
- Stable internet connection (wired ethernet recommended)
- **Identical ROM files** (verify with checksums)
✅ **Host (the person running the server):**
- Port forwarding access on your router (or UPnP enabled)
- 10+ Mbps upload speed
✅ **Guest (the person joining):**
- 10+ Mbps download speed
## Installation
### Option 1: Install via Homebrew (Mac - Recommended)
If you use Homebrew package manager:
```bash
# Install RetroArch
brew install --cask retroarch
# Launch RetroArch
open -a RetroArch
```
**After installation, update your Brewfile:**
```bash
# Regenerate Brewfile to track RetroArch
brew bundle dump --file=~/Brewfile --force
```
See [[2. Managing Homebrew with Brewfile]] for more on maintaining your Homebrew setup with chezmoi.
### Option 2: Direct Download (Mac, Windows, Linux)
**For Mac:**
1. Go to [retroarch.com](https://www.retroarch.com/index.php?page=platforms)
2. Click **macOS** under Downloads
3. Download `RetroArch.dmg`
4. Open the DMG and drag RetroArch to Applications
5. Right-click RetroArch → Open (first time only, to bypass Gatekeeper)
**For Windows:**
1. Go to [retroarch.com](https://www.retroarch.com/index.php?page=platforms)
2. Click **Windows** under Downloads
3. Download the installer (`.exe`)
4. Run installer and follow prompts
5. Launch RetroArch from Start Menu
**For Linux:**
```bash
# Ubuntu/Debian
sudo apt install retroarch
# Arch Linux
sudo pacman -S retroarch
# Fedora
sudo dnf install retroarch
```
## Step-by-Step Setup Guide
### Part 1: Install Cores (Both Players)
Cores are the actual emulators that run games. Both players need the **exact same core**.
1. **Launch RetroArch**
2. **Open Core Downloader:**
- Main Menu → Load Core → Download a Core
- (Or press F1 → Online Updater → Core Downloader)
3. **Download NES core** (we'll use NES for this guide):
- Scroll to **Nintendo - NES / Famicom (Mesen)**
- Press Enter/A to download
- Wait for "Core installed successfully"
**Recommended cores for netplay:**
- **NES:** Mesen (most accurate)
- **SNES:** Snes9x (best netplay support)
- **Genesis:** Genesis Plus GX
- **Game Boy:** Gambatte
- **N64:** Mupen64Plus-Next (works, but N64 netplay can be laggy)
4. **Exit back to Main Menu**
### Part 2: Configure Netplay Settings (Both Players)
5. **Open Settings:**
- Main Menu → Settings → Network
- (Or press F1 → Settings → Network)
6. **Configure Network settings:**
- **Netplay Enable:** ON
- **Netplay Mode:** Depends on who you are:
- **Host:** Set to "Host"
- **Guest:** Set to "Client"
- **Netplay Delay Frames:** 6-8 (start with 6, increase if laggy)
- **Netplay Request Device #:** 16 (reduces input lag)
- **Netplay Stateless Mode:** ON (better for platformers)
- **Netplay NAT Traversal:** ON (helps with connections)
7. **Save settings:**
- Press Backspace to go back
- Settings are auto-saved
### Part 3: Verify Identical ROMs (Both Players)
**This is critical:** Both players must have byte-for-byte identical ROM files.
8. **Check ROM checksums** (Mac/Linux):
```bash
# Navigate to your ROM folder
cd ~/Documents/ROMs/NES
# Get MD5 checksum
md5 "Super Mario Bros. 3.nes"
```
**Compare checksums:**
- Host runs the command and shares the checksum
- Guest runs the same command
- Checksums MUST match exactly
**For Windows:**
```powershell
# In PowerShell
Get-FileHash "Super Mario Bros. 3.nes" -Algorithm MD5
```
9. **If checksums don't match:**
- One player sends their ROM to the other
- Verify checksums again
- Do NOT proceed until they match
### Part 4: Host Setup
10. **Enable port forwarding** (if needed):
- Check if UPnP is working: Main Menu → Network → Network Information
- If "UPnP Status" shows "Available", you're good
- If not, manually forward port 55435 (UDP) on your router
**To manually forward port 55435:**
- Log into your router (usually 192.168.1.1 or 192.168.0.1)
- Find "Port Forwarding" or "Virtual Server" settings
- Add new rule:
- **Service Name:** RetroArch
- **Port:** 55435
- **Protocol:** UDP
- **Internal IP:** Your computer's local IP (find in System Settings → Network)
11. **Find your public IP address:**
```bash
curl ifconfig.me
```
Or visit [whatismyipaddress.com](https://whatismyipaddress.com)
Share this IP with your guest.
12. **Load your ROM:**
- Main Menu → Load Content
- Navigate to your ROM file
- Select "Super Mario Bros. 3.nes" (or your chosen game)
- It will load with the Mesen core
13. **Start hosting:**
- While in-game, press F1 (or your menu hotkey)
- Netplay → Host a Netplay Session
- Share your public IP with the guest
- Wait for guest to connect
### Part 5: Guest Joins (Guest Only)
14. **Connect to host:**
- Main Menu → Netplay → Connect to Netplay Host
- Enter host's public IP address
- Port: 55435 (default)
- Press Enter
15. **Wait for connection:**
- RetroArch will show "Connecting..."
- Once connected, you'll see the game running
- Your screen should match the host's
16. **Test controls:**
- Press buttons on your controller
- You should see Player 2 responding in-game
### Part 6: Configure Controllers In-Game
17. **Assign player numbers:**
- Most NES games auto-assign:
- Host = Player 1
- Guest = Player 2
- Some games require manual assignment in their options menu
18. **Test in a simple game:**
- Start with a 2-player game like Contra or Double Dragon
- Both players move around
- Verify no excessive lag or desyncs
## Troubleshooting
### Can't Connect to Host
**Problem:** Guest gets "Connection failed" or "Connection timed out"
**Solutions:**
1. **Verify IP address:**
- Host: Share your PUBLIC IP (from ifconfig.me), not local IP (192.168.x.x)
- Guest: Double-check you typed it correctly
2. **Check port forwarding:**
- Host: Verify port 55435 UDP is forwarded to your computer
- Test with [canyouseeme.org](https://canyouseeme.org) (port 55435)
3. **Disable firewalls temporarily:**
- Mac: System Settings → Network → Firewall → Turn Off (for testing)
- Windows: Windows Security → Firewall → Turn off (for testing)
- **Re-enable after testing!**
4. **Try direct IP connection:**
- Host: Enable UPnP in router settings
- Both: Restart RetroArch and try again
### Game Desyncs / Goes Out of Sync
**Problem:** Both players see different things happening in the game.
**Solutions:**
1. **Verify ROM checksums match:**
- Use MD5 checksum (see Part 3)
- Even one byte difference causes desyncs
2. **Increase delay frames:**
- Settings → Network → Netplay Delay Frames → 8 or 10
- Higher = more lag, but more stable sync
3. **Disable save states:**
- Don't load save states during netplay
- Start from beginning or use in-game passwords
4. **Use Stateless Mode:**
- Settings → Network → Netplay Stateless Mode → ON
### High Input Lag
**Problem:** Controls feel sluggish or delayed.
**Solutions:**
1. **Reduce delay frames:**
- Settings → Network → Netplay Delay Frames → 4 or 5
- Lower = more responsive, but may cause stuttering
2. **Enable Request Device 16:**
- Settings → Network → Netplay Request Device # → 16
- Reduces internal frame delay
3. **Use wired ethernet:**
- Wi-Fi adds 20-50ms latency
- Connect both computers to ethernet
4. **Check network speeds:**
- Host: Test upload speed at [fast.com](https://fast.com)
- Guest: Test download speed
- Both need 10+ Mbps for smooth play
### Audio Crackling or Stuttering
**Problem:** Audio sounds distorted or choppy.
**Solutions:**
1. **Increase audio latency:**
- Settings → Audio → Audio Latency (ms) → 64 or 128
2. **Disable rewind:**
- Settings → Rewind → Rewind Enable → OFF
- Rewind causes audio issues in netplay
3. **Lower audio quality:**
- Settings → Audio → Audio Resampler → Sinc (Fast)
## Best NES Games for Online Play
These NES games work great with RetroArch netplay and handle latency well:
### Turn-Based Strategy
- **Advance Wars** (GBA, but playable via mGBA core)
- **Fire Emblem** (GBA)
- **Chess** (NES)
### Co-op Action (Pass-and-Play or Simultaneous)
- **Super Mario Bros. 3** - Take turns after each level
- **Contra** - Simultaneous 2-player co-op
- **Double Dragon II** - Beat 'em up co-op
- **Teenage Mutant Ninja Turtles II** - 2-player co-op
- **Chip 'n Dale Rescue Rangers** - Co-op platformer
- **River City Ransom** - Open-world beat 'em up
### Competitive (Turn-Based Works Best)
- **Dr. Mario** - Competitive puzzle game
- **Tetris** (with multiplayer ROM hacks)
- **Excitebike** - Time trials, compare times
- **Track & Field** - Take turns on events
- **Ice Hockey** - Fast-paced sports
### Puzzle Games
- **Adventures of Lolo** - Take turns solving puzzles
- **Kickle Cubicle** - Puzzle platformer
- **Solomon's Key** - Action puzzle
### RPGs (Pass Controller After Battles)
- **Final Fantasy** - Take turns controlling party
- **Dragon Warrior** - Pass after each battle
- **Zelda II** - Take turns in dungeons
### Party Games
- **Super Spike V'Ball** - Volleyball
- **Mario Bros.** (not Super) - Arena combat
- **Balloon Fight** - Competitive flying
## Games to Avoid for Netplay
These don't work well due to latency or synchronization issues:
- **Fighting games** (requires frame-perfect inputs)
- **Rhythm games** (audio sync is critical)
- **Twitch platformers** (Super Meat Boy style)
- **Fast-paced racing** (Micro Machines, R.C. Pro-Am with competitive play)
## Advanced Tips
### Rollback Netcode
RetroArch has experimental rollback netcode for some cores:
- Settings → Network → Netplay Rollback → ON
- Settings → Network → Netplay Rollback Frames → 6-8
- **Only works with specific cores** (check RetroArch docs)
- Makes netplay feel more responsive by predicting inputs
### Host on the Better Computer
If one player has significantly better specs, they should host:
- Host does more computation (running emulator + networking)
- Guest just syncs to host's state
### Use Relay Servers
If direct connection doesn't work, try RetroArch's relay servers:
- Host: Netplay → Host via Relay
- Guest: Netplay → Connect via Relay
- Enter the relay room code instead of IP address
### Save States for Recovery
If you desync mid-game:
1. Host creates save state (F2 by default)
2. Host sends save state file to guest
3. Both load the same save state
4. Resume playing
## Comparing to OpenEmu + Parsec
| Feature | RetroArch Netplay | OpenEmu + Parsec |
|---------|-------------------|------------------|
| Setup Complexity | Medium-High | Easy |
| Latency | 20-50ms | 10-30ms |
| Both see own screen | ✅ Yes | ❌ No (guest sees host's) |
| Cross-platform | ✅ Yes | ⚠️ Windows/Mac only |
| ROM requirements | Must be identical | Only host needs ROM |
| Best for | Peer-to-peer, cross-platform | Lowest latency, easiest setup |
## Pro Tips
1. **Start with simple games:** Test your connection with Contra or Double Dragon before trying complex RPGs.
2. **Use Discord for voice chat:** RetroArch doesn't have built-in voice, so use Discord, FaceTime Audio, or similar.
3. **Wired ethernet is crucial:** Wi-Fi latency will make fast-paced games feel sluggish.
4. **Verify checksums every time:** Even downloading from the same source can sometimes give different ROM versions.
5. **Keep delay frames low:** Start at 6, only increase if you get stuttering or desyncs.
6. **Host from the better connection:** If one player has significantly better upload speed, they should host.
7. **Test during off-peak hours:** Internet traffic at 2pm vs 10pm can affect latency significantly.
8. **Close bandwidth-heavy apps:** Pause Dropbox, close Netflix, disable auto-updates before playing.
9. **Use the same core version:** Update RetroArch and cores regularly to ensure both players have identical versions.
10. **Save progress frequently:** Use in-game save systems (passwords, battery saves) rather than save states during netplay.