FSK

Build cross-platform virtual filesystems in Rust.

FSK is a Rust toolkit for building real filesystems. You implement one trait, then mount it as a native volume: FSKit on macOS, FUSE on Linux, or ProjFS on Windows.

The crate owns the platform plumbing — mounting, IPC, authorization, directory encoding and lifecycle. Your backend owns the data. A read-only volume only needs five methods; writes are opt-in.

Start here

How it fits together

LayerRole
Filesystem / NetworkFilesystemYour type, and the only code you write
Platform adapterDecodes native requests and translates native errors back
Linux FUSEThe adapter is the FUSE session, served from your own process
Windows ProjFSCallbacks for a projected tree; local writes stay in its cache
macOS FSKit IPCA Unix socket to the extension, guarded by a per-mount capability
Swift extension inside FSK.appInstall-once; you never build or sign it

The adapter owns decoding, buffer bounds and error translation. Your backend never sees a native pointer unless it asked for raw events, and never returns a native error code.

Platform support

PlatformNative layerModelRequirement
macOS 26+FSKitFull virtual filesystem; lazy network supportInstall and authorize FSK.app once
LinuxFUSE kernel protocol through fuserFull virtual filesystem; lazy network supportFUSE must be available
Windows 10 1809+ProjFSLazy projected tree with Windows-managed local cacheEnable the Projected File System optional component

On any other target authorization_status() returns io::ErrorKind::Unsupported and no MountSession exists.

What FSK leaves to you

FSK does not impose a filesystem design. In particular, it does not provide:

  • Storage — bytes live wherever you put them; the crate never persists anything.
  • An inode index — you allocate inode numbers and decide how to find them again.
  • A cache — no page cache, no attribute cache, no eviction policy of its own.
  • Locking — adapters call methods concurrently; your state needs your own locks.
  • Transactions — FSK provides no transaction boundary; a sequence of mutations is not atomic.
  • A consistency policy — when to bump generation, invalidate a cookie or return STALE is your call.

This is deliberate. The same trait has to serve a Git server, a cloud drive, and a synthetic debug view, and those want different answers.

Guide

Reference

  • Architecture — how the adapters, the C ABI and the Swift extension fit together

Crates and examples

ResourceWhat it is
fsk on crates.ioThe published crate: traits, data model and adapters
fsk on docs.rsAPI reference for every type and method
specta-rs/fskSource, issues and releases
ExamplesFour complete backends: memory, network, GitHub and Google Drive

fsk requires Rust 1.85 or later and is MIT licensed. Mounting also requires the platform component listed above; see Platform setup.