{"id":28757239,"url":"https://github.com/libretro/retroarch-joypad-autoconfig","last_synced_at":"2025-06-17T03:10:14.435Z","repository":{"id":13101520,"uuid":"15782998","full_name":"libretro/retroarch-joypad-autoconfig","owner":"libretro","description":"RetroArch joypad autoconfig files","archived":false,"fork":false,"pushed_at":"2025-05-26T03:13:02.000Z","size":2207,"stargazers_count":310,"open_issues_count":56,"forks_count":377,"subscribers_count":24,"default_branch":"master","last_synced_at":"2025-06-08T17:57:02.373Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/libretro.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2014-01-09T23:37:57.000Z","updated_at":"2025-05-26T03:13:06.000Z","dependencies_parsed_at":"2023-12-11T00:23:05.755Z","dependency_job_id":"ccf8a575-22c9-457f-b043-e150b5992ff2","html_url":"https://github.com/libretro/retroarch-joypad-autoconfig","commit_stats":{"total_commits":1447,"total_committers":301,"mean_commits":4.807308970099668,"dds":0.8044229440221147,"last_synced_commit":"f2123bbeeb7bb139aa34ca59490988de686f9c0b"},"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"purl":"pkg:github/libretro/retroarch-joypad-autoconfig","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libretro%2Fretroarch-joypad-autoconfig","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libretro%2Fretroarch-joypad-autoconfig/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libretro%2Fretroarch-joypad-autoconfig/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libretro%2Fretroarch-joypad-autoconfig/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/libretro","download_url":"https://codeload.github.com/libretro/retroarch-joypad-autoconfig/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/libretro%2Fretroarch-joypad-autoconfig/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260281515,"owners_count":22985633,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-17T03:10:13.753Z","updated_at":"2025-06-17T03:10:14.423Z","avatar_url":"https://github.com/libretro.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Joypad Autoconfig Files\n\nThis repository stores joypad autoconfig files for [RetroArch](https://www.retroarch.com), the reference frontend for the libretro API.\n\nThe autoconfig files included in this repository are used to recognize input devices and automatically setup default mappings between the physical device and the [RetroPad virtual controller](https://docs.libretro.com/development/input-api/#retropad).\n\n## How to create an autoconfig file\n\nIf your input device is not recognized by RetroArch even after updating the controller profiles, then you can generate a new profile for it from RetroArch itself.\n\nYou can find detailed instructions to do this in our [Joypad Auto Configuration](https://docs.libretro.com/guides/controller-autoconfiguration/) guide.\n\nPlease **always run `Settings` -\u003e `Input` -\u003e `RetroPad Binds` -\u003e `Port 1 Controls` -\u003e `Save Controller Profile`** in order to generate correct autoconfig file name, and file content (including `input_device`). Also, only modify existing autoconfig files with data from `Save Controller Profile` generated autoconfig files, with other words, do not autoconfig files for controllers that you don't own.\n\n## Uploading your own autoconfig file\n\nIf you want to share an autoconfig file that is missing in RetroArch, then you can upload it to this repository.\n\nPlease remember that the goal of sharing your autoconfig file is to create a bigger database of default input device mappings that can be used by other people.\n\nIf your mapping is custom-made for your own needs, then it will not be really useful for others.\nIt is better if you share more generic and reusable mappings that can act as a \"default\".\n\n### To upload your autoconfig file follow these steps\n\n#### 1. Checking for duplicates\n\nRetroArch uses three attributes of the input device to identify which autoconfig file to use: **Vendor ID**, **Product ID** and **Device Name**.\nBefore uploading your file, please verify that there is no other autoconfig file matching those same three attributes already.\n\nTo verify, compare the values for `input_vendor_id`, `input_product_id` and `input_device` attributes respectively.\n\n:warning: **Warning:** If another autoconfig file exists including the same Vendor ID, Product ID and input Device Name, then your autoconfig file will cause conflicts.\n\n#### 2. Adding input descriptors\n\nInput descriptors are the **labels** that RetroArch will display in the user interface (UI) to describe buttons and axes of your device.\nIt is recommended to add descriptors so RetroArch can display useful labels in the UI.\n\nInput descriptor attributes are not added by default, you need to manually add the attributes inside the autoconfig file that was generated by RetroArch.\nFor example:\n\n```INI\ninput_b_btn_label = \"Cross\"\ninput_y_btn_label = \"Square\"\ninput_a_btn_label = \"Circle\"\ninput_x_btn_label = \"Triangle\"\n```\n\nYou will find more details about the attribute name syntax in the [Input Descriptors section](#3-input-descriptors) below.\n\n#### 3. Testing your autoconfig file\n\nBefore uploading your autoconfig file please verify that RetroArch is correctly detecting the file and also displaying all the labels for the input device.\nYou can verify this in the `Settings \u003e Input \u003e Port 1 Controls` menu.\n\nThe best way to confirm that everything is working is:\n\n1. Reset controller bindings to the defaults: `Settings \u003e Input \u003e Port 1 Controls \u003e Reset to Default Controls`\n2. Disconnect and reconnect the input device\n3. Check the bindings in `Settings \u003e Input \u003e Port 1 Controls` to confirm that they are correct\n4. If applicable, then also check the menu button binding in `Settings \u003e Input \u003e Hotkeys \u003e Menu (Toggle)`\n\n#### 4. Creating a Pull Request\n\nTo upload your autoconfig file to this repository you must create a [Pull Request](https://en.wikipedia.org/wiki/Distributed_version_control#Pull_requests).\n\nYou can learn how to create a Pull Request in Github in the [official documentation](https://help.github.com/en/articles/creating-new-files).\n\n:warning: **Warning:** Verify that you are creating the autoconfig file in the **correct folder**.\nIt must be the folder with the same name used in the `input_driver` attribute in the autoconfig file.\n\n## File Format\n\nAutoconfig files consist of a list of attributes and their corresponding values using the following syntax:\n\n```INI\nattribute_name = value\n```\n\nAll attribute names in the file use the [snake_case](https://en.wikipedia.org/wiki/Snake_case) naming scheme.\n\n### Attribute Types\n\nThere are three types of attributes for describing an input device.\n\n#### 1. Device Descriptors\n\nThese are attributes that identify the **physical input device** itself.\nThe available attributes are:\n\nAttribute                   | Description\n:---------------------------|:-------------------------------------------------\n`input_driver`              | Driver in-use when the input device was detected\n`input_device`              | Device Name reported by the device\n`input_vendor_id`           | Vendor ID reported by the device\n`input_product_id`          | Product ID reported by the device\n`input_device_display_name` | Friendly display name to show in the user inteface (optional)\n\n#### 2. Button/axes Mappings\n\nThese are attributes that describe the **mappings** between physical buttons/axes and the RetroPad virtual controller.\n\nButton/axes attributes are named following the pattern: `input_` + `button/axis name` + `input_type`.\nThe `input_type` suffix can be either `_axis` for axes or `_btn` for buttons.\nFor example:\n\n```INI\ninput_b_btn = \"0\"\ninput_y_btn = \"1\"\ninput_l_x_plus_axis = \"+0\"\ninput_l_x_minus_axis = \"-0\"\n```\n\nThe RetroPad virtual controller layout is shown below:\n\n![RetroPad Layout](/retropad_layout.png?raw=true)\n\nThe available attributes for input device mapping are:\n\nAttribute               | Description\n:-----------------------|:----------------------------------------------\n`input_b_btn`           | Device button mapped to RetroPad's `B` button\n`input_y_btn`           | Device button mapped to RetroPad's `Y` button\n`input_select_btn`      | Device button mapped to RetroPad's `Select` button\n`input_start_btn`       | Device button mapped to RetroPad's `Start` button\n`input_up_btn`          | Device button mapped to RetroPad's `D-Pad Up` button\n`input_down_btn`        | Device button mapped to RetroPad's `D-Pad Down` button\n`input_left_btn`        | Device button mapped to RetroPad's `D-Pad Left` button\n`input_right_btn`       | Device button mapped to RetroPad's `D-Pad Right` button\n`input_a_btn`           | Device button mapped to RetroPad's `A` button\n`input_x_btn`           | Device button mapped to RetroPad's `X` button\n`input_l_btn`           | Device button mapped to RetroPad's `Left Shoulder` button\n`input_r_btn`           | Device button mapped to RetroPad's `Right Shoulder` button\n`input_l2_btn`          | Device button mapped to RetroPad's `Left Trigger` button\n`input_r2_btn`          | Device button mapped to RetroPad's `Right Trigger` button\n`input_l3_btn`          | Device button mapped to RetroPad's `Left Thumb` button\n`input_r3_btn`          | Device button mapped to RetroPad's `Right Thumb` button\n`input_l_x_plus_axis`   | Device axis mapped to RetroPad's `Left Analog` axis (right)\n`input_l_x_minus_axis`  | Device axis mapped to RetroPad's `Left Analog` axis (left)\n`input_l_y_plus_axis`   | Device axis mapped to RetroPad's `Left Analog` axis (down)\n`input_l_y_minus_axis`  | Device axis mapped to RetroPad's `Left Analog` axis (up)\n`input_r_x_plus_axis`   | Device axis mapped to RetroPad's `Right Analog` axis (right)\n`input_r_x_minus_axis`  | Device axis mapped to RetroPad's `Right Analog` axis (left)\n`input_r_y_plus_axis`   | Device axis mapped to RetroPad's `Right Analog` axis (down)\n`input_r_y_minus_axis`  | Device axis mapped to RetroPad's `Right Analog` axis (up)\n`input_menu_toggle_btn` | Device button mapped to RetroPad's `Menu` button\n\n#### 3. Input Descriptors\n\nThese are attributes that describe the **labels** that RetroArch will display in the user interface to describe buttons and axes of the input device.\nThey should match the labels printed on the physical controller itself.\n\nInput descriptor attributes are named following the pattern: `input name` + `_label`.\nThe `input name` part is exactly the same as defined in the [button/axes mappings section](#2-buttonaxes-mappings), including the `input_` prefix and the `_axis` or `_btn` suffix.\nFor example:\n\n```INI\ninput_l2_btn = \"5\"          \u003c-- Input mapping attribute\ninput_l2_btn_label = \"L2\"   \u003c-- Input descriptor attribute\n```\n\n:warning: **Warning:** It is important that `input name` matches exactly the input name defined in the autoconfig file.\nIf the input you are describing is an axis, then the input descriptor must be for an axis as well.\nFor example:\n\n```INI\ninput_l2_axis = \"+3\"         \u003c-- Input mapping attribute\n\ninput_l2_btn_label = \"L2\"    \u003c-- WRONG descriptor attribute\ninput_l2_axis_label = \"L2\"   \u003c-- CORRECT descriptor attribute\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flibretro%2Fretroarch-joypad-autoconfig","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flibretro%2Fretroarch-joypad-autoconfig","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flibretro%2Fretroarch-joypad-autoconfig/lists"}