#joystick #gamepad #controller #platform-agnostic #ux

stick

Platform-agnostic asynchronous gamepad, joystick and flighstick library

23 releases (12 breaking)

0.13.0 Mar 4, 2023
0.12.4 Jan 29, 2022
0.12.2 Aug 3, 2021
0.12.0 Jul 7, 2021
0.3.0 Feb 4, 2018

#158 in Hardware support

Download history 1/week @ 2023-12-11 7/week @ 2023-12-18 4/week @ 2023-12-25 10/week @ 2024-01-08 3/week @ 2024-02-05 4/week @ 2024-02-12 44/week @ 2024-02-19 90/week @ 2024-02-26 90/week @ 2024-03-04 87/week @ 2024-03-11 69/week @ 2024-03-18

340 downloads per month
Used in 10 crates (2 directly)

Apache-2.0 OR MIT OR BSL-1.0

130KB
2.5K SLoC

Stick

Platform-agnostic asynchronous gamepad, joystick and flightstick library

tests Docs crates.io

Stick supports getting controller input from a large variety of gamepads, joysticks, flightsticks, and other controllers. Stick also supports left/right rumble haptic effects.

Why Does Stick Exist?

The main reason is that I hadn't heard of gilrs when I started stick back in 2017 when gilrs was only a year old and had less than 500 all-time downloads. Now, I think there are many other reasons for stick to exist despite gilrs:

  • Executor-agnostic async/.await for gamepads, joysticks, etc (I recommend using the pasts crate for a simple single-threaded executor).
  • Low-level hotplugging support (you assign the gamepad ID's)
  • Meaningful Event Names (ActionA and ActionB instead of South and East)
  • Minimal dependencies
  • Dual licensed with the Boost license (permission to use without attribution in the binary's UI) - making it great for game development.
  • Not game-specific, doesn't depend on a "standard gamepad" model (which doesn't work due to the variety of controllers in existence) - therefore can also be used in robotics, control centers, advanced flight simulations, etc.
  • Support more types of gamepads/joysticks than gilrs, and (WIP) unified support across platforms.

Platform Support

  • Linux
  • Windows

Planned Platform Support

  • MacOS
  • BSD
  • Redox
  • Fuchsia
  • Android
  • iOS
  • Web Assembly
  • Nintendo Switch (And other game consoles)
  • Others

Table of Contents

API

API documentation can be found on docs.rs.

Features

You may enable the following features

  • sdb: Enabled by default, the Stick database controller remappings
  • gcdb: The SDL game controller database remappings

Upgrade

You can use the changelog to facilitate upgrading this crate as a dependency.

License

Licensed under any of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as described above, without any additional terms or conditions.

Help

If you want help using or contributing to this library, feel free to send me an email at aldaronlau@gmail.com.

Dependencies

~200KB