Steam Link – Adding RetroArch

Posted on Posted in Beginner, Guides, must-read

After initially setting up a Steam Link, there was one more feature to add before I could really call it “finished.” Specifically, I wanted to take a handful of classic games that I sometimes revisit and make those games available for streaming using the Steam Link. Handily, RetroArch and Ice are two small projects that should get us exactly what we’re looking for.

Steam Link

The Steam Link is primarily pitched as a device that lets you stream your Steam games from a desktop running Steam to a television that is connected to the Steam Link device. The Link, however, will actually let you stream anything that the desktop is showing, and that opens up a ton of extra options. In this particular guide, we will talk about using that feature (via Steam even) to add the ability to play older classic games via the Steam Link. The Steam Link (Amazon Link) is quite cheap for what it offers, and you can find it on sale from time to time for nearly nothing (Steam recently ran a deal where they included one for free with certain game purchases).

The following resources are used or referenced in this guide:

Adding RetroArch to Steam

Running games via the Steam Link is really just running games via Steam Big Picture Mode. Accordingly, what we’re really trying to do here is to 1) add a solid interface for emulators on the connected desktop, and 2) add new shortcuts to the desktop’s Steam client. Once that is done, the games will naturally be playable on the Steam Link.

We will be using RetroArch and Ice to get these games into Steam. RetroArch acts as a front-end for multiple systems, making it easier to manage several systems from the same interface. Ice will scrape all of your existing game directories and automate the addition of those games to Steam so that you don’t have to add each game manually. Both of these products are actually optional, but will potentially make your life easier.

What is RetroArch?

retroarch-with-steam-linkAs noted above, Retroarch is a front-end for a number of different emulators. It enables you to run classic games on your desktop, and it allows those classic games to have advanced features like shaders and online multiplayer.

Instead of downloading multiple different emulators and launching each one individually, RetroArch offers a unified system for downloading, maintaining, and launching many emulators. By installing RetroArch, you get access to every “core” available for the platform (a core is how RetroArch refers to an emulator) with the click of a single button. If installed correctly, you will no longer need to worry about updating and managing individual emulators, instead allowing RetroArch to do the work of hosting up-to-date versions of everything. Settings are also unified, making configuration a bit easier.

Installing RetroArch

Download the latest stable version of RetroArch for your platform and unpack it into a directory. After you unpack it, launch retroarch.exe. Using your keyboard for navigation (backspace is the back button – I was expecting the left arrow), you will need to download a core for each system that you intend to emulate. The cores can be installed via Main Menu > Online Updater > Core Updater > Your preferred emulator. Once a core is downloaded, the core and the individual ROMs can be loaded using the same menu.

If all is working correctly you will see the game you just selected.

Most Interesting Native Apps for the Steam Link

The Steam Link supports native apps that can be installed directly on the device to extend its functionality. We list the most interesting packages here. Read more.

Adding Shortcuts to Steam

Once you have RetroArch working correctly, you can immediately start adding shortcuts to Steam. With Steam open, you will notice that a link exists in the bottom-left of your screen that says “Add a Game.” You can choose “Add a Non-Steam Game” to add shortcuts for nearly any app to Steam – especially useful from the Steam Link where navigating the desktop isn’t terribly convenient. Using this method, you can add a shortcut to RetroArch. This gives you the ability to launch the service from the Steam Link, but drops you into the main menu for RetroArch, which isn’t too useful. Instead of stopping with a simple shortcut, you can right-click on the shortcut that you just made and choose “Properties.” If you then click “Set Launch Options” you can set command-line options that RetroArch recognizes. In particular, you can use the command line options -fullscreen to automatically launch RetroArch in fullscreen mode; -L path/to/core to directly load the correct core for a game; and, lastly, the name and path of a ROM itself to directly launch a game. For example, if you had installed the appropriate SNES core and wanted to launch the game “Secret of Mana,” you could insert the following text: -fullscreen -L C:\RetroArch\cores\snes9x2010_libretro.dll "C:\Roms\SNES\Secret of Mana.smc. If everything is done correctly, the RetroArch shortcut should now immediately launch RetroArch, load the SNES core, and start the appropriate game — all in fullscreen mode.

