Web HID API Playground

Connect and communicate with Human Interface Devices from your browser

🔌 Device Connection

Use requestDevice() with optional filters to select a HID device.

Device Filters

📋 Device Information

No device connected.
Use the connection panel to select a HID device.

📦 HID Collections

Each collection describes a group of related reports with usage page and usage identifiers.

Connect a device to view its HID collections.

📤 Send Reports

📥 Receive Reports

Input reports arrive automatically via the inputreport event.

Waiting for input reports...
No data yet.

📜 Event Log

[--:--:--] Playground initialized. Connect a device to begin.

📖 Usage Page / Usage ID Reference

Usage PageHexDescription
Generic Desktop0x01Mouse, keyboard, joystick, gamepad
Simulation Controls0x02Flight sim, driving sim
VR Controls0x03Head tracker, glove, vest
Sport Controls0x04Baseball bat, golf club
Game Controls0x053D game controller, pinball
Generic Device0x06Battery strength, wireless channel
Keyboard/Keypad0x07Keyboard keys
LED0x08Num Lock, Caps Lock, indicators
Button0x09Button 1-N
Consumer0x0CMedia keys, volume, brightness
Digitizer0x0DPen, touch screen, stylus
Haptics0x0ESimple haptic controller
Lighting/Illumination0x59LED array, lamp
FIDO Alliance0xF1D0FIDO U2F/CTAP authenticator
Vendor-defined0xFF00-0xFFFFVendor-specific usage pages
DeviceVendor IDProduct ID (example)Notes
DualSense (PS5)0x054C0x0CE6Sony. Rumble, LED, touchpad, gyro
DualShock 4 (PS4)0x054C0x09CCSony. Light bar, touchpad
Joy-Con (L)0x057E0x2006Nintendo. HD Rumble, IR, NFC
Joy-Con (R)0x057E0x2007Nintendo. HD Rumble, IR
Pro Controller0x057E0x2009Nintendo Switch Pro
Xbox (BT)0x045E0x0B13Microsoft. Bluetooth mode
Steam Controller0x28DE0x1142Valve. Dual trackpads
Blink(1)0x27B80x01EDThingM. USB notification LED
YubiKey0x10500x0407FIDO U2F security key
Elgato Stream Deck0x0FD90x006015-key LCD macro pad
// Request a device with filters const [device] = await navigator.hid.requestDevice({ filters: [{ vendorId: 0x054C, productId: 0x0CE6 }] }); // Open the device await device.open(); // Send an output report await device.sendReport(0x01, new Uint8Array([0xFF, 0x00])); // Send a feature report await device.sendFeatureReport(0x02, new Uint8Array([0x01])); // Read a feature report const dataView = await device.receiveFeatureReport(0x02); // Listen for input reports device.addEventListener('inputreport', (event) => { const { data, reportId } = event; // data is a DataView }); // Close the device await device.close();