---
title: DriverKit
framework: driverkit
role: collection
role_heading: Framework
path: driverkit
---

# DriverKit

Develop device drivers that run in user space.

## Mentioned in

Creating drivers for iPadOS

## Overview

Overview The DriverKit framework defines the fundamental behaviors for device drivers in macOS and iPadOS. The C++ classes of this framework define your driver’s basic structure, and provide support for handling events and allocating memory. This framework also supports appropriate types for examining the numbers, strings, and other types of data in your driver’s I/O registry entry. Other frameworks, such as USBDriverKit, HIDDriverKit, NetworkingDriverKit, PCIDriverKit, SerialDriverKit, and AudioDriverKit, provide the specific behaviors you need to support different types of devices. The drivers you build with DriverKit run in user space, rather than as kernel extensions, which improves system stability and security. You create your driver as an app extension and deliver it inside your existing app. In macOS, use the System Extensions framework to install and upgrade your driver. In iPadOS, the system automatically discovers and upgrades drivers along with their host apps. note: The base DriverKit framework is available in macOS for Apple silicon and Intel-based Mac computers, and in iPadOS for devices with an M-series chip. The availability of family frameworks like USBDriverKit and AudioDriverKit varies by platform.

## Topics

### Essentials

- [Implementing drivers, system extensions, and kexts](kernel/implementing_drivers_system_extensions_and_kexts.md)
- [Creating drivers for iPadOS](driverkit/creating-drivers-for-ipados.md)

### Entitlements

- [Requesting Entitlements for DriverKit Development](driverkit/requesting-entitlements-for-driverkit-development.md)
- [com.apple.developer.driverkit](bundleresources/entitlements/com.apple.developer.driverkit.md)
- [com.apple.developer.driverkit.userclient-access](bundleresources/entitlements/com.apple.developer.driverkit.userclient-access.md)
- [com.apple.developer.driverkit.allow-any-userclient-access](bundleresources/entitlements/com.apple.developer.driverkit.allow-any-userclient-access.md)
- [Communicates with Drivers](bundleresources/entitlements/com.apple.developer.driverkit.communicates-with-drivers.md)
- [DriverKit Allow Third Party User Clients](bundleresources/entitlements/com.apple.developer.driverkit.allow-third-party-userclients.md)

### Samples

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

### Services

- [Creating a Driver Using the DriverKit SDK](driverkit/creating-a-driver-using-the-driverkit-sdk.md)
- [Debugging and testing system extensions](driverkit/debugging-and-testing-system-extensions.md)
- [IOService](driverkit/ioservice.md)

### Event management

- [IODispatchQueue](driverkit/iodispatchqueue.md)
- [IOInterruptDispatchSource](driverkit/iointerruptdispatchsource.md)
- [IOTimerDispatchSource](driverkit/iotimerdispatchsource.md)
- [IODataQueueDispatchSource](driverkit/iodataqueuedispatchsource.md)
- [IODispatchSource](driverkit/iodispatchsource.md)
- [OSAction](driverkit/osaction.md)

### Memory management

- [IOBufferMemoryDescriptor](driverkit/iobuffermemorydescriptor.md)
- [IOMemoryDescriptor](driverkit/iomemorydescriptor.md)
- [IOMemoryMap](driverkit/iomemorymap.md)
- [Memory Utilities](driverkit/memory-utilities.md)

### Registry data types

- [OSArray](driverkit/osarray.md)
- [OSDictionary](driverkit/osdictionary.md)
- [OSBoolean](driverkit/osboolean.md)
- [OSData](driverkit/osdata.md)
- [OSNumber](driverkit/osnumber.md)
- [OSString](driverkit/osstring.md)
- [OSSerialization](driverkit/osserialization.md)
- [OSCollection](driverkit/oscollection.md)
- [OSContainer](driverkit/oscontainer.md)
- [OSObject](driverkit/osobject.md)
- [OSSymbol](driverkit/ossymbol.md)
- [IOFixed](driverkit/iofixed.md)

### External drivers

- [IOUserClient](driverkit/iouserclient.md)
- [IOUserServer](driverkit/iouserserver.md)
- [com.apple.developer.driverkit.userclient-access](bundleresources/entitlements/com.apple.developer.driverkit.userclient-access.md)
- [Communicating between a DriverKit extension and a client app](driverkit/communicating-between-a-driverkit-extension-and-a-client-app.md)

