Global variables describe the Recalbox installation and its hardware. They do not change during an interface session, and can be used anywhere: system list, game lists, menus.
These variables only exist for themes designed for Recalbox 10 or above.
${root}Absolute path to the root of the active theme. This is the reliable way to reference an asset without worrying about the current folder.
/recalbox/share/themes/my-theme
<image name="deco" extra="true" path="${root}/art/background.png" />
${recalbox.version}Installed Recalbox version.
10.1
${recalbox.built}Build date and time of the installed version.
Jul 20 2026 - 10:00:38
${settings.language}Configured language code, 2 characters.
en
${settings.locale}Full locale in xx_XX format, where xx is the language and XX the country.
en_US
${settings.region}Region selected in MAIN MENU > USER INTERFACE SETTINGS > THEME > REGION, among eu, jp and us. This value drives the regional suffixes (text.EU, text.JP, text.US).
eu
${settings.timezone}Configured time zone.
Europe/Paris
${hardware.board}Name of the board Recalbox runs on.
RPi 5
${hardware.crt}yes or no depending on whether a CRT video output is active (JAMMA included).
${hardware.jamma}yes or no depending on whether a JAMMA video output is active.
${hardware.ispc}yes or no depending on whether the machine is an x86_64 PC.
${hardware.ispi}yes or no depending on whether the machine is a Raspberry Pi.
${hardware.isodroid}yes or no depending on whether the machine is an Odroid Go Advance / RG351x.
${hardware.isanbernic}yes or no depending on whether the machine is an Anbernic RG353x.
${display.tate}yes or no depending on whether the screen is in vertical (TATE) configuration.
${display.tateleft}yes or no depending on whether the TATE display is rotated 90°.
${display.tateright}yes or no depending on whether the TATE display is rotated 270°.
${display.overscan}yes or no depending on whether Recalbox is in overscan, that is CRT without JAMMA.
${display.resolution}Current resolution range, among qvga, vga, hd and fhd.
fhd
${random.between(...)}Picks one value at random among those provided, comma-separated. Spaces around values are ignored. ${random.between()} returns nothing; ${random.between(value1)} always returns value1.
<text name="quote" extra="true" text="${random.between(Insert coin,Ready player one,Game over)}" />
${random.range(min,max)}Picks a random integer between min and max, bounds included. If there are not exactly two parameters, if one of them is not an integer, or if min >= max, the variable is replaced by an empty string and an error is written to themes.log.
<image name="background" extra="true" path="${root}/art/background${random.range(1,10)}.png" />