Files
..

Python examples

Runnable scripts, one directory per backend or topic. Run them from the repo root with the venv interpreter so .env.development resolves:

./python/.venv/bin/python examples/python/s3/s3.py

Naming: <backend>.py uses the command surface, <backend>_fuse.py adds a kernel mount, <backend>_vfs.py stays fully virtual.

Mount backends: fuse vs fskit

Apple has deprecated third-party kernel extensions; on Apple Silicon the macFUSE kext already needs a reduced-security boot and admin approval, and future macOS releases are expected to stop loading it entirely. FSKit (macOS 15.4+) is Apple's supported userspace replacement, and macFUSE 5.x can serve the same libfuse API through it. backend=fskit is mirage's path to keep real mounts working on Macs where the kext is blocked.

flowchart LR
    A[cat /Volumes/.../file] --> K[kernel VFS]
    K -->|backend=fuse| X[macFUSE kext] --> L[libfuse]
    K -->|backend=fskit| F[fskitd + macFUSE FSKit module] --> L
    L --> M[MirageFS] --> R[resource]

Same upper half either way; only the kernel-to-userspace hop changes. Trade-off: fskit mounts live under /Volumes and need exact file sizes (no direct_io), so API-backed resources are refused. The full write surface works (via mirage/fuse/darwin.py). fuse/fskit.py demonstrates all of it; details in docs/python/setup/fuse.mdx.