Skip to content

Instantly share code, notes, and snippets.

@serious-angel
Last active January 7, 2026 11:27
Show Gist options
  • Select an option

  • Save serious-angel/f13060ba251aee1aeb039b565577e6b9 to your computer and use it in GitHub Desktop.

Select an option

Save serious-angel/f13060ba251aee1aeb039b565577e6b9 to your computer and use it in GitHub Desktop.
Steam Desktop client gamepad support (2025-10-26, 2dcc5aaf7)

While implementing the quick experiment for Steam desktop notification toasts size scaling (i.e. ⁠https://github.com/serious-angel/steam-client-custom-toasts, the source had the following object that may suggest supported devices by Steam, at least, for the current Steam desktop client version, with the Webpack transpiled chunks versioned as 2dcc5aaf7 (2025-10-26):

h = {
  [-1]: "controller_none",
  20: "controller_unknown",
  0: "controller_unknown",
  1: "controller_generic",
  2: "controller_steamcontroller_gordon",
  3: "controller_steamcontroller_unknown",
  4: "controller_steamcontroller_neptune",
  30: "controller_generic",
  31: "controller_xbox360",
  32: "controller_xboxone",
  33: "controller_ps3",
  34: "controller_ps4",
  47: "controller_ps4",
  35: "controller_wii",
  36: "controller_apple",
  37: "controller_android",
  38: "controller_switch_pro",
  42: "controller_switch_pro",
  44: "controller_switch_pro",
  43: "controller_mobile_touch",
  45: "controller_ps5",
  48: "controller_ps5_edge",
  46: "controller_xboxelite",
  49: "controller_hori_steam",
  39: "controller_switch_joycon_left",
  40: "controller_switch_joycon_right",
  41: "controller_switch_joycon_pair",
  131: "controller_unknown",
  400: "controller_unknown",
  800: "controller_unknown",
  101: "controller_legion_go",
  102: "controller_legion_go_s",
  120: "controller_rog_ally",
  130: "controller_zotac_zone",
  100: "controller_steamos_handheld",
  50: "controller_8bitdo"
}

We may also see a narrowing mapper (manually minified):

GetConsolidatedControllerType(e) {
  switch (e) {
    case 31: case 32: case 46:
        return "Xbox";

    case 33: case 34: case 45: case 48:
        return "PlayStation";

    case 39: case 40: case 41: case 38: case 42:
        return "NintendoSwitch";

    case 2: case 3: case 4: case 49: case 101: case 102: case 120: case 130: case 100:
        return "Steam";

    default:
        return "Generic"
  }
}

The actual vendor/product IDs are further in the obfuscated/minified JavaScript of the launcher file we should see in ./steam/steam/.

Related: A list of vendor and product IDs (...for known USB and Bluetooth gamepad devices...)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment