npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@mesmotronic/xpad

v1.1.1

Published

Simplified Gamepad API for Xbox 360 and Xbox One controllers

Downloads

45

Readme

Xpad: Xbox Controller API for JavaScript

Xpad is a wrapper for the JavaScript Gamepad API that makes it easy to use one or more Xbox 360 / One / Series controllers with your app or game, whether you want to implement it as a simple joystick (detect direction from any stick or d-pad, or the press of any button) or want to access data from each stick and button individually.

Made by @mesmotronic

Installation

npm i @mesmotronic/xpad

Example

import { Xpad, XpadButton } from "@memotronic/xpad";

const xpad = new Xpad();

xpad
  .addEventListener(XpadEvent.CONNECT, console.log)
  .addEventListener(XpadEvent.DISCONNECT, console.log)
  .addEventListener(XpadEvent.BUTTON_UP, console.log)
  .addEventListener(XpadEvent.BUTTON_DOWN, console.log)
  .addEventListener(XpadEvent.BUTTON_CHANGE, console.log)
  .addEventListener(XpadEvent.STICK_ACTIVE, console.log)
  .addEventListener(XpadEvent.STICK_INACTIVE, console.log)
  .addEventListener(XpadEvent.STICK_CHANGE, console.log);

function animate() {
  xpad.update();

  const { anyStick, anyButton, buttons } = xpad.state;

  console.log(`Move: ${anyStick.x}, ${anyStick.y}`);
  console.log(`Fire: ${anyButton}`);

  console.log(`A: ${buttons[XpadButton.A]}`);
  console.log(`B: ${buttons[XpadButton.B]}`);
  console.log(`X: ${buttons[XpadButton.X]}`);
  console.log(`Y: ${buttons[XpadButton.Y]}`);

  requestAnimationFrame(animate);
}

animate();

API reference

Xpad

The Xpad class exposes everything you need to interact with your controllers:

| Member | Type | Description | | ---------------- | ----------------- | ---------------------------------------------------- | | inputThreshold | number | Threshold for axis/button activation (default: 0.15) | | index | number | Gamepad index (default: 0) | | connected | boolean | true if the gamepad is connected | | gamepad | Gamepad \| null | The browser Gamepad instance for this Xpad | | state | XpadState | Current state of the Xpad | | update() | void | Updates the state from the current gamepad | | reset() | void | Resets the Xpad state |

To use multiple controllers, specify the gamepad index in the constructor, e.g. new Xpad(0)

XpadState

The XpadState class represents the current state of a controller:

| Member | Type | Description | | ------------- | ------------- | ------------------------------------------------------------------------- | | leftStick | XpadAxes | Left analog stick axes | | rightStick | XpadAxes | Right analog stick axes | | dpad | XpadAxes | D-pad axes | | dpadEnabled | boolean | Whether D-pad input is included in anyStick calculation (default: true) | | buttons | number[] | Array of button states (0 to 1); use XpadButton enum for button indexes | | sticks | XpadStick[] | Array of stick states in leftStick, rightStick, dpad order | | anyStick | XpadAxes | Combined axes from left stick, right stick, and optionally D-pad | | anyButton | number | Highest value of main buttons (A, B, X, Y, LB, RB, LT, RT) | | reset() | void | Resets all axes and buttons to default state |

License

BSD 2-Clause License