universal_gamepad
Cross-platform Flutter plugin providing unified gamepad input (connect/disconnect, buttons, axes, triggers).
1.5.8
7.2K downloads/mo
#3383 most downloaded on pub.dev
edde746/universal_gamepad
What this package is like to depend on
Last release 1 months ago
07 Jul 2026
Ships fairly regularly
a new release about every 3 weeks
Rarely documented
notes for 3 of 21 stable releases
Nothing withdrawn
no release was ever pulled
6 months old
21 releases · first in 2026
21 releases in the last 12 months
see the full history below
Release timeline
21 releases · Feb 2026 to Jul 2026Releases
latest 21-
1.5.807 Jul 2026Release notes
Open source →- Web: fix broken web builds — the plugin's
WebGamepadclass was not reachable from the entry point declared inpubspec.yaml, soflutter build webfailed in consuming apps. The web entry point is nowuniversal_gamepad_web.dart. - Windows:
resume()now re-enumerates gamepads that stayed connected duringpause()(previously they were never re-detected until physically re-plugged). - Windows: fix a rare wedge where events sent before the window handle was captured were queued but never flushed.
- Android: holding a button no longer emits repeated
pressedevents (auto-repeat key events are filtered). - Android: process batched historical motion samples and apply the device-reported flat region (deadzone) to stick axes, per the Android game-controller guidance; trigger press threshold unified to 0.5 to match other platforms.
- Android: input events are no longer emitted for devices that fail the gamepad check; disconnect events now carry the real device name/vendor/product.
- Linux: Xbox-family controllers driven by
xpadno longer report the X and Y face buttons swapped (xpad maps them by label; PlayStation and spec-compliant drivers by location — detected via the sysfs driver link). - Linux: fix duplicate connect events when the Dart side subscribes right after startup, and stop invoking the engine callback while holding an internal lock.
- iOS: guard against duplicate connect notifications (matching macOS behavior).
- iOS/macOS: gamepad names now use the same precedence on both platforms (
vendorName, thenproductCategory); events already on the main thread are delivered without an extra runloop hop and can no longer hit a cancelled sink. - Removed the unconditional
dart:ioimport from the shared Dart code. - Podspec versions now track the package version.
- iOS/macOS: add Swift Package Manager support while retaining CocoaPods compatibility.
Release notes
Open source →- Web: fix broken web builds — the plugin's
WebGamepadclass was not reachable from the entry point declared inpubspec.yaml, soflutter build webfailed in consuming apps. The web entry point is nowuniversal_gamepad_web.dart. - Windows:
resume()now re-enumerates gamepads that stayed connected duringpause()(previously they were never re-detected until physically re-plugged). - Windows: fix a rare wedge where events sent before the window handle was captured were queued but never flushed.
- Android: holding a button no longer emits repeated
pressedevents (auto-repeat key events are filtered). - Android: process batched historical motion samples and apply the device-reported flat region (deadzone) to stick axes, per the Android game-controller guidance; trigger press threshold unified to 0.5 to match other platforms.
- Android: input events are no longer emitted for devices that fail the gamepad check; disconnect events now carry the real device name/vendor/product.
- Linux: Xbox-family controllers driven by
xpadno longer report the X and Y face buttons swapped (xpad maps them by label; PlayStation and spec-compliant drivers by location — detected via the sysfs driver link). - Linux: fix duplicate connect events when the Dart side subscribes right after startup, and stop invoking the engine callback while holding an internal lock.
- iOS: guard against duplicate connect notifications (matching macOS behavior).
- iOS/macOS: gamepad names now use the same precedence on both platforms (
vendorName, thenproductCategory); events already on the main thread are delivered without an extra runloop hop and can no longer hit a cancelled sink. - Removed the unconditional
dart:ioimport from the shared Dart code. - Podspec versions now track the package version.
- Web: fix broken web builds — the plugin's
-
1.5.721 May 2026Release notes
Open source →- Fix Linux gamepad reconnect detection after controller sleep or disconnect.
-
1.5.619 May 2026Release notes
Open source →- Add Android support for
pause()andresume()by detaching and reattaching native input listeners.
- Add Android support for
-
1.5.524 Apr 2026Nothing published for this version
-
1.5.409 Mar 2026Nothing published for this version
-
1.5.309 Mar 2026Nothing published for this version
-
1.5.208 Mar 2026Nothing published for this version
-
1.5.107 Mar 2026Nothing published for this version
-
1.5.023 Feb 2026Nothing published for this version
-
1.4.417 Feb 2026Nothing published for this version
-
1.4.317 Feb 2026Nothing published for this version
-
1.4.217 Feb 2026Nothing published for this version
-
1.4.117 Feb 2026Nothing published for this version
-
1.4.017 Feb 2026Nothing published for this version
-
1.3.017 Feb 2026Nothing published for this version
-
1.2.217 Feb 2026Nothing published for this version
-
1.2.117 Feb 2026Nothing published for this version
-
1.2.017 Feb 2026Nothing published for this version
-
1.1.117 Feb 2026Nothing published for this version
-
1.1.008 Feb 2026Nothing published for this version
-
1.0.002 Feb 2026Nothing published for this version