RetroArch 1.9.5 has just been released.

Grab it here.

If you’d like to learn more about upcoming releases, please consult our roadmap here. The next version of Lakka (with an updated RetroArch 1.9.5 version) is scheduled to be released a week from today.

Remember that this project exists for the benefit of our users, and that we wouldn’t keep doing this were it not for spreading the love with our users. This project exists because of your support and belief in us to keep going doing great things. If you’d like to show your support, consider donating to us. Check here in order to learn more. In addition to being able to support us on Patreon, there is now also the option to sponsor us on Github Sponsors! You can also help us out by buying some of our merch on our Teespring store!

Release notes

Be sure to also read our Libretro Cores Progress Report (a link will appear here later).

Direct3D 10/11/12 should now allow for fastforwarding while in fullscreen mode. The window title should now fully update periodically as well when using Direct3D 10/11/12 drivers. For instance, frame count and fps was not shown in the window title before. This should now be corrected.

CRT SwitchRes support has been completely overhauled. Read below for the details.


Enhanced search functionality to the ‘Manage Cores’ menu

1.9.5 adds enhanced search functionality to the Settings > Cores > Manage Cores menu (with behaviour identical to that of the core downloader

1.9.5 also wires up proper left/right input actions for core manager entries, so the Manage Cores list can be scrolled rapidly by pressing/holding left/right.

API extension for setting ‘need_fullpath’ based on content file extension and to request persistent frontend content data buffers

Before, the libretro API had two major shortcomings when it comes to handling content:

* The need_fullpath parameter, used to define whether content is loaded by the frontend or handled by a core, is set ‘globally’ at the core level. This means any core that supports both CD-type and ‘normal’ ROM content has to set need_fullpath = true for all content, since CD-type files are generally too large to fit in memory – and in doing this, they are then obliged to load small ROM files internally, disabling any frontend softpatching support, and requiring the frontend to extract compressed content to temporary files on disk.
* The content data buffer passed to retro_load_game() is transient – a core must assume that it will become invalid once retro_load_game() returns. This means any core that sets need_fullpath = false must duplicate the content data buffer – so for example, loading a 32 MB GBA ROM with mGBA requires 64 MB of free RAM. This is a substantial issue on platforms with limited memory, and means that some cores are forced to set need_fullpath = true just to minimise RAM consumption.

1.9.5 seeks to address these problems with the addition of a new RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE environment callback:

* This allows need_fullpath to be set based on file extension
* It also allows cores to request a persistent content data buffer, which is guaranteed to be valid for the lifetime of the core (such that data duplication is not required)

Accompanying this is a new RETRO_ENVIRONMENT_GET_GAME_INFO_EXT callback, which allows extended content information to be retrieved in retro_load_game() (specifically, it provides content file path/metadata information – often essential when loading content from compressed archives – and buffer ‘persistence’ status)

The manner in which this functionality is implemented has a further side benefit. On all platforms that support runahead, for any core that sets need_fullpath = false another copy of the content data buffer must be created and stored in case the user toggles second instance runahead on while the core is running. Now that we have a mechanism for maintaining persistent content data buffers, we just enforce persistence whenever runahead is supported – so the initial frontend-loaded content buffer can be used directly by the second instance core, with no duplication.

NOTE: A couple of cores are already implementing this new feature. Unfortunately, not every emulator will be able to directly use the persistent buffer without copying it first into a temporary buffer. Some emulators like writing back to the ROM buffer in-memory (such as adding speedhacks or other alterations). In instances where this happens, we unfortunately cannot just directly set a pointer to the persistent buffer and need to still have a memory buffer copy.

New CRT SwitchRes implementation

Check out this article for all the details here.

What is new?
* Better modeline generation.
* Faster and more stable switching.
* Windows dynamic resolutions. No longer limited to locked resolutions/Hz. Timings are modified on-the-fly (ATI only)
( Stable resolution restoration. (If RetroArch should crash you will be stuck in the previous resolution that RetroArch was in)
* Improved super resolutions with Integer scaling.
* Fixed primary monitor issue. You no longer have you use your primary monitor only.
* Improved monitor indexing. Allowing for multi-monitor support.
* Low and High resolution options for the RetroArch menu.
* (RawInput support for absolute mice devices (Lightguns, to name a few) had issues with resolution changes, this has been fixed co-ordinates are reassigned after a resolution change.
* New CRT SwitchRes Menu options to remove the need to edit the switchres.ini.
* Switchres.ini can be used to set some advanced options.
* Monitor profiles – these allow you to change the modeline generation profile to fit many TV/monitors. (Some available from the CRT SwitchRes menu)
* Custom CRT ranges – this allows you to set custom monitor profiles. This can help with uncommon TV/Monitors and geometry issues.



  • ALSATHREAD: Make alsathread default for all ALSA devices with threads
  • ARCHIVE: Fix loading of archived content with file names containing ‘#’ characters
  • CHEEVOS: Upgrade to rcheevos 10.1
  • CHEEVOS: Challenge indicators
  • CHEEVOS: Group achievements by category in quick menu
  • CHEEVOS: Relabel ‘Start Active’ with ‘Encore Mode’
  • D3D10: Window title should now update
  • D3D11: Window title should now update
  • D3D11: Allow fastforward in fullscreen
  • D3D12: Window title should now update
  • D3D12: Allow fastforward in fullscreen
  • CRT/SWITCHRES: New implementation
  • FONTS: Improve message wrapping with CJK languages
  • FONTS: Fix garbled characters when converting encodings
  • INPUT: Allow the 8 analog stick directions to be used as keys for core keyboard mappings
  • LIBRETRO: Add API extension for setting ‘need_fullpath’ based on content file extension and to request persistent frontend content data buffers
  • MENU/SEARCH: Add enhanced search functionality to the ‘Manage Cores’ menu
  • OPENDINGUX: Fix black screens when triggering gfx driver initialisation via menu actions
  • UNIX: Get better battery stats on sysfs nodes
  • VIDEO: Extend Frame Delay range to 19 to accommodate PAL land too
  • WIFI/LAKKA: Add nmcli to wifi drivers
  • WIFI/LAKKA: Add wifi configuration menu
  • X11: fix fullscreen when swapping monitors/resolution