From Emulation General Wiki
Jump to navigation Jump to search
Developer(s) Squarepusher, themaister, others
Latest version 1.17.0 [+]
Active Yes
Platform(s) Windows
iOS (jailbroken)
Raspberry Pi
PlayStation 2
PlayStation 3
PlayStation 4 (Unofficial)
PlayStation Portable
PlayStation Vita/TV
Xbox 360
Xbox One
Wii U
Nintendo Switch
Nintendo 3DS
GCW Zero (Unofficial)
Steam Link
Type libretro frontend
Programmed in C, C++
Support ($) Patreon
GitHub Sponsor
License GNU GPLv3
Source code GitHub

RetroArch (formerly SSNES) is an open-source, multi-platform libretro frontend written in C or C++. It is designed to be fast, lightweight, and portable.


Note: Some libretro cores are maintained separately from their originators, and thus possess a different update timeline.

Mobile/Console Versions[edit]

Supported Systems[edit]

Main article: libretro#Cores


  • Consistency across multiple platforms, using the same UI structure and a fully featured command line interface.
  • Gamepad-controlled menu system with multiple styles available, such as XMB or Material UI. (There's also a QT-based 'WIMP' desktop-style interface for PC platforms that was announced before and released in version 1.7.3.)
  • Gamepad auto-configuration profiles, so that gamepads are mapped automatically when connected. XInput controller autoconfig is built into the application, with other controller types available as external profiles.
  • Per-core and per-game configuration overrides
  • Built-in Custom resolution/CRTSwitchRes and refresh rate for video output, with exclusive fullscreen mode and monitor index for multi-monitor setups.
  • Dynamic rate control for smooth audio and video, even when the game's output rate differs from your system's. Especially obvious with systems like GBA that do not run 60Hz.
  • Basic fast-forward, SRAM saving, savestate, etc. It supports serialization of the emulation state, which is used to provide real-time rewind and netplay.
  • Pixel shaders and presets, primarily using Slang, Cg and GLSL, with HLSL on Xbox 360. The shader format it uses is flexible and fairly easy to use, allowing for complex multi-pass effects with adjustable runtime parameters. Also supports traditional video filter plugins that are run in software.
  • Supports audio DSP filter plugins through .dsp configuration files.
  • Custom overlay support.
  • FFmpeg recording and playback support. It can record either the native resolution output of the core or the post-processed output of the frontend. Playback is handled through an internal FFmpeg libretro core.
  • Streaming support. By adding your twitch account to RetroArch and making some small setup, it is possible to stream on Twitch the content of the game played.
  • GGPO-like netplay (latency hiding rollback). It should be lag-free if everyone involved emulates at full speed, doesn't live on opposite sides of the world, and has decent internet speeds. It uses peer-to-peer UDP and supports two players. Due to rollback, it requires a fair amount of CPU power to run, and only works with cores that support serialization.
  • Options for decreasing input latency related to vsync by eliminating buffering by the video driver, as well as using frame delay to delay polling of inputs until right before a vsync occurs on the display.
  • Supports input lag-mitigating techniques. One of these setting is "Run-ahead" which allows cycle-accuracy emulators to run ahead of mandatory 1 or 2 frames of input lag. These settings allow emulators to achieve better latency than original hardware (Run-ahead option official debut in version 1.7.2).
  • RetroAchievements support.
  • Libretro cores compatible with BizHawk and EmuVR, so if you don't like using RetroArch as a frontend you have other options as well.

Building RetroArch[edit]

Main article: Building RetroArch

Using RetroArch[edit]

Main article: Using RetroArch

RetroArch for Dummies[edit]

Main article: Dummies Guide: RetroArch


Netplay is now usable from the menu in current builds, under Settings>Netplay Options. You can get it to work with the command line or the long-deprecated RetroArch-Phoenix Launcher as well in older builds.

You must specify whether you will be hosting (server) or joining (client) the game. If joining, you must also enter the host's IP address in the field below. Make sure your firewall is open on port 55435 (default; you can change it if you like) and that the port is forwarded in your router, if applicable. You can also specify 'spectator mode,' which will allow an arbitrary number of spectators to join and watch you play without being able to play themselves.

Delay frames denote the maximum number of frames RetroArch's libretro cores will need to emulate at once to maintain synchronization due to actual network latency. You can figure out an appropriate ballpark for this number by pinging the other player and dividing the time (in milliseconds) by 16 (roughly the number of milliseconds in a frame from a game running at 60 fps). If the gameplay is a bit choppy, try increasing the number of delay frames a bit.

Similar to the GGPO platform, RetroArch creates a constant stream of savestates which, along with button presses, are exchanged and compared between the server and client machines. If the savestates start to diverge, the game rolls back in time to a point where they both agree, and then the libretro cores emulates the missing frames all at once to get back to the appropriate spot. This gives the illusion of completely lagless inputs, which is invaluable for twitchy, fine controls.

If you try to connect to a server and it immediately says client disconnected, open your log and make sure your ROMs match exactly (it will complain about a hash mismatch otherwise). If it gives you a weird time-out error, just close the window and try to connect again, and it should work itself out (sometimes excessive spikes in network latency can cause the states to diverge catastrophically, resulting in this error).

Alternative Launchers and Frontends[edit]

There are plenty of other frontends that can either work as a launcher for RetroArch or you can replace it entirely with another libretro frontend.

Main article: Frontends


A number of controversies have sparked during the development of RetroArch, mostly due to Squarepusher/TwinAphex's attitude and actions towards upstream emulators. As a result, DuckStation and Reicast development has halted[1][2].

Also See[edit]

External links[edit]