<!--
{
  "availability" : [
    "DriverKit: 19.0.0 -",
    "iOS: 16.0.0 -",
    "iPadOS: 16.0.0 -",
    "macOS: 10.15.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "DriverKit",
  "identifier" : "/documentation/DriverKit",
  "metadataVersion" : "0.1.0",
  "role" : "Framework",
  "symbol" : {
    "kind" : "Framework",
    "modules" : [
      "DriverKit"
    ],
    "preciseIdentifier" : "DriverKit"
  },
  "title" : "DriverKit"
}
-->

# DriverKit

Develop device drivers that run in user space.

## 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 <doc://com.apple.documentation/documentation/USBDriverKit>, <doc://com.apple.documentation/documentation/HIDDriverKit>, <doc://com.apple.documentation/documentation/NetworkingDriverKit>, <doc://com.apple.documentation/documentation/PCIDriverKit>, <doc://com.apple.documentation/documentation/SerialDriverKit>, and <doc://com.apple.documentation/documentation/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 <doc://com.apple.documentation/documentation/SystemExtensions> 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 <doc://com.apple.documentation/documentation/USBDriverKit> and <doc://com.apple.documentation/documentation/AudioDriverKit> varies by platform.

## Topics

### Essentials

  <doc://com.apple.documentation/documentation/kernel/implementing_drivers_system_extensions_and_kexts>

[Creating drivers for iPadOS](/documentation/DriverKit/creating-drivers-for-ipados)

Bring your drivers to iPadOS by using the platform’s DriverKit support.

### Entitlements

[Requesting Entitlements for DriverKit Development](/documentation/DriverKit/requesting-entitlements-for-driverkit-development)

Request the entitlement for DriverKit development, and request other entitlements your driver needs to interact with specific devices and interfaces.

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

  <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.driverkit.userclient-access>

  <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.driverkit.allow-any-userclient-access>

  <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.driverkit.communicates-with-drivers>

  <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.driverkit.allow-third-party-userclients>

### Samples

[DriverKit sample code](/documentation/DriverKit/driverkit-sample-code)

Explore projects that demonstrate how to write macOS device drivers with the DriverKit family of frameworks.

### Services

[Creating a Driver Using the DriverKit SDK](/documentation/DriverKit/creating-a-driver-using-the-driverkit-sdk)

Create a driver that supports proprietary features of your company’s hardware devices.

[Debugging and testing system extensions](/documentation/DriverKit/debugging-and-testing-system-extensions)

Debug your system extensions by temporarily disabling the security checks that macOS performs during the installation process.

[`IOService`](/documentation/DriverKit/IOService)

The base class for managing the setup and registration of your driver.

### Event management

[`IODispatchQueue`](/documentation/DriverKit/IODispatchQueue)

An object that manages the serial execution of blocks.

[`IOInterruptDispatchSource`](/documentation/DriverKit/IOInterruptDispatchSource)

A dispatch source that reports hardware-related interrupt events to your driver.

[`IOTimerDispatchSource`](/documentation/DriverKit/IOTimerDispatchSource)

A dispatch source that notifies your driver at a specific time.

[`IODataQueueDispatchSource`](/documentation/DriverKit/IODataQueueDispatchSource)

A dispatch source that manages a shared-memory data queue.

[`IODispatchSource`](/documentation/DriverKit/IODispatchSource)

The common base class for dispatch sources.

[`OSAction`](/documentation/DriverKit/OSAction)

An object that executes your driver’s custom behavior.

### Memory management

[`IOBufferMemoryDescriptor`](/documentation/DriverKit/IOBufferMemoryDescriptor)

A memory buffer allocated in the caller’s address space.

[`IOMemoryDescriptor`](/documentation/DriverKit/IOMemoryDescriptor)

The base class for describing a location in memory.

[`IOMemoryMap`](/documentation/DriverKit/IOMemoryMap)

A reference to an existing block of memory in the current process or in a different process.

[Memory Utilities](/documentation/DriverKit/memory-utilities)

Allocate and deallocate memory and manage memory pointers in different address spaces.

### Registry data types

[`OSArray`](/documentation/DriverKit/OSArray)

A container for an ordered, random-access collection of objects.

[`OSDictionary`](/documentation/DriverKit/OSDictionary)

A container for a collection with elements that are key-value pairs.

[`OSBoolean`](/documentation/DriverKit/OSBoolean)

A container for a true or false value.

[`OSData`](/documentation/DriverKit/OSData)

A container for untyped data.

[`OSNumber`](/documentation/DriverKit/OSNumber)

A container for an integer value.

[`OSString`](/documentation/DriverKit/OSString)

A container for managing an array of characters.

[`OSSerialization`](/documentation/DriverKit/OSSerialization)

A container for one or more objects, serialized in a binary data format that is suitable for messaging.

[`OSCollection`](/documentation/DriverKit/OSCollection)

The base class for DriverKit collection objects.

[`OSContainer`](/documentation/DriverKit/OSContainer)

The base class for DriverKit data objects.

[`OSObject`](/documentation/DriverKit/OSObject)

The base class for DriverKit objects

[`OSSymbol`](/documentation/DriverKit/OSSymbol)

A container for managing an array of characters.

[`IOFixed`](/documentation/DriverKit/IOFixed)

A fixed-point number.

### External drivers

[`IOUserClient`](/documentation/DriverKit/IOUserClient)

A connection to another service that the system manages.

[`IOUserServer`](/documentation/DriverKit/IOUserServer)

A system-managed service.

  <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.developer.driverkit.userclient-access>

[Communicating between a DriverKit extension and a client app](/documentation/DriverKit/communicating-between-a-driverkit-extension-and-a-client-app)

Send and receive different kinds of data securely by validating inputs and asynchronously by storing and using a callback.

### Runtime support

[`OSDynamicCast`](/documentation/DriverKit/OSDynamicCast)

Casts an object safely to the specified type, if possible.

[`OSRequiredCast`](/documentation/DriverKit/OSRequiredCast)

Casts the object to the specified type, stopping the process if the object isn’t of the correct type.

[`IMPL`](/documentation/DriverKit/IMPL)

Tells the system that the superclass implementation of this method runs in the kernel.

[`TYPE`](/documentation/DriverKit/TYPE)

Annotates a method declaration to indicate that it conforms to an existing method signature.

[`QUEUENAME`](/documentation/DriverKit/QUEUENAME)

Tells the system to execute a method on the dispatch queue with the specified name.

[`SUPERDISPATCH`](/documentation/DriverKit/SUPERDISPATCH)

Tells the system to execute the superclass’ implementation of the current method in the kernel.

[`IIG_KERNEL`](/documentation/DriverKit/IIG_KERNEL)

Tells the system that the class or method runs inside the kernel.

[`LOCAL`](/documentation/DriverKit/LOCAL)

Tells the system that the method runs locally in the driver extension’s process space.

[`LOCALONLY`](/documentation/DriverKit/LOCALONLY)

Tells the system that the class or method runs locally in the driver extension’s process space.

[Error Codes](/documentation/DriverKit/error-codes)

Determine the reason an operation fails.

[C++ Runtime Support](/documentation/DriverKit/c-runtime-support)

Examine low-level types that DriverKit uses to support kernel-level operations.

### Classes

[`IOHistogramReporter`](/documentation/DriverKit/IOHistogramReporter)

[`IOReportLegend`](/documentation/DriverKit/IOReportLegend)

[`IOReporter`](/documentation/DriverKit/IOReporter)

[`IOServiceStateNotificationDispatchSource`](/documentation/DriverKit/IOServiceStateNotificationDispatchSource)

[`IOSimpleReporter`](/documentation/DriverKit/IOSimpleReporter)

[`IOStateReporter`](/documentation/DriverKit/IOStateReporter)

[`OSBundle`](/documentation/DriverKit/OSBundle)

[`OSMappedFile`](/documentation/DriverKit/OSMappedFile)

### Reference

[DriverKit Structures](/documentation/DriverKit/driverkit-structures)

[DriverKit Enumerations](/documentation/DriverKit/driverkit-enumerations)

[DriverKit Constants](/documentation/DriverKit/driverkit-constants)

[DriverKit Functions](/documentation/DriverKit/driverkit-functions)

[DriverKit Data Types](/documentation/DriverKit/driverkit-data-types)

[DriverKit Namespaces](/documentation/DriverKit/driverkit-namespaces)

### Macros

[Macros](/documentation/DriverKit/DriverKit-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)