Doing this makes sense for a small handful of games, but what if you have a much larger collection that you would like to make available in Steam? That’s where Ice comes in.

Using Ice to Automatically Add All of Your ROM Files to Steam

Since adding dozens of shortcuts to Steam manually could be a bit tedious, Ice steps in to automatically create all of the shortcuts, add cover art to ROMs that it can identify, and group all of your new ROM shortcuts neatly by system. Ice can be downloaded from its Github Page. Once you download Ice, you will need to do a little preparatory work before setting it lose on your ROM library. First and foremost, Ice expects some level of orderliness to your ROM collection. For it to work properly, you will need a root directory that has a folder inside it for each individual system. For Example, C:/MyRoms/SNES, C:/MyRoms/N64, etc. Additionally, there are three config files located in the root of the Ice directory that will need to be changed: config.txt, consoles.txt, and emulators.txt.

Config.txt should be changed first. You should only need to change one line – your root ROM directory should be added to the line labeled “ROMs Directory” similar to what I have recreated below:

Once this line is added, the file can be saved and closed.

Emulators.txt is the next configuration file that should be edited. This file lets Ice know exactly which systems you would like to have added to Steam, and where Ice can find the emulator for each system. Without RetroArch installed, we would add simple path names to this file for each system. Since we are using RetroArch, however, we should instead pass in RetroArch on the “location” line and add the specific core on the line designated for “command,” along with any other special commands that we would like for RetroArch to use when it launches. Additionally, pay attention to the title in brackets (“[” and “]”) for each system. This text can be set to anything that you would like and will be needed for the last configuration file. With that explanation out of the way, a emulators.txt section for the SNES might look like the following:

The command section should look familiar – it is the same language (without the ROM) that was used when creating the shortcut manually in Steam. These simple three-line sections should be repeated for each emulator that you want Ice to list in Steam. Obviously, you should only list emulators if you have already installed the core in RetroArch.

Lastly, we will need to initialize the consoles.txt file. This last file will tell Ice how to categorize your ROMs in steam, it will tell it how to find your ROMs within your root ROM folder, and it will tell Ice which emulator in emulators.txt should be linked to the games found at the listed location. As above, each system/core should receive one of the following blocks:


Once these three files are properly configured, Ice can finally be run.


Two things should be noted here. First, Steam must be closed before you can successfully run Ice. Second, Ice is currently (as of 7/10/2017) throwing an error if you already have any custom shortcuts in Steam. To fix this error, you need to delete the file that Steam uses to track your custom shortcuts. This will obviously delete any existing custom shortcuts that you have in Steam (but not your normal Steam games). This file is named “shortcuts.vdf,” and it can be found in your Steam directory under Steam\userdata\(your account)\config. Steam can be a little weird about where it stores its files sometimes, so a windows (or whatever you’re using) search might be the quickest way to find this file. This error also means that if you need to run Ice again, you will need to find and delete this file each time in order for Ice to properly add your new games.


If everything was done correctly, Ice should find all of your ROMs, add them to Steam as shortcuts, and download the art for any games that it can find. As for the art, Ice will search a website included in config.txt using the filename of your ROM. I recommend fixing any file names to make sure that they match the name of the game in question if you seem to be having trouble with the cover art portion of Ice.

I have to say that while Ice certainly takes the tediousness out of adding tons of ROMs to Steam, it also creates a bit of a different headache. If you add dozens of games to Steam, all of those games will show up on the Steam Link where navigating them is a bit less convenient than in Steam itself. As a result, adding tons of games via Ice can severely clutter the Steam Link interface and make it harder to find the games that you are actually looking for. All in all, I would seriously consider adding a small handful of games manually as you feel a need to play them instead of adding all of your games at once and possibly swamping the user interface in games that you may never play again.

Also, when it comes to controller configuration, you will get mixed results since each RetroArch core may require some fine tuning (or huge changes) prior to being usable. For example, the SNES core that I initially used required me to create a steam configuration that mapped the controller to keyboard keys, and then bind those keyboard keys as the buttons in the core. Quite the headache just to get the controller working. This was a bit of an outlier when it came to setting up the controller, however.