---
title: USBDriverKit
framework: USBDriverKit
role: collection
role_heading: Framework
platforms: [driverkit 19.0+]
path: usbdriverkit
---

# USBDriverKit

Develop drivers for USB-based devices.

## Overview

Overview Use the 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 IOService in the DriverKit framework. On macOS, use the System Extensions 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

- [com.apple.developer.driverkit.transport.usb](bundleresources/entitlements/com.apple.developer.driverkit.transport.usb.md)

### Samples

- [DriverKit sample code](driverkit/driverkit-sample-code.md)

### Providers

- [IOUSBHostInterface](usbdriverkit/iousbhostinterface.md)
- [IOUSBHostDevice](usbdriverkit/iousbhostdevice.md)

### Endpoint Communication

- [IOUSBHostPipe](usbdriverkit/iousbhostpipe.md)

### USB Specifications

- [USB Device Descriptors](usbdriverkit/usb-device-descriptors.md)
- [Additional Specifications](usbdriverkit/additional-specifications.md)
- [Registry Property Names](usbdriverkit/registry-property-names.md)
- [Utilities](usbdriverkit/utilities.md)

### References

- [USBDriverKit Enumerations](usbdriverkit/usbdriverkit-enumerations.md)
- [USBDriverKit Functions](usbdriverkit/usbdriverkit-functions.md)
- [USBDriverKit Data Types](usbdriverkit/usbdriverkit-data-types.md)
- [USBDriverKit Macros](usbdriverkit/usbdriverkit-macros.md)

### Macros

- [IOUSBHOST_PROPERTY_DEPRECATED](usbdriverkit/iousbhost_property_deprecated.md)
- [kUSBHostBillboardDevicePropertyAltModeFailed](usbdriverkit/kusbhostbillboarddevicepropertyaltmodefailed.md)
- [kUSBHostBillboardDevicePropertyAltModePowerFailed](usbdriverkit/kusbhostbillboarddevicepropertyaltmodepowerfailed.md)
- [kUSBHostBillboardDevicePropertyCurrentMode](usbdriverkit/kusbhostbillboarddevicepropertycurrentmode.md)
- [kUSBHostBillboardDevicePropertyModeValueDisplayPort](usbdriverkit/kusbhostbillboarddevicepropertymodevaluedisplayport.md)
- [kUSBHostBillboardDevicePropertyModeValueThunderbolt](usbdriverkit/kusbhostbillboarddevicepropertymodevaluethunderbolt.md)
- [kUSBHostBillboardDevicePropertyModeValueUSB4](usbdriverkit/kusbhostbillboarddevicepropertymodevalueusb4.md)
- [kUSBHostBillboardDevicePropertyPreferredMode](usbdriverkit/kusbhostbillboarddevicepropertypreferredmode.md)
- [kUSBHostBillboardDevicePropertySupportedModes](usbdriverkit/kusbhostbillboarddevicepropertysupportedmodes.md)
- [kUSBHostBillboardDevicePropertyVersion](usbdriverkit/kusbhostbillboarddevicepropertyversion.md)
- [kUSBHostControllerPropertyProtocolRevision](usbdriverkit/kusbhostcontrollerpropertyprotocolrevision.md)
- [kUSBHostDevicePropertyFunction](usbdriverkit/kusbhostdevicepropertyfunction.md)
- [kUSBHostDevicePropertyIdlePolicy](usbdriverkit/kusbhostdevicepropertyidlepolicy.md)
- [kUSBHostDevicePropertyPowerSinkAllocation](usbdriverkit/kusbhostdevicepropertypowersinkallocation.md)
- [kUSBHostDevicePropertyUSB3Preferred](usbdriverkit/kusbhostdevicepropertyusb3preferred.md)
- [kUSBHostDevicePropertyUSB3Required](usbdriverkit/kusbhostdevicepropertyusb3required.md)
- [kUSBHostPortPropertyIOPortServicePath](usbdriverkit/kusbhostportpropertyioportservicepath.md)
- [kUSBHostPortPropertyProtocolCompanionRevision1](usbdriverkit/kusbhostportpropertyprotocolcompanionrevision1.md)
- [kUSBHostPortPropertyProtocolCompanionRevision2](usbdriverkit/kusbhostportpropertyprotocolcompanionrevision2.md)
- [kUSBHostPortPropertyProtocolCompanionRevision3](usbdriverkit/kusbhostportpropertyprotocolcompanionrevision3.md)
- [kUSBHostPortPropertyProtocolRevision1](usbdriverkit/kusbhostportpropertyprotocolrevision1.md)
- [kUSBHostPortPropertyProtocolRevision2](usbdriverkit/kusbhostportpropertyprotocolrevision2.md)
- [kUSBHostPortPropertyProtocolRevision3](usbdriverkit/kusbhostportpropertyprotocolrevision3.md)
- [kUSBHostPortPropertyProtocolRevision4](usbdriverkit/kusbhostportpropertyprotocolrevision4.md)
- [kUSBHostPortPropertyTransportState](usbdriverkit/kusbhostportpropertytransportstate.md)
- [kUSBHostPortPropertyUSB2ExternalRemoteWake](usbdriverkit/kusbhostportpropertyusb2externalremotewake.md)
- [kUSBHostPortPropertyUSB2Repeater](usbdriverkit/kusbhostportpropertyusb2repeater.md)
- [kUSBHostPropertyLinkSpeed](usbdriverkit/kusbhostpropertylinkspeed.md)

### Enumeration Cases

- [kIOUSBLinkSpeed10Gbps](usbdriverkit/kiousblinkspeed10gbps.md)
- [kIOUSBLinkSpeed20Gbps](usbdriverkit/kiousblinkspeed20gbps.md)
- [kIOUSBLinkSpeed40Gbps](usbdriverkit/kiousblinkspeed40gbps.md)
- [kIOUSBLinkSpeed5Gbps](usbdriverkit/kiousblinkspeed5gbps.md)
- [kIOUSBLinkSpeed80Gbps](usbdriverkit/kiousblinkspeed80gbps.md)
- [kIOUSBLinkSpeedFull](usbdriverkit/kiousblinkspeedfull.md)
- [kIOUSBLinkSpeedHigh](usbdriverkit/kiousblinkspeedhigh.md)
- [kIOUSBLinkSpeedLow](usbdriverkit/kiousblinkspeedlow.md)

### Enumerations

- [tIOUSB40LinkStateTimeout](usbdriverkit/tiousb40linkstatetimeout.md)
