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

# FSKit

Implement a file system that runs in user space.

## Overview

With FSKit, you can extend macOS by enabling access to new types of file systems.
You do this by developing an FSKit module (`FSModule`), which you deliver as an app extension that runs in user space, and is compatible with Mac App Store distribution.
FSKit connects your module to the system’s existing frameworks and tools, like <doc://com.apple.documentation/documentation/DiskArbitration>, NetFS, and the `mount(8)` command.

### FSKit modules

An FSKit module consists of two main parts:

- A set of *module attributes* that you define in the module’s `Info.plist` file. These attributes provide metadata like Boolean keys that indicate feature support and dictionaries that describe command-line interface access.
- The code that implements the file system functionality. Your app extension conforms to one of two protocols, depending on its design flow, as described below.

The FSKit framework defines three key file storage concepts that `FSModule` supports:

- **Volume**: A directory structure for files and folders.
- **Resource**: A source of data, such as a block storage device or a network resource you identify with a URL.
- **Container**: An abstract object that uses one or more resources to deliver one or more volumes, similar to an APFS container. Typically, a container uses only one resource, but some formats like Xsan (Apple’s cluster file system) use multiple disks to store contents for one volume.

### Design flows

FSKit provides two design flows, with different trade-offs of functionality and complexity:

- [`FSFileSystem`](/documentation/FSKit/FSFileSystem) is a conventional, full-featured file system that can employ multiple resources and deliver multiple volumes.
- [`FSUnaryFileSystem`](/documentation/FSKit/FSUnaryFileSystem) is a simpler file system where containers use only one resource and provide only one volume. Most file systems shipping in macOS fit this pattern, including `HFS`, `msdosfs`, `ExFAT`, `ntfs`, and others.

> Note: The current version of FSKit supports only `FSUnaryFileSystem`.

When you choose a design flow, write an app extension that conforms to either `FileSystemExtension` or [`UnaryFileSystemExtension`](/documentation/FSKit/UnaryFileSystemExtension), based on your chosen flow.
These protocols declare a `fileSystem` delegate object that your extension creates and returns.
This delegate object subclasses either `FSFileSystem` or `FSUnaryFileSystem` as appropriate, and conforms to either the `FSFileSystemOperations` or [`FSUnaryFileSystemOperations`](/documentation/FSKit/FSUnaryFileSystemOperations) protocol.
These protocols define a `loadResource` method, which FSKit uses to make a resource available to the module.

## Topics

### Essentials

[Building a passthrough file system](/documentation/FSKit/building-a-passthrough-file-system)

Expose an existing path as its own file system by using the FSKit framework.

### App extensions

[`UnaryFileSystemExtension`](/documentation/FSKit/UnaryFileSystemExtension)

A protocol for implementing a minimal file system as an app extension.

### File systems

[`FSFileSystem`](/documentation/FSKit/FSFileSystem)

An abstract base class for implementing a full-featured file system.

[`FSUnaryFileSystem`](/documentation/FSKit/FSUnaryFileSystem)

An abstract base class for implementing a minimal file system.

[`FSFileSystemBase`](/documentation/FSKit/FSFileSystemBase)

A protocol containing functionality supplied by FSKit to file system implementations.

[`FSFileName`](/documentation/FSKit/FSFileName)

The name of a file, expressed as a data buffer.

### Containers

[`FSContainerIdentifier`](/documentation/FSKit/FSContainerIdentifier)

A type that identifies a container.

[`FSContainerStatus`](/documentation/FSKit/FSContainerStatus)

A type that represents a container’s status.

### Resources

[`FSResource`](/documentation/FSKit/FSResource)

An abstract resource a file system uses to provide data for a volume.

[`FSBlockDeviceResource`](/documentation/FSKit/FSBlockDeviceResource)

A resource that represents a block storage disk partition.

[`FSPathURLResource`](/documentation/FSKit/FSPathURLResource)

A resource that represents a path in the system file space.

[`FSGenericURLResource`](/documentation/FSKit/FSGenericURLResource)

A resource that represents an abstract URL.

### Volumes

[`FSVolume`](/documentation/FSKit/FSVolume)

