What’s New

macfuse macfuse-5.1.0

macfuse-5.1.0Pre-release

macFUSE 5.1.0

Added 11
  • 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
Changed 9
  • 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
Fixed 6
  • 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
Removed 1
  • Remove unsupported exchangedata() callback handler which has been superseded by renamex_np() and unsupported since macOS 11
Deprecated 1
  • 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 LoopbackFS demo file systems and add a libfuse3 variant (LoopbackFS-libfuse3-C)
    • Add new HelloFS demo 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.
Kernel Extension (Kernel Backend)
  • Update kernel extension to version 5.1.0

  • Add support for the VNOP_MONITOR file system callback

    The VNOP_MONITOR callback 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_MONITOR callback is invoked, the kernel extension sends a FUSE_MONITOR message (struct fuse_monitor_in) to the file system server running in user space
    • The FUSE_MONITOR_BEGIN flag is set when a new watcher starts monitoring the item
    • The FUSE_MONITOR_END flag is set when a watcher stops monitoring the item
  • Fix a bug in VNOP_LINK that can cause a deadlock in case a file system uses the same nodeid to represent both the original file system item and its link. In this case, trying to lock the link in VNOP_LINK resulted in a deadlock. For more information, see macfuse/macfuse#1120.

  • Fix a bug in VNOP_MNOMAP that can cause a deadlock. The VNOP_WRITE callback might end up calling the VNOP_MNOMAP callback. Attempting to lock the already locked file system item in the VNOP_MNOMAP callback caused the deadlock.

  • Fix f_mntfromname (fsname mount option) being truncated at 90 bytes. f_mntfromname supports names of up to 1024 bytes (including the terminating \0 character). 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, where NAME is a string. You can use the volname option to specify a name for the volume being mounted.

libfuse
  • Add new monitor callback handler and implement support for the new FUSE_MONITOR message. For more information, see "Kernel Extension".
libfuse3
  • Add support for mounting file systems using the FSKit backend. By default, the kernel backend is used to mount volumes. When specifying the mount option -o backend=fskit, libfuse3 will use the FSKit backend to mount the file system. For more information, see FUSE Backends.

  • Add new monitor callback handler and implement support for the new FUSE_MONITOR message. For more information, see "Kernel Extension".

  • Add utimens API extension for macOS. When FUSE_DARWIN_ENABLE_EXTENSIONS is set to 1 , the utimens handler 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 statfs API extension for macOS and add missing fuse_lib_statfs$DARWIN() handler

  • Fix a bug in the threadid module 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 GM type name prefix in Swift
    • Make UserFileSystem.MoveOptions more idiomatic for Swift
    • Add FileAttributeKey extension 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 NSObject categories UserFileSystemLifecycle, UserFileSystemOperations, and UserFileSystemResourceForks into actual protocols

  • Remove unsupported exchangedata() callback handler. exchangedata() has been superseded by renamex_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
View original

Discussion