TandemDocs

Library3 min read

Systems and emulators

Which systems Tandem knows, which emulators it starts, and how to add your own by editing platforms.json: no rebuild or app update, just change a file and rescan.

On this pageWhat comes built inUsing your own platforms.jsonThe formatSystem fieldsEmulator fieldsFinding an emulator's component and actionSeveral emulators for one systemSharing what works

What comes built in

Tandem knows 104 systems. The common ones:

SystemFolders under ROMs/Main file typesEmulators
Nintendo 3DSn3ds, 3ds.3ds .cia .cci .cxi .3dsx .zcciAzahar, RetroArch (Citra)
Nintendo DSnds.nds .dsi .zip .7zmelonDS Dual, melonDS, DraStic, RetroArch
Nintendo Switchswitch.nsp .xci .nca .nroEden
Nintendo Wii Uwiiu.wux .wud .wua .rpx .wuhbCemu
Wii, GameCubewii, gc.iso .rvz .wbfs .gczDolphin, RetroArch
Nintendo 64n64.n64 .z64 .v64 .zipRetroArch (Mupen64Plus-Next, ParaLLEl), Mupen64Plus FZ
NES, SNESnes, snes.nes .sfc .smc .zipRetroArch (FCEUmm, Nestopia, Mesen, Snes9x, bsnes)
Game Boy, Color, Advancegb, gbc, gba.gb .gbc .gba .zip .7zRetroArch (Gambatte, SameBoy, mGBA, gpSP)
PlayStationpsx, ps1.cue .chd .pbp .m3u .isoDuckStation, RetroArch, ARMSX1
PlayStation 2ps2.iso .chd .csoARMSX2, NetherSX2
PSPpsp.iso .cso .chd .pbpPPSSPP
PS Vitapsvita, vita.dpt .psvitaVita3K
Genesis, Master System, Game Geargenesis, megadrive, mastersystem, gamegear.md .gen .sms .gg .zipRetroArch (Genesis Plus GX, PicoDrive)
Saturn, Dreamcastsaturn, dreamcast.chd .cue .gdi .cdiYaba Sanshiro, Flycast, Redream, RetroArch
Arcade, Neo Geoarcade, mame, fbneo, neogeo.zip .7z .chdRetroArch (FinalBurn Neo, MAME), MAME4droid
Windowswindows, pc, steam.pcgame .steam .desktop and other shortcutsGameNative, Winlator
DOS, ScummVMdos, scummvm.zip .dosz .exe .scummvmDOSBox Pure, ScummVM

The built-in platforms.json lists every system, folder name and file type. Tandem offers each installed emulator that fits, and a system appears only when its folder has at least one game.

Using your own platforms.json

The built-in list is app/src/main/assets/platforms.json. To change it:

  1. Copy that file to ROMs/tandem/platforms.json on your device.
  2. Edit it: add a system, add an emulator, change a folder name.
  3. In Tandem, Settings › Library › Rescan games.

When ROMs/tandem/platforms.json exists, Tandem uses it instead of the built-in list, entirely. Start from a copy of the built-in file, so you keep the systems you didn't mean to change.

Tip

If Tandem shows no systems after an edit, the file probably has a JSON syntax error, like a missing comma. Paste it into any JSON validator to find the line.

The format

The file is one object with a platforms list. Each entry is a system:

{
  "platforms": [
    {
      "id": "gba",
      "name": "Game Boy Advance",
      "short": "GBA",
      "folders": ["gba"],
      "extensions": ["gba", "zip", "7z"],
      "skipDirs": [],
      "art": ["gba"],
      "players": [
        {
          "name": "RetroArch",
          "component": "com.retroarch.aarch64/com.retroarch.browser.retroactivity.RetroActivityFuture",
          "action": "android.intent.action.MAIN",
          "game": "extra-path:ROM",
          "extras": {
            "LIBRETRO": "/data/data/com.retroarch.aarch64/cores/mgba_libretro_android.so",
            "CONFIGFILE": "/storage/emulated/0/Android/data/com.retroarch.aarch64/files/retroarch.cfg"
          }
        }
      ]
    }
  ]
}

System fields

FieldRequiredMeaning
idYesA short, unique, lowercase name. It is part of each game's identity (gba/Some Game.gba), so changing it later makes Tandem forget favorites and play time for that system.
nameYesThe full name, shown on system cards and the bottom screen.
shortNoA few letters for tiles and pills, like GBA. Defaults to name.
foldersNoFolder names under ROMs/ to scan. Defaults to the id.
extensionsYesFile extensions that count as games, without the dot. Case doesn't matter.
skipDirsNoSubfolder names to ignore, for emulator data kept next to the games.
artNoFolder names under ROMs/downloaded_media/ to take artwork from. Defaults to the id.
playersYesThe emulators that can run this system. The first one is the default.

Emulator fields

Each entry in players describes how to start one emulator.

FieldRequiredMeaning
nameNoShown in the game menu. Defaults to the package name.
componentYesThe emulator's activity, as package/full.activity.Name.
actionNoThe intent action. Defaults to android.intent.action.VIEW.
gameNoHow the game is handed over; see below. Defaults to data.
extrasNoExtra string values to send with the intent, as "KEY": "value".

The game field takes one of three forms:

ValueWhat the emulator receives
dataA content link to the game as the intent's data. Most standalone emulators.
extra-uri:<key>The same content link, in the extra named <key>.
extra-path:<key>The plain file path, in the extra named <key>. RetroArch works this way.

A content link points into the ROMs folder you picked on first launch, and Tandem grants the emulator access to that one file. That is why the second setup step matters for emulators that use data or extra-uri.

Finding an emulator's component and action

Most emulator projects document how frontends should launch them; look for "frontend", "intent" or "ES-DE" in their docs. ES-DE's own configuration (its es_find_rules.xml and es_systems.xml for Android) lists the activity and action for many emulators, and translates directly:

In ES-DEIn platforms.json
The emulator's package/activity entry in es_find_rules.xmlcomponent
%ACTION%=…action
%DATA%=%ROMSAF%"game": "data"
%EXTRA_key%=%ROM% (a file path)"game": "extra-path:key"
%EXTRA_key%=%ROMSAF% (a content link)"game": "extra-uri:key"
Any other %EXTRA_key%=valuean entry in extras

With a computer and adb, you can also list an installed app's activities:

adb shell cmd package resolve-activity --brief -a android.intent.action.VIEW <package>
adb shell dumpsys package <package> | grep -i activity

Several emulators for one system

Add more entries to players. The first is the default, and any game can use another from its game menu (Y › Emulator). For example, to offer a standalone mGBA alongside RetroArch for the GBA, add it as a second player.

Sharing what works

If you get an emulator working, please share it: open a new emulator request with your entry, or a pull request that adds it to the built-in file.

Last updated Edit this page on GitHub

Tandem is free software under the GNU GPL v3 or later. These pages are built from the Markdown in the repository; no cookies, no tracking.