Mountable

Mount on a Mac

Mount a filesystem on macOS with the same CLI: no macFUSE, no kernel extension and no sudo.

Mount your filesystem on a Mac with the same CLI and the same command as on Linux. There is nothing else to install: no macFUSE, no kernel extension and no sudo. The CLI hands the filesystem to the NFS client built into macOS, through a private socket that only your user account can open.

It works with CLI 0.6.0 or later on Apple Silicon Macs running macOS 26.

1. Install the CLI

curl -fsSL https://mountable.io/install.sh | sh
mountable version

The script installs mountable to ~/.local/bin. If it says that directory is not on your PATH, add it for this terminal and for new ones (zsh is the default shell on macOS):

export PATH="$HOME/.local/bin:$PATH"
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zprofile

To run the CLI without installing it, put npx -y mountable-cli (npm) or uvx mountable (PyPI) in front of each command below instead of mountable. These are the same channels as on Linux; see the CLI reference.

2. Sign in

mountable login

Approve the code in the browser, as in the quickstart. A backend can also hand the Mac a one-time ticket instead; see read-only and read-write.

3. Mount

mkdir -p ~/work
mountable mount k5q2ztr4mvd7wn3xa6jhebcyfu ~/work

Replace the example ID with your filesystem's. The mountpoint must be an existing directory that you own, such as one in your home folder.

The command stays in the foreground while the filesystem is mounted. In another terminal, ~/work is now the filesystem. Programs and coding agents use it like a local folder: git, vim, sed -i and editors' atomic saves work there.

Read-only and read-write

mkdir -p ~/review
mountable mount --ro k5q2ztr4mvd7wn3xa6jhebcyfu ~/review

Without --ro the session is read-write. With --ro it is read-only, and every write in the folder is refused. Owners and admins can mount every filesystem in their organisation read-write; members mount what they or their groups are granted.

A session created elsewhere works too. Your backend creates a ticket (mountable ticket create "$FS_ID" --ro, or the API) and the Mac mounts with it:

printf '%s\n' "$MOUNTABLE_TICKET" | mountable mount --ticket-stdin --json ~/review

4. Unmount

mountable unmount ~/work

Or press Ctrl-C in the terminal running mountable mount. Unmounting another way, such as umount ~/work, also ends the mountable mount process. If a file is still open, the mount is forced off instead. Writes the service already confirmed are stored either way. Data a program wrote that macOS had not yet sent can be lost when a mount is forced off, so call fsync or close the file before you unmount (see limits).

If the session is revoked or expires, the CLI forces the mount off: open files and the folder stop working within seconds. If the mountable mount process is killed, macOS removes the dead mount within about a minute. Before then, mountable unmount ~/work forces it off and the next mountable mount at that path replaces it; after that, mountable unmount says the folder is not mounted (not_mounted).

Good to know

A Mac mount stores every write before confirming it, at about 7 MiB/s for one stream. Keep databases such as SQLite on local disk, and add ._* to your global gitignore, because macOS keeps extended attributes in ._ files beside yours. The rest of the tips, such as rotating append-heavy logs, trimming git's reflogs in busy repositories and checking errors in the program that writes, are in Contract and limits on macOS.