macFUSE 5.1.0
- Add new HelloFS demo file system (HelloFS-Framework-Swift) as a minimal Hello World example in 40 lines of code
- Add support for the VNOP_MONITOR file system callback, available since macOS 15, which notifies file systems when the number of watchers for a file system item changes
- Send FUSE_MONITOR message to the file system server when VNOP_MONITOR callback is invoked, with FUSE_MONITOR_BEGIN flag for new watchers and FUSE_MONITOR_END flag when watchers stop monitoring
- Add support for mounting non-local volumes (typically distributed file systems) on macOS 26 via FSModule (FSKit Backend)
- Add support for mount option local to treat volumes as local (typically physically attached storage), supported on macOS 15.4 and later
- Add support for mount option volname=NAME to specify a name for the volume being mounted
- Add new monitor callback handler in libfuse and implement support for the FUSE_MONITOR message
- Add support for mounting file systems using the FSKit backend via libfuse3 with mount option -o backend=fskit
- Add new monitor callback handler in libfuse3 and implement support for the FUSE_MONITOR message
- Add utimens API extension for macOS in libfuse3 that calls the utimens handler with three time stamps (access, modification, and backup) when FUSE_DARWIN_ENABLE_EXTENSIONS is set to 1
- Add FileAttributeKey extension in Framework defining additional framework-specific attribute keys
- Update build process to use Xcode 26.1 (macOS 26.1 SDK)
- Update LoopbackFS demo file systems and add a libfuse3 variant (LoopbackFS-libfuse3-C)
- Update kernel extension to version 5.1.0
- Adapt fuse_clone_chan_fd_default() for macOS to not associate new FUSE device file descriptors with the original ones
- Rename crtime (creation time) to btime (birth time) in libfuse3 macOS API extensions
- Enable Clang module support in Framework to improve interoperability with Swift
- Drop the GM type name prefix in Framework Swift support
- Make UserFileSystem.MoveOptions more idiomatic for Swift
- Turn NSObject categories UserFileSystemLifecycle, UserFileSystemOperations, and UserFileSystemResourceForks into actual protocols
- Fix a bug in VNOP_LINK that can cause a deadlock when a file system uses the same nodeid to represent both the original file system item and its link
- Fix a bug in VNOP_MNOMAP that can cause a deadlock when VNOP_WRITE callback calls VNOP_MNOMAP
- Fix f_mntfromname (fsname mount option) being truncated at 90 bytes; now supports names of up to 1024 bytes including the terminating null character
- Fix a bug in the statfs API extension for macOS in libfuse3 and add missing fuse_lib_statfs$DARWIN() handler
- Fix a bug in the threadid module in libfuse3 that prevented several file system callback handlers from being invoked
- Fix a layout bug on macOS 26 and modernize layout in System Settings
- Remove unsupported exchangedata() callback handler which has been superseded by renamex_np() and unsupported since macOS 11
- Deprecate the exchangeDataOfItemAtPath:withItemAtPath:error: delegate method
General
-
Update build process to use Xcode 26.1 (macOS 26.1 SDK)
-
Update demo file systems
- Update
LoopbackFSdemo file systems and add alibfuse3variant (LoopbackFS-libfuse3-C) - Add new
HelloFSdemo file system (HelloFS-Framework-Swift). It serves as a minimal "Hello World" example — in just 40 lines of code. - For more information, see the demo repository.
- Update
Kernel Extension (Kernel Backend)
-
Update kernel extension to version 5.1.0
-
Add support for the
VNOP_MONITORfile system callbackThe
VNOP_MONITORcallback is available since macOS 15 and notifies file systems when the number of watchers for a file system item changes. This allows distributed file systems to subscribe only to events for items that are actively being watched, improving efficiency and reducing unnecessary event handling.- When the
VNOP_MONITORcallback is invoked, the kernel extension sends aFUSE_MONITORmessage (struct fuse_monitor_in) to the file system server running in user space - The
FUSE_MONITOR_BEGINflag is set when a new watcher starts monitoring the item - The
FUSE_MONITOR_ENDflag is set when a watcher stops monitoring the item
- When the
-
Fix a bug in
VNOP_LINKthat can cause a deadlock in case a file system uses the samenodeidto represent both the original file system item and its link. In this case, trying to lock the link inVNOP_LINKresulted in a deadlock. For more information, see macfuse/macfuse#1120. -
Fix a bug in
VNOP_MNOMAPthat can cause a deadlock. TheVNOP_WRITEcallback might end up calling theVNOP_MNOMAPcallback. Attempting to lock the already locked file system item in theVNOP_MNOMAPcallback caused the deadlock. -
Fix
f_mntfromname(fsnamemount option) being truncated at 90 bytes.f_mntfromnamesupports names of up to 1024 bytes (including the terminating\0character). For more information, see macfuse/macfuse#1123.
FSModule (FSKit Backend)
-
Add support for mounting "non-local" volumes (typically distributed file systems) on macOS 26. Mounting "local" volumes (typically physically attached storage) is supported on macOS 15.4 and later macOS versions.
-
Add support for mount option
local. macOS is more aggressive in dealing with "local" volumes. Treat this option as experimental. -
Add support for mount option
volname=NAME, whereNAMEis a string. You can use thevolnameoption to specify a name for the volume being mounted.
libfuse
- Add new
monitorcallback handler and implement support for the newFUSE_MONITORmessage. For more information, see "Kernel Extension".
libfuse3
-
Add support for mounting file systems using the
FSKitbackend. By default, the kernel backend is used to mount volumes. When specifying the mount option-o backend=fskit,libfuse3will use theFSKitbackend to mount the file system. For more information, see FUSE Backends. -
Add new
monitorcallback handler and implement support for the newFUSE_MONITORmessage. For more information, see "Kernel Extension". -
Add
utimensAPI extension for macOS. WhenFUSE_DARWIN_ENABLE_EXTENSIONSis set to 1 , theutimenshandler is called with three time stamps — the file's access, modification, and backup time stamps. By default, the handler is called with the file's access and modification time stamps. -
Fix a bug in the
statfsAPI extension for macOS and add missingfuse_lib_statfs$DARWIN()handler -
Fix a bug in the
threadidmodule that prevented several file system callback handlers from being invoked when using the module -
Adapt
fuse_clone_chan_fd_default()for macOS. On macOS, there is no need to associate new FUSE device file descriptors with the original ones. -
Rename
crtime(creation time)btime(birth time). This change does not affect ABI stability, but it requires code updates when compiling a file system with this release and the macOS API extensions being enabled.
Framework
-
Improve Swift support
- Enable Clang module support to improve interoperability with Swift
- Drop the
GMtype name prefix in Swift - Make
UserFileSystem.MoveOptionsmore idiomatic for Swift - Add
FileAttributeKeyextension defining additional framework-specific attribute keys - These changes have no affect on ABI stability, but they require code updates when compiling a file system with this release
-
Turn
NSObjectcategoriesUserFileSystemLifecycle,UserFileSystemOperations, andUserFileSystemResourceForksinto actual protocols -
Remove unsupported
exchangedata()callback handler.exchangedata()has been superseded byrenamex_np()and has been unsupported since macOS 11. This change deprecates the corresponding delegate method.- (BOOL)exchangeDataOfItemAtPath:(NSString *)path withItemAtPath:(NSString *)otherPath error:(NSError * _Nullable * _Nonnull)error
System Settings
- Fix a layout bug on macOS 26 and modernize layout