Mount drivers
A driver turns a mount spec into a mounted folder. Every driver goes through your system ssh, so your keys,
agent, known_hosts and ~/.ssh/config apply as they are.
| Driver | Linux | macOS |
|---|---|---|
sshfs |
sshfs 3 + fuse3 (fusermount3) |
sshfs with macFUSE or FUSE-T |
rclone |
rclone mount + fuse3 |
rclone mount with macFUSE or FUSE-T |
rclone-nfs |
unavailable (“macOS only”) | rclone nfsmount (needs /sbin/mount_nfs, no FUSE) |
bifrost drivers shows what each probe found and which driver auto picks. It probes locally when the daemon
is down.
$ bifrost drivers✓ sshfs /usr/bin/sshfs SSHFS version 3.7.3, fusermount3✓ rclone /usr/bin/rclone rclone v1.75.1, fusermount3✗ rclone-nfs macOS onlydefault (auto): sshfsChoosing a driver
Section titled “Choosing a driver”Set driver on a static mount, in a provider’s [discovery.mount], or as mount.default_driver. The default
everywhere is auto, which takes the first available driver in mount.auto_order:
| OS | Default auto_order |
|---|---|
| Linux | sshfs, rclone |
| macOS | rclone-nfs, rclone, sshfs |
[mount]default_driver = "auto" # auto | sshfs | rclone | rclone-nfsauto_order = ["sshfs", "rclone"]- A named driver is never substituted. If it is unavailable, the mount waits and says why.
autois sticky: a mount keeps its driver until its spec changes, so a driver that comes and goes never remounts anything.
The default on Linux. Bifröst runs sshfs 3 with reconnect, so a short network drop is handled inside the mount
instead of by remounting. On macOS it adds volname=<id> (and noappledouble with macFUSE).
rclone
Section titled “rclone”rclone always goes through OpenSSH with --sftp-ssh; its built-in SSH library, which skips host-key checks, is
never used. It runs with --config=/dev/null and a per-mount VFS cache in <state>/rclone/<id>.
[mount]vfs_cache_mode = "writes" # off | minimal | writes | fullrclone logs “No host key validation is being performed”. That refers to the unused internal library, not to your mounts.
Shared SSH settings
Section titled “Shared SSH settings”Bifröst passes these options to ssh, to sshfs and to rclone’s --sftp-ssh:
BatchMode=yes ConnectTimeout=10 ServerAliveInterval=15 ServerAliveCountMax=3 ControlMaster=no ControlPath=noneNone of them touches host-key checking, and no config key can. To use a separate ssh config for Bifröst, set
mount.ssh_config; it is passed as -F. Before every mount, an ssh -s <host> sftp preflight runs, and its
error becomes the mount’s last_error.
Unmounting
Section titled “Unmounting”- Graceful by default. A busy mount (files open) stays mounted, reports
unmount blocked: busy (files open), and is retried later. - Forced with
bifrost unmount --force, and automatically for dead mounts and mounts hung pastoffline_grace_period: a lazy detach (fusermount3 -uz, ordiskutil unmount forceon macOS). Open files keep working until they are closed. - Nothing is killed. Bifröst never signals a process that holds your files. The only process it ever signals is its own mount child that never finished mounting.
- Stopping the daemon unmounts nothing. Mounts keep serving and the next
bifrostdadopts them.
- FUSE detection: macFUSE at
/Library/Filesystems/macfuse.fs; FUSE-T at/Library/Application Support/fuse-tor/usr/local/lib/libfuse-t.dylib. rclone-nfscomes first in the default order because it needs no kernel extension. It serves the mount on an unauthenticated127.0.0.1NFS port that other local users could reach, so on a shared Mac putrcloneorsshfsfirst.nfsmountmay also need root. Withvfs_cache_modebelowwritesit would be read-only, so Bifröst raises it towrites.- Mount table via
getmntinfo; unmount with/sbin/umount; force withdiskutil unmount force. - Permissions: macFUSE needs its system extension approved. When a mount’s log mentions
kernel extension,System Extensionornot permitted, the error gets the hint allow the macFUSE system extension in System Settings → Privacy & Security, andbifrost doctorrepeats it. Approve it there (and reboot if asked), or use FUSE-T orrclone-nfs, which need no kernel extension.

