Skip to content

Steam Input - Development

Note:

Applications that are not native on Steam get a random AppID number.

Steam Folder structure

Type Folder Comment
Steam Default Templates Folder ~/.steam/steam/controller_base/templates/
Application Templates Folder ~/.steam/steam/steamapps/common/Steam Controller Configs/<AppID>/config/retrodeck/ Temporary changes are stored here
Steam Binding Icons Folder ~/.steam/steam/tenfoot/resource/images/library/controller/binding_icons/

File Naming Standard

The .vdf file will always have the same filename and is thus overwritten when a new version comes out in the:

~/.steam/steam/controller_base/templates/ folder.

The naming syntax is:

RetroDECK_controller_<SystemSource>_<controllername>_<template_type>.vdf

<SystemSource> <- Original System or Source where the controller comes from.
<controllername> <- The Name of the Controller in Steam
<template_type> <- The type of RetroDECK Template

Example:

RetroDECK_controller_ps5_dualsense_simple.vdf

<SystemSource> <- ps5
<controllername> <- dualsense
<template_type> <- simple

This is the DualSense for the PS5 using the Simple RetroDECK Template.

.vdf Data Mangement

The following should be empty as it is not relevant to the use case of RetroDECK. Neither should the creator be shown as that hardlinks to the real SteamID of the person that makes the changes.

"creator"       ""
"progenitor"        ""
"url"       ""
"export_type"       ""

Example:

"controller_mappings"
{
"version"       "3"
"revision"      "73"
"title"     "RetroDECK: Steam Controller - Gordon v.1b"
"description"       "RetroDECK: Steam Controller - Gordon v.1b"
"creator"       ""
"progenitor"        ""
"url"       ""
"export_type"       ""
"controller_type"       "controller_steamcontroller_gordon"
"controller_caps"       "2179063"
"major_revision"        "1"
"minor_revision"        "0"
"Timestamp"     "-596696880"
"actions"
{ 

Versioning and Template Naming

Inside the config you want to manipulate the following fields

"title"     "RetroDECK: DualSense v.1b" <- The name shows the version number
"description"       "RetroDECK: PS5 - DualSense v.1" <- Copy from Name
"major_revision"        "1" <- Should correspond to the major version of the template
"minor_revision"        "0" <- Should correspond to the minor version of the template

What constitutes a new major version?

  • Adding new menus or submenus
  • Major function changes
  • Adding new functions

What constitutes a new minor version?

  • Bugfixes
  • Minor tweaks
  • Icon Fixes
  • Moving buttons around.

Examples

2.0

We add a new submenu to the RetroDECK: DualSense template.

"title"     "RetroDECK: DualSense v.2b" <- The name shows the version number
"description"       "RetroDECK: PS5 - DualSense v.2" <- Copy from Name
"major_revision"        "2" <- Should correspond to the major version of the template
"minor_revision"        "0" <- Should correspond to the minor version of the template

2.1 with a bugfix

"title"     "RetroDECK: DualSense v.2.1b" <- The name shows the version number
"description"       "RetroDECK: PS5 - DualSense v.2.1" <- Copy from Name
"major_revision"        "2" <- Should correspond to the major version of the template
"minor_revision"        "1" <- Should correspond to the minor version of the template

3.0

"title"     "RetroDECK: DualSense v.3b" <- The name shows the version number
"description"       "RetroDECK: PS5 - DualSense v.3b" <- Copy from Name
"major_revision"        "3" <- Should correspond to the major version of the template
"minor_revision"        "0" <- Should correspond to the minor version of the template

Steam Deck Example

The Steam Deck is so far the only device that ships with two different templates:

"title"     "RetroDECK: Steam Deck - Neptune v.1.1b FULL"
"description"       "RetroDECK: Steam Deck - Neptune v.1.1b FULL"

"title"     "RetroDECK: Steam Deck - Neptune v.1b SIMPLE"
"description"       "RetroDECK: Steam Deck - Neptune v.1b SIMPLE"

We add the template type by the end of the title and description.

FAQ

What Controllers does Steam Input Support?

Manufacturer System Controller .vdf file RetroDECK Support controller_type Comment
3rd Party / Generic - Multiple controller_generic.vdf Yes controller_generic
ASUS - ROG Ally controller_rog_ally.vdf No controller_rog_ally
Android Cellphones / Tables Touchscreen controller_android.vdf No controller_android
Apple Cellphones / Tables Touchscreen controller_apple.vdf No controller_apple
Generic Mobile Cellphones / Tables Touchscreen controller_mobile_touch.vdf No controller_mobile_touch
Hori - Wireless HORIPAD for Steam controller_hori_steam.vdf No controller_hori_steam
Lenovo Lenovo Legion Go S Lenovo Legion Go S Controller controller_legion_go_s.vdf No controller_legion_go_s
Microsoft Xbox 360 Xbox 360 Controller controller_xbox360.vdf Yes controller_xbox360
Microsoft Xbox One Xbox One Controller controller_xboxone.vdf Yes controller_xboxone
Microsoft Xbox One Xbox Series X Controller controller_xboxone.vdf Yes controller_xboxone
Microsoft Xbox Series X Xbox Elite Controller controller_xboxelite.vdf No controller_xboxelite
Nintendo Nintendo Switch Nintendo Switch Pro controller_switch_pro.vdf Yes controller_switch_pro
Nintendo Nintendo Switch Switch Joycons controller_switch_joycon_left.vdf and controller_switch_joycon_right.vdf No controller_switch_joycon_left and controller_switch_joycon_right
Sony PlayStation 3 DualShock 3 controller_ps3.vdf Yes controller_ps3
Sony PlayStation 4 DualShock 4 controller_ps4.vdf Yes controller_ps4
Sony PlayStation 5 DualSense controller_ps5.vdf Yes controller_ps5
Sony PlayStation 5 DualSense Edge controller_ps5_edge.vdf Yes controller_ps5_edge
Valve Steam Machine 2015 Steam Controller (Headcrab) controller_steamcontroller_headcrab.vdf No controller_steamcontroller_headcrab Prototype of Gordon
Valve Steam Machine 2015 Steam Controller (Gordon) controller_steamcontroller_gordon.vdf Yes controller_steamcontroller_gordon Release version
Valve Steam Machine 2026 Steam Controller (Triton) controller_triton.vdf No controller_triton
Valve Steam Deck Steam Deck Controller controller_neptune.vdf Yes controller_neptune

controller_triton

How does RetroDECK Inject the Templates and Custom Icons?

If the user chooses to install the Steam Input Templates for RetroDECK:

  • Templates are injected into: ~/.steam/steam/controller_base/templates/
  • Icons are injected into: ~/.steam/steam/tenfoot/resource/images/library/controller/binding_icons/

What Happens when you enable a Template from Steam?

When a template is selected from the Template Menu in Steam, it is copied from ~/.steam/steam/controller_base/templates/ to ~/.steam/steam/steamapps/common/Steam Controller Configs/<AppID>/config/retrodeck/ with the same name.

What happens when I make changes to a template?

If the user or developer makes changes to the template via the Steam Input GUI, a new template .vdf file is created in ~/.steam/steam/steamapps/common/Steam Controller Configs/<AppID>/config/retrodeck/.

The name is based on the device used.

Example:

If you are editing the RetroDECK Steam Deck template, a new template with the edits will be called controller_neptune.vdf.