<!--
{
  "availability" : [
    "DriverKit: 19.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "USBDriverKit",
  "identifier" : "/documentation/USBDriverKit",
  "metadataVersion" : "0.1.0",
  "role" : "Framework",
  "symbol" : {
    "kind" : "Framework",
    "modules" : [
      "USBDriverKit"
    ],
    "preciseIdentifier" : "USBDriverKit"
  },
  "title" : "USBDriverKit"
}
-->

# USBDriverKit

Develop drivers for USB-based devices.

## Overview

Use the [`USBDriverKit`](/documentation/USBDriverKit) framework to develop drivers for custom or non-class-compliant USB devices for use with macOS. The objects in this framework serve as providers for your driver. Use them as is to access the device configurations, interfaces, and endpoints of the USB device. Each object provides methods for fetching any needed descriptors from the USB device, and for initiating requests to perform your driver’s custom behaviors.

Develop your driver by subclassing <doc://com.apple.documentation/documentation/DriverKit/IOService> in the <doc://com.apple.documentation/documentation/DriverKit> framework. On macOS, use the <doc://com.apple.documentation/documentation/SystemExtensions> framework to install and upgrade your driver. On iPadOS, the system automatically discovers and upgrades drivers along with their host apps.

> Note:
> USBDriverKit is available on macOS for Intel and Apple Silicon devices, and on iPadOS for devices with an M-series chip.

## Topics

### Essentials

  <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.driverkit.transport.usb>

### Samples

  <doc://com.apple.documentation/documentation/DriverKit/driverkit-sample-code>

### Providers

[`IOUSBHostInterface`](/documentation/USBDriverKit/IOUSBHostInterface)

A provider object that manages interactions with an interface of the USB device.

[`IOUSBHostDevice`](/documentation/USBDriverKit/IOUSBHostDevice)

A provider object that represents the USB device.

### Endpoint Communication

[`IOUSBHostPipe`](/documentation/USBDriverKit/IOUSBHostPipe)

An object you use to transfer data to or from a USB endpoint.

### USB Specifications

[USB Device Descriptors](/documentation/USBDriverKit/usb-device-descriptors)

Determine the capabilities and configuration of a device using descriptors from the USB specification.

[Additional Specifications](/documentation/USBDriverKit/additional-specifications)

Request information from a device and get hardware and timing information.

[Registry Property Names](/documentation/USBDriverKit/registry-property-names)

Search for specific keys in the device registry.

[Utilities](/documentation/USBDriverKit/utilities)

Manipulate bit structures and convert integers between device- and platform-native formats.

### References

[USBDriverKit Enumerations](/documentation/USBDriverKit/usbdriverkit-enumerations)

[USBDriverKit Functions](/documentation/USBDriverKit/usbdriverkit-functions)

[USBDriverKit Data Types](/documentation/USBDriverKit/usbdriverkit-data-types)

[USBDriverKit Macros](/documentation/USBDriverKit/usbdriverkit-macros)



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)