### Runtime support

- [OSDynamicCast](driverkit/osdynamiccast.md)
- [OSRequiredCast](driverkit/osrequiredcast.md)
- [IMPL](driverkit/impl.md)
- [TYPE](driverkit/type.md)
- [QUEUENAME](driverkit/queuename.md)
- [SUPERDISPATCH](driverkit/superdispatch.md)
- [IIG_KERNEL](driverkit/iig_kernel.md)
- [LOCAL](driverkit/local.md)
- [LOCALONLY](driverkit/localonly.md)
- [Error Codes](driverkit/error-codes.md)
- [C++ Runtime Support](driverkit/c-runtime-support.md)

### Classes

- [IOHistogramReporter](driverkit/iohistogramreporter.md)
- [IOReportLegend](driverkit/ioreportlegend.md)
- [IOReporter](driverkit/ioreporter.md)
- [IOServiceStateNotificationDispatchSource](driverkit/ioservicestatenotificationdispatchsource.md)
- [IOSimpleReporter](driverkit/iosimplereporter.md)
- [IOStateReporter](driverkit/iostatereporter.md)
- [OSBundle](driverkit/osbundle.md)
- [OSMappedFile](driverkit/osmappedfile.md)

### Reference

- [DriverKit Structures](driverkit/driverkit-structures.md)
- [DriverKit Enumerations](driverkit/driverkit-enumerations.md)
- [DriverKit Constants](driverkit/driverkit-constants.md)
- [DriverKit Functions](driverkit/driverkit-functions.md)
- [DriverKit Data Types](driverkit/driverkit-data-types.md)
- [DriverKit Namespaces](driverkit/driverkit-namespaces.md)

### Macros

- [Macros](driverkit/driverkit-macros.md)
- [SERIALIZABLE](driverkit/serializable.md)
- [kIOConfigOrderKey](driverkit/kioconfigorderkey.md)
- [kIOPropertyHashTypeKey](driverkit/kiopropertyhashtypekey.md)
- [kIOPropertySHA3256Key](driverkit/kiopropertysha3256key.md)
- [kIOPropertySHA3384Key](driverkit/kiopropertysha3384key.md)
- [kIOPropertySHA3512Key](driverkit/kiopropertysha3512key.md)
- [kIOUserPlatformFunctionHandlerGet](driverkit/kiouserplatformfunctionhandlerget.md)
- [kIOUserResourcesSetPropertyKey](driverkit/kiouserresourcessetpropertykey.md)
- [kIOUserServrMaxExitReasonLength](driverkit/kiouserservrmaxexitreasonlength.md)
- [kIOUserServrMaxModulePathLength](driverkit/kiouserservrmaxmodulepathlength.md)
- [kIOUserServrMaxPanicReasonLength](driverkit/kiouserservrmaxpanicreasonlength.md)
- [queue_extend_first](driverkit/queue_extend_first.md)
- [queue_extend_last](driverkit/queue_extend_last.md)

### Functions

- [IOSysCtlByName](driverkit/iosysctlbyname.md)
- [getpid](driverkit/getpid.md)

### Enumeration Cases

- [kIOMemoryMapCacheModePostedCombinedReordered](driverkit/kiomemorymapcachemodepostedcombinedreordered.md)
- [kIORPCMessageDeepSerialization](driverkit/kiorpcmessagedeepserialization.md)
- [kIOServicePMAssertionCPUBit](driverkit/kioservicepmassertioncpubit.md)
- [kIOServicePMAssertionForceFullWakeupBit](driverkit/kioservicepmassertionforcefullwakeupbit.md)
- [kIOServicePowerCapabilityLPW](driverkit/kioservicepowercapabilitylpw.md)
- [kSCSICmd_ATA_PASS_THROUGH](driverkit/kscsicmd_ata_pass_through.md)
- [kSCSICmd_ATA_PASS_THROUGH_EXT](driverkit/kscsicmd_ata_pass_through_ext.md)

### Type Aliases

- [OSSerializationPortCopyInHandler](driverkit/osserializationportcopyinhandler.md)
- [OSSerializationPortCopyOutHandler](driverkit/osserializationportcopyouthandler.md)
- [pid_t](driverkit/pid_t.md)
