Description
current state of this issue tracker; will write a comment in this issue when these tasks are done:
- going through all open issues
- re-order/re-categorize listed issues
- look through proposals
- point out root issues identified in certain issues
joypad database
- Godot's state: https://github.com/godotengine/godot/blob/master/core/input/gamecontrollerdb.txt
- plus Godot's overwrite: https://github.com/godotengine/godot/blob/master/core/input/godotcontrollerdb.txt
- source we copy from: https://github.com/mdqinc/SDL_GameControllerDB
- notes regarding GUID: they are unique per joypad, and even for the same joypad, it can be a different GUID depending on
- firmware/driver version
- API (some platforms have multiple APIs)
about drivers
- Linux
- try
xpadneo-dkms-git
instead ofxone
, as the latter seems to have issues
- try
in general
- about joypads: https://wiki.archlinux.org/title/Gamepad
Testing your joypad:
- web: https://hardwaretester.com/gamepad
- android: https://play.google.com/store/apps/details?id=uk.co.powgames.gamecondiag
- this is just a random example, which has not been tested or verified in any way
- Godot: https://github.com/godotengine/godot-demo-projects/tree/master/misc/joypads
- testing different mapping: https://docs.godotengine.org/en/stable/tutorials/inputs/controllers_gamepads_joysticks.html#my-controller-has-incorrectly-mapped-buttons-or-axes
- create bindings yourself using https://generalarcade.com/gamepadtool/
- you can use
evtest
/evemu-record
to test the keycode mapping of the controller on Linux
Legend for hardwaretester.com
- Axis
- 9: is the "Hat Switch" axis which encodes the D-pad state as a clockwise rotational value from 0 (north) to 7 (northwest). When the D-pad is in its neutral state it sends an out-of-bounds value. This is expected for HID gamepads without a mapping function. [source]
big/relevant changes through PRs
- Use SDL for joypad input on Linux #87925
- SDL can also be used for other platforms than Linux
- state: requires further refinement; make a static build of SDL and include that; SDL 3 was released
- Improve gamepad support on Linux #95486
- state: ??
- [Input] Get mapped joy events for joypad #100791
- allows the developer to check what the joypad can actually do w/o requiring the player to press every button…
- state: not convinced
- related discussion: testing for other joypad features, such as gyro, acceleration, touchpad, etc.: [macOS/iOS] Controller motion, adaptive triggers and touchpad support. #88590 (comment)
- Expand the range of gamepad button keycodes to be consistent with SDL #95698
- state: review required
- Add iOS virtual controller support #97530
- state: platform-independent alternative desired
- Re-add and improve methods to get the name of gamepad inputs #89193
- allows identifiying joypads of well-known brands; and return button/axis names depending on said brand
- state: ??
- [macOS/iOS] Controller motion, adaptive triggers and touchpad support. #88590
- state: review required
- Add support for disabling gamepad inputs in the Input class #105513
- state: approval required
- Implement export/import functionality for custom input actions #84902
- state: review required
big/relevant feature proposals/discussions
- Add virtual joypad buttons for semantic "yes"/"no" #103744
- VKB-Sim T-Rudder not recognized by Godot #82136
- using "other devices" (which are e.g. only rudders) as joypads (on Windows)
- Add convenient function to ignore controller input godot-proposals#12259
- Allow to disable joypad support godot-proposals#8391
- Add support for controller-based motion controls (gyroscope, accelerometer, …) godot-proposals#2829
- Make gamepads send echo events for UI navigation purposes godot-proposals#11199
- Add
InputEventJoypadHat
godot-proposals#9850 for flight sticks - Allow creation of arbitrary joypads godot-proposals#7071
- Add a way to get source device type from
InputEventAction
godot-proposals#3836 - InputEvent's device id is always 0 #23439
- most of it works as intended, except for
Also tried with 2 keyboards, still 0.
- most of it works as intended, except for
Problem to solve: Improved Multiplayer support
proposals w/o PR
- Add an
InputHandler
abstract/virtual class to allow for multiple input drivers godot-proposals#9064 - Dealing with local multiplayer input mapping godot-proposals#10887
- Improve setting inputs for local multiplayer games godot-proposals#3555; and related
approaches/PRs
- Add
device
parameter to input action methods #97717- state: trying to find a better way to handle device IDs
- Introduce
Window
option to contain multipleViewports
with a focusedControl
#89772- supersedes Allow multiple
SubViewports
within aWindow
to have a focusedControl
#79480:Unfortunately the encountered edge cases became so complex
- state: ??
- supersedes Allow multiple
- Support Input and UI for multiple players #102412
- proposal: Improve local multiplayer support by tracking
InputEvent
s and UI focus per player godot-proposals#10070 - state: discussion ongoing (April 2025)
- proposal: Improve local multiplayer support by tracking
Design/Root Issues
- connection issues
- driver calls can hang main thread: Godot hangs when there is a change to USB devices #105271 (comment)
- bluetooth:
- device is mapped twice
- Xbox bluetooth controller detected as 2 devices, triggering 2 events instead of 1 #76724 which is not fixed
- Gamepad being reported twice on Linux #90795, which has a fixing PR
- PS4 controller connected makes a unusable duplicate index on Linux #50273, which has a fixing PR
- button binding database: heavy reliance on manual updates
- Amkette Evo Gamepad Pro 2 controller for android is reporting wrong values for axis #38048
- Godot does not recognize all buttons of a Nintendo Switch Joycon #78805
- reproducible in Godot: 3.5.2, 4.0.3, 4.1 rc, 4.2.1, 4.3
- not reproducible in Godot: 3.2.3
- device ID
- Setting an InputEvent device to 'all devices' sets it to -1, overlapping with DEVICE_ID_EMULATION #105458
- see also
Improved Multiplayer support
- device names: see also Re-add and improve methods to get the name of gamepad inputs #89193
- see
deadzone issues
andaxis issues
, plus- Create configurable Joypad axis dead zones godot-proposals#3709 (comment)
Also, it seems like the current system kind of leads to some sort of confusion. On the one hand, the deadzone is used as a way to filter out garbage events sent by your OS (for joysticks), but on the other hand it is used as a trigger value for boolean (pressed/not pressed) actions.
- Create configurable Joypad axis dead zones godot-proposals#3709 (comment)
- event processing
- Dance pad buttons detected as Joypad D-pad prevent left+right and up+down #99513
- reproducible in Godot: 4.2.2, 4.3, but probably all Godot versions
- a
joy_hat
event, which are hardcoded to map to the dpad, generates 2 button events [source]. A press in one direction, clears the direction value into the other direction [source]. - solution: The best option might be to not automatically release the opposite button [source]
- Button Shortcut does not trigger if set to InputEventAction and the action is a Joypad Axis or anything Mouse related. #90516
- reproducible in Godot: 4.2.1
- Joystick Motion not triggering Pressed signal on Button when assigned via Shortcut #99331
- assumed duplicate of Button Shortcut does not trigger if set to InputEventAction and the action is a Joypad Axis or anything Mouse related. #90516
- when using shortcuts, the button will not trigger it's pressed signal
- note:
InputEventJoypadMotion is excluded from shortcut processing […]. I tried adding JoypadMotion to that list, similar to other event types. It did make it possible to trigger shortcuts with it, but the shortcuts fired every time the joypad motion event was received, not just once.
[source] - reproducible in Godot: 4.3
- Dance pad buttons detected as Joypad D-pad prevent left+right and up+down #99513
Discussions
- _gui_input is not propagated to parent for keyboard and joy inputs #98682
- When multiple controller or other Input devices are mapped to the same InputMap action, the action is "eaten" or not consistently triggered #86439
- reproducible in Godot: 3.5.3, 4.2.1, 4.3. Dev1
- Default project misses joy device 0 in InputMap for ui_accept #75225
Needs testing (to narrow down the issue or because too much changed since last test)
- Vibration not working with Google Stadia controller #94265
- reproducible in Godot: 4.2.2
- joypads: Google Stadia via Bluetooth
- platforms: Ubuntu 22.04.4 LTS (Wayland)
- Plugging in Arduino Joystick causes error #82080
- reproducible in Godot: 4.1.1
- platforms: Windows
- Gamepad face buttons are not recognized correctly #95582
- platforms: macOS
- Second gamepad stops working after first is disconnected #84737
- Home button on Xbox controller is not recognized #81454
- sounds like binding issue, but author needs to test and provide feedback
- Controller joystick not working correctly #87724
- Inputs randomly ignored if controller is connected to computer #62598
Issues
documentation
- Input.get_connected_joypads() joystick order isn't consistent. #51773
- Bug with is_action_just_pressed or _unhandled_input #95162
- Controller vibration not working in HTML5 #96985
- joypad for web does not implement
joypad_vibration_start
andjoypad_vibration_end
, this needs to be documented here
- joypad for web does not implement
- _UnhandledInput @event.IsActionPressed() is not capturing continuous input #93425
The concept of repeating inputs typically only applies to keyboard keys
- Control not grabbing focus when last input from a gamepad #76696
- Mouse & Joystick input not clamping correctly #80534
connection issues
- No input detected from PS4 controller when connected wirelessly #101382
- reproduction steps: connect wirelessly
- reproducible in Godot: v4.4.dev7, v4.4.beta1
- Input.joy_connection_changed not emitted with DS5/PS5 controller #96020
- reproducible in Godot: 4.3
- on platforms: Windows 11, Ubuntu 24
- joypads: DS5/PS5 controller
- Input.joy_connection_changed bug on disconnect joypad. #97539
- reproducible in Godot: 4.3
- on platforms: Windows 10
- Steam controller not detected #43686
- reproducible in Godot: 3.1.2, 3.2, 3.2.3
- on platforms: Linux, Windows 10
- SteamInput can fail on Windows #98208
- reproducible in Godot: 4.3
- on platforms: Windows 10
- related to / duplicate of Steam controller not detected #43686
axis issues
- Joystick Navigation broken for OptionButton #35751
- reproducible in Godot: v3.2, 3.2.4 beta4, 3.3.4
- on platforms: Ubuntu 18.04.3
- GUI Button Navigation Bluetooth Gamepad Joystick Repeat #82394
- NOTE:
was being caused by having Steam running in the background
- NOTE:
-
Input.get_action_strength()
doesn't return clean vectors of length 1.0 #72934- reproducible in Godot: 4.0.rc1
- not reproducible in Godot: Godot4 Beta16
- discussion required:
Input.get_action_strength()
doesn't return clean vectors of length 1.0 #72934 (comment)
action issues: where all of them might have the same root cause
- Action strength of analog input is affected by digital input #105209
- reproducible in Godot: 4.4.1
- PS4/Dual Shock 4 controller analogue input causes actions to ignore other connected controllers' analogue input events #86272
- related to Action strength of analog input is affected by digital input #105209
- reproducible in Godot: 4.2.1
- Analog action deadzones interfere with key-based actions strength #93396
- reproducible in Godot: 4.2 and onward
- not reproducible in Godot: 4.1.4 or earlier
- Input.get_vector() incorrectly uses joypad axis when using keyboard #55264
- reproducible in Godot: 3.4, 4.0
- Input.get_vector() : When moving with keyboard, vector could interfere by joystick analog axis less than deadzone. #90515
- reproducible in Godot: 4.2.1
- Input
is_action_just_pressed()
is sometimes triggered twice on joypad X axis #72737- reproducible in Godot: 3.5, 3.5.1, 3.5.2, 4.0.beta17, 4.0.3, 4.2.1, 4.3, 4.4
- is_action_released triggers both left and right on gamepad #75633
- reproducible in Godot: 4.0.1
- related to / duplicate of
InputMap issues
- event.is_action_pressed with nonexistent InputMap action disrupts other actions #43390
- reproducible in Godot: 3.2.3
- Joypads connected mid-game need a scene change to start working #80191
- reproducible in Godot: 4.1.1
- Input map action with two exact events in the project settings will have one event missing #87707
- it's more of a design issue than a bug with tangible impact
Deadzone issues
- Joypad joystick input sensitivity regression (3.2.4 beta 2) #43674
- reproducible in Godot: 3.2.4 beta 2
- Joystick: small changes near zero trigger repeated action release events #103318
- reproducible in Godot: 4.3, 4.4 beta 1
- on platforms: Windows 10
- Analog Stick Won't Work With UI Elements Unless Deadzone is >= 0.5 #58885
- reproducible in Godot: 3.3.4, 3.4.3
UI navigation issues
- Tree Node Focus Misinterprets Joystick Navigation #105361
- reproducible in Godot: 4.4, 4.4.1, 4.5.dev2
- state: needs testing
3rd party issues
- A D-Pad button presses two buttons for Gamecube controllers / joysticks and Mayflash adaptors #21550
- reproducible in Godot: 3.0.6, ??
- state: firmware issues
- Nintendo Switch Pro Controller USB inputs are erratic w/ Steam #47874
- reproducible in Godot: 3.3 rc8, 3.3, 4.2, 4.3
- NOTE: I recall reading sth. about Nintendo (Switch Pro) controllers spamming inputs everywhere and that SDL has a couple hundred lines of custom code to counter this
- Nintendo Switch Pro Controller doesn't work #81191
- reproducible in Godot: 3.5.2, 4.2.dev3
- related to / duplicate of Nintendo Switch Pro Controller USB inputs are erratic w/ Steam #47874
- comments are all over the place. while some document which OS they tested on, they did not necessarily state if they used a browser or desktop (browsers work completely differently)
- Input class not handling Switch Pro Controller joystick axis properly #37675
- related to / duplicate of Nintendo Switch Pro Controller USB inputs are erratic w/ Steam #47874
- reproducible in Godot: 3.2.1
Other
- Games receive joypad input even if the game window is not focused #16832
- can be manually fixed once Add support for disabling gamepad inputs in the Input class #105513 is merged
Platform-specific issues
Linux
connection issues
- Gamepad being reported twice on Linux #90795
- fixed by: Use SDL for joypad input on Linux #87925
- PS4 controller connected makes a unusable duplicate index on Linux #50273
- related to / duplicate of Gamepad being reported twice on Linux #90795
- fixed in Godot 3 by [3.x] Improve validation of gamepads on Linux #67414
- state: requires more refinement
- fixed in Godot 4 by Use SDL for joypad input on Linux #87925
- Controller input doesn't work on Manjaro Linux #45174
- reproducible in Godot: 3.2.2, 3.2.3, 3.4.4, 3.5.1, 3.5.2, or 4.0.0
- not reproducible in Godot: 3.3.3
- needs testing
bindings
- Gamepad bindings are off on Linux with "Generic X-Box pad" controller #101215
- reproducible in Godot: 4.4
- fixed by: Improve gamepad support on Linux #95486
- XBOX 360 Controller Input Buttons L2 & R2 not working (GODOT 3.4.4 linux) #62204
- reproducible in Godot: 3.4.4
- potentially fixed by: Improve gamepad support on Linux #95486
- right side joystick inputs dont work as expected on linux #48976
- reproducible in Godot: 3.3.1
- related to / duplicate of: XBOX 360 Controller Input Buttons L2 & R2 not working (GODOT 3.4.4 linux) #62204
- DragonRise controller right axis incorrect #36876
- reproducible in all Godot versions, since the mapping was always incorrect and the support was dropped
- potentially fixed by: Improve gamepad support on Linux #95486
- Xbox One Gamepad Incorrect Mapping on Linux using xone driver #65308
- reproducible in Godot: 3.5, 3.5.1, 4.0.alpha15
- though it seems to work when using
xpadneo-dkms-git
driver instead ofxone
… - it also works when using Steam, judging from this comment, I reckon Steam has a list of "GUID aliases" and fallback to XBox 360. The last GUID, "050000005e0400008e02000030110000" (XBox 360), is at the moment the only one in the SDL joypad mapping database
- probably fixed by Use SDL for joypad input on Linux #87925
events
- 2 active directions when controller D-Pad quickly changes direction #42200
- reproducible in Godot: 3.2.2 and onward
- Input events are duplicated for D-pad buttons on Linux #66878
- reproducible in Godot: 3.5.1 and onward
- possibly a duplicate of 2 active directions when controller D-Pad quickly changes direction #42200
- My gamepad d-pad is executing is_action_just_pressed twice #45443
- reproducible in Godot: 3.2.3, 3.4, 3.6 beta 3 and 4, 4.3
- related to / duplicate of: Input events are duplicated for D-pad buttons on Linux #66878
- possibly related to Input
is_action_just_pressed()
is sometimes triggered twice on joypad X axis #72737
- Steam Controller is only partially working #66502
- reproducible in Godot: 3.5, 3.5.1, 4.2.1
Chrome OS only
- Gamepad Inputs on Chromebook Linux #103246
- reproducible in Godot: 4.3
Windows
missing implementation
- Vibration not working on 'Nanco PS4 Revolution Pro Controller' #89136
- NOTE: afaict, vibration is not implemented for DirectInput devices
connection issues
- Disconnect of Bluetooth Gamepads not properly recognised, if there is also an XInput device connected #102942
- description: signal
Input.joy_connection_changed
is not emitted, if bluetooth device is disconnected- reproduction steps: connect wired device, connect bluetooth device, diconnect bluetooth device
- reproducible in Godot: v4.3.stable.steam, 4.2, 4.4 beta 4
- description: signal
- Godot slow to open, slow to edit, slow to launch simple game [Windows, caused by specific USB peripherals] #20566
- reproducible in Godot since Godot 3
- Godot hangs when there is a change to USB devices #105271
- reproducible in Godot: 4.3.*, 4.4.1
- possible duplicate of Godot slow to open, slow to edit, slow to launch simple game [Windows, caused by specific USB peripherals] #20566
- Xbox 1708 Controller connected over Bluetooth is mapped to 2 input devices #102703
- reproducible in Godot: 3.6, 4.3, v4.4.beta3
- Xbox controller inputs not detected in editor in 4.3 due to Steam Input injection #95671
- requirements: Steam Input
- reproducible in Godot: 4.3
- not reproducible in Godot: 4.2
- Inputs randomly ignored if controller is connected to computer #62598
- reproducible in Godot: 3.4
binding issues
- Xbox Wireless Controller over bluetooth axis mixed up #87112
- potentially fixed by: Improve gamepad support on Linux #95486
- Godot does not detect rear analog triggers on the stadia controller. #94585
- reproducible in Godot: 3.6.rc1, v4.3.beta3, v4.4.dev2
3rd party issues
- Missing mapping for PS4 touchpad button and possibly others like XboxOne elite paddles #55448
- reproducible in all Godot versions
- root issue: touchpad and paddles cannot be supported using XInput on Windows [source]
macOS
connection issues
- No gamepads detected on macOS since 4.3 #102927
- reproducible in Godot: 4.3, 4.4-beta3
- not reproducible in Godot: 4.2
- Nintendo Switch Pro Controller not working on macOS #44840
- reproducible in Godot: 3.2.3, 3.4, 3.4.2, 4.0, 4.2.1
- apparently fixed with Godot 4.3 for bluetooth, wired is broken, see No gamepads detected on macOS since 4.3 #102927
- DualShock 4 controller not properly supported on macOS / Apple M1 #43653
- reproducible in Godot: 3.2.3, 3.2.4 RC5
- issue with Rosetta??
- Xbox One Controller not detected by Godot Engine macOS #53329
- reproducible in Godot: 3.3.3 - 3.4.beta
- notes:
- [Input] Godot not recognizing BLE gamepad Radiomaster TX12 MKII #102779
- reproducible in Godot: 4.3
- not reproducible in Godot: 4.2.2
Android
connection issues
- Gamepad support: Device 0 already taken by fingerprint reader on Android #47656
- reproducible in Godot: 3.2.3, 3.5
- state: fingerprint sensors (e.g. "devices" called "uinput-fpc", "uinput-goodix", "uinput-synaptics", "uinput-elan", "uinput-vfs", "uinput-atrus", etc.) are identified as joypads by Godot. The string parts after "-" are the company names.
binding issues
- Xbox One/Series gamepad "View" button is not detected on android 12+ #67920
- reproducible in Godot: 3.5.1, 3.6beta5, 4.0, 4.2 beta1,
- not reproducible in Godot: 3.3.3
- confirmed Android versions: 12, 13
- Android does not read the horizontal axis of the right analog stick #67127
- reproducible in Godot: 3.5.1.rc1
- confirmed Android versions: 7
- works on Android versions: 12
- needs testing
- Xbox controller L2 and R2 inputs swapped on Android #56181
- reproducible in Godot: 3.4.2, 3.6
- PS5/PS4 button indexes not handled properly on Android #105956
- reproducible in Godot: 4.4, 4.4.1
Android editor
- Android Editor freezes when trying to use a virtual joystick addon #93667
- reproducible in Godot: 4.2.2
- needs testing
- Using the view joystick in the Android editor causes jitter #96430
- reproducible in Godot: 4.3
Web
3rd party
- [Gamepad API] Ipega PG-9118 dpads are not working with bluetooth connection #45734
- platforms: Windows 10
- browsers: Firefox, Google Chrome
- reproducible in Godot: 3.2.4 (probably)
- state: no further response from Google, they need to
add a mapping function for this gamepad
; Firefox could not be contacted due to technical issues
connection issues
- Xbox 360 Controller not recognized in Firefox (Mac) #32831
- reproducible in Godot: 3.1.1
- affected platforms: Firefox
- not affected platforms: Chromium, Chrome
OpenXR
- OpenXR: Controller tracking fails sometimes when
pose
is set todefault
#69937- reproducible in Godot: 4.0.beta
- Multiple OpenXR action sets in the same map causes bindings to not function properly #99892
- reproducible in Godot: 4.3
HOTAS
on Linux
- joystick: initial state of throttle input is not detected #105676
- reproducible in Godot: 4.5.dev.custom_build, but I reckon all versions are affected
- x52 pro HOTAS has duplicated button bindings #60862
- reproducible in Godot: 3.3, 3.4.4
on Windows
- TWCS Throttle not detected as a joypad #84770
- fixed by Support controllers reported as Flight device types by DirectInput #84772
- state: review required
- fixed by Support controllers reported as Flight device types by DirectInput #84772
- HOTAS Problem (some axes and buttons not recognized) and godot closing on remove joy mapping (Thrustmaster TWCS Trottle) #65330
- reproducible in Godot: 3.5, 4.0 alpha 15
- Hats on HOTAS are mapped as d-pad #83322
- reproducible in Godot: 4.2.beta
Godot 3 only
- InputMap "ui_down" + Left Stick gamepad + ItemList - handled as "ui_up" #59823
- reproducible in Godot: 3.5 b2, 3.5.1
- [3.x] When a gamepad is disconnected, input actions are left active #105047
- reproducible in Godot: 3.6
Ignore List
… because they have been reported too many times, or stale discussion
Metadata
Metadata
Assignees
Type
Projects
Status