Library for accessing gamepads in modern browsers.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Library for accessing gamepads in modern browsers.

  • Works with modern browsers and has mappings to many controllers.
  • Very easy to add mappings to new controllers.
  • Lightweight.
  • Includes settings for deadzone and maximization.
  • Simple event-based system.
  • Includes state change events.
  • Minimal working example provided.
  • Does not depend on any other library.
  • Includes minimized version.

How to use

  • Include the library.
	<script src="gamepad.js"></script>
  • Create an instance of the Gamepad class.
	var gamepad = new Gamepad();
  • Bind to the events
	gamepad.bind(Gamepad.Event.CONNECTED, function(device) {
		// a new gamepad connected

	gamepad.bind(Gamepad.Event.DISCONNECTED, function(device) {
		// gamepad disconnected

	gamepad.bind(Gamepad.Event.UNSUPPORTED, function(device) {
		// an unsupported gamepad connected (add new mapping)

	gamepad.bind(Gamepad.Event.BUTTON_DOWN, function(e) {
		// e.control of gamepad e.gamepad pressed down
	gamepad.bind(Gamepad.Event.BUTTON_UP, function(e) {
		// e.control of gamepad e.gamepad released

	gamepad.bind(Gamepad.Event.AXIS_CHANGED, function(e) {
		// e.axis changed to value e.value for gamepad e.gamepad

	gamepad.bind(Gamepad.Event.TICK, function(gamepads) {
		// gamepads were updated (around 60 times a second)
  • Initilize the gamepads
	if (!gamepad.init()) {
		// Your browser does not support gamepads, get the latest Google Chrome or Firefox
  • Try the working example in index.html for more tips


The library is built using grunt and node.js. Have them installed according to their installation guidelines.

The build sequence consists of the following tasks:

  • 'format', executing js-beautify (according to .jsbeautifyrc) and jshint (according to .jshintrc)
  • 'compile', executing UglifyJS2
  • 'document', using yuidoc

The default grunt task executes them in the given order.