A directory structure for files and folders.

### Items

[`FSItem`](/documentation/FSKit/FSItem)

A distinct object in a file hierarchy, such as a file, directory, symlink, socket, and more.

### Maintenance and management

[`FSManageableResourceMaintenanceOperations`](/documentation/FSKit/FSManageableResourceMaintenanceOperations)

Maintenance operations for a file system’s resources.

### Operations

[`FSOperationID`](/documentation/FSKit/FSOperationID)

A unique identifier for an operation.

### Tasks

[`FSTask`](/documentation/FSKit/FSTask)

A class that enables a file system module to pass log messages and completion notifications to clients.

[`FSTaskOptions`](/documentation/FSKit/FSTaskOptions)

A class that passes command options to a task, optionally providing security-scoped URLs.

### Errors and logging

[`fs_errorForCocoaError(_:)`](/documentation/FSKit/fs_errorForCocoaError(_:))

Creates an error object for the given Cocoa error code.

[`fs_errorForMachError(_:)`](/documentation/FSKit/fs_errorForMachError(_:))

Creates an error object for the given Mach error code.

[`fs_errorForPOSIXError(_:)`](/documentation/FSKit/fs_errorForPOSIXError(_:))

Creates an error object for the given POSIX error code.

[`FSError`](/documentation/FSKit/FSError)

An error encountered when performing an FSKit operation.

[`FSError.Code`](/documentation/FSKit/FSError/Code)

A code that indicates a specific FSKit error.

[`FSKitErrorDomain`](/documentation/FSKit/FSKitErrorDomain)

An error domain for FSKit errors.

[`FSDataCacheError`](/documentation/FSKit/FSDataCacheError)

An error encountered when performing an FSKit data caching operation.

### FSKit interactions

[`FSClient`](/documentation/FSKit/FSClient)

An interface for apps and daemons to interact with FSKit.

### Utilities

[`FSKitVersionNumber`](/documentation/FSKit/FSKitVersionNumber)

Project version number for FSKit.

[`FSKitVersionString`](/documentation/FSKit/FSKitVersionString)

Project version string for FSKit.

### Supporting types

[`FSBlockmapFlags`](/documentation/FSKit/FSBlockmapFlags)

Flags that describe the behavior of a blockmap operation.

[`FSCompleteIOFlags`](/documentation/FSKit/FSCompleteIOFlags)

Flags that describe the behavior of an I/O completion operation.

[`FSEntityIdentifier`](/documentation/FSKit/FSEntityIdentifier)

A base type that identifies containers and volumes.

[`FSExtentPacker`](/documentation/FSKit/FSExtentPacker)

A type that directs the kernel to map space on disk to a specific file managed by this file system.

[`FSExtentType`](/documentation/FSKit/FSExtentType)

An enumeration of types of extents.

[`FSMatchResult`](/documentation/FSKit/FSMatchResult)

A type that represents the recognition and usability of a probed resource.

[`FSMetadataRange`](/documentation/FSKit/FSMetadataRange)

A range that describes contiguous metadata segments on disk.

[`FSProbeResult`](/documentation/FSKit/FSProbeResult)

An object that represents the results of a specific probe.

### Macros

[`FSKIT_API_AVAILABILITY_V1`](/documentation/FSKit/FSKIT_API_AVAILABILITY_V1)

[`FSKIT_API_UNAVAILABLE_V1`](/documentation/FSKit/FSKIT_API_UNAVAILABLE_V1)

[`FS_ALWAYS_EXPORT`](/documentation/FSKit/FS_ALWAYS_EXPORT)

[`FS_EXPORT`](/documentation/FSKit/FS_EXPORT)

[`FS_EXPORT_INTERNAL`](/documentation/FSKit/FS_EXPORT_INTERNAL)

[`FS_EXTERN`](/documentation/FSKit/FS_EXTERN)

[`FS_SUPPORTED_VISIBILITY`](/documentation/FSKit/FS_SUPPORTED_VISIBILITY)

### Entitlements

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

  <doc://com.apple.documentation/documentation/bundleresources/entitlements/com.apple.developer.fskit.mount>



---

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)