# InputDevice

`import { InputDevice } from "destack:input/binding";`

Input device descriptor.

```ds title="InputDevice"
export struct InputDevice {
    id: string;
    instanceId: string;
    hardwareId: string;
    serialNumber: string;
    locationId: string;
    guid: string;
    name: string;
    transport: string;
    kind: InputDeviceKind;
    vendorId: uint16;
    productId: uint16;
    keyCount: uint16;
    buttonCount: uint16;
    axisCount: uint16;
    capabilities: InputDeviceCapabilities;
    isConnected: boolean;
    isVirtual: boolean;
    isSystem: boolean;
}
```

[language/library/src/input/binding/device.ds:77:114](https://github.com/destack-sh/destack/blob/main/language/library/src/input/binding/device.ds#L77-L114)

## Members

### `id: string`

Stable input device identifier.

### `instanceId: string`

Stable instance identifier for the current connection.

### `hardwareId: string`

Host hardware identifier when available.

### `serialNumber: string`

Host serial number when available.

### `locationId: string`

Host location identifier when available.

### `guid: string`

Gamepad-style GUID when available.

### `name: string`

Host-visible device name.

### `transport: string`

Host transport name when available.

### `kind: InputDeviceKind`

Device kind.

### `vendorId: uint16`

USB or Bluetooth vendor identifier when available.

### `productId: uint16`

USB or Bluetooth product identifier when available.

### `keyCount: uint16`

Logical key count when reported by the host.

### `buttonCount: uint16`

Logical button count when reported by the host.

### `axisCount: uint16`

Logical axis count when reported by the host.

### `capabilities: InputDeviceCapabilities`

Capability flags.

### `isConnected: boolean`

Whether this device is currently connected.

### `isVirtual: boolean`

Whether this device is virtual or emulated.

### `isSystem: boolean`

Whether this device is provided by the system stack.
