If you manage Linux servers from a Mac, you've probably been here:
sshfs user@host:/var/www ~/mnt/prod -o reconnect,auto_cache,noappledouble
It works. Until you have four servers, a laptop that sleeps, and a LaunchAgent you copied from a gist two years ago.
I wanted real sshfs mounts in Finder — not another SFTP client, not SMB on the VPS — with saved configs and one-click mount/unmount. So I built SSHFS GUI: free, open source, signed macOS DMG.
The problem with sshfs on macOS
Linux makes this easy. On Mac, it's a stack:
- A FUSE implementation (FUSE-T or macFUSE)
- An
sshfsbinary (Homebrew coresshfsis Linux-only — you needfuse-t-sshfsorgromgit/fuse/sshfs-mac) - Your mount command, local mount point, reconnect flags, auth
Finder can't mount SSH natively. Tools like Cyberduck are excellent for transfers, but a different workflow than "this remote path is a volume."
I kept rewriting the same commands. That felt like a small app problem, not a big framework problem.
What SSHFS GUI does
- Save servers — host, port, remote path, local mount point, auth method
-
One-click mount/unmount — still real
sshfsunder the hood -
Keychain — passwords via
keytar, never in plain JSON - SSH agent, key file, or password
- Favorites & filters — all / favorites / mounted
- Auto-mount on startup — per server
- Menu bar mode — tray access in packaged builds
- Import/export — move configs between Macs as JSON
- EN + IT — i18next, system locale detection
The app also checks for missing FUSE/sshfs and points you to Homebrew install steps if something's missing.
Install FUSE + sshfs (once)
Pick one stack:
Option A — FUSE-T (no kext, often easiest on recent macOS):
brew tap macos-fuse-t/homebrew-cask
brew install --cask fuse-t fuse-t-sshfs
Option B — macFUSE (classic stack):
brew install --cask macfuse
brew install gromgit/fuse/sshfs-mac
On some FUSE-T setups, Finder needs extra flags (e.g. -o nonamedattr). You can add those in the app's SSHFS extra options field per server.
Install the app
- Download the signed DMG from GitHub Releases
- Drag SSHFS GUI to Applications
- Add a server → Mount → open in Finder
Source: github.com/tommasomeli/sshfsgui
How it's built
Solo side project, shipped with CI and notarized macOS builds.
| Layer | Choice |
|---|---|
| Shell | Electron 41 |
| Build | electron-vite + Vite |
| UI | React 19, TypeScript, Tailwind, shadcn/ui |
| State | Zustand |
| Secrets | keytar → macOS Keychain |
| i18n | i18next (EN / IT) |
| Tests | Vitest (path handling, import/export, sshfs args) |
| Release | GitHub Actions → signed + notarized DMG |
Interesting bits for fellow Electron devs:
-
Import/export logic lives in
src/shared/so Vitest runs on Linux CI without loadingkeytar -
Tray menu uses the same i18n keys as the app menu — easy to miss the
{ name: appInfo.name }interpolation on quit -
prebuildicon script skips on non-macOS so CI canelectron-vite buildon Ubuntu
What it's not
- Not a replacement for Cyberduck or full SFTP workflows
- Not "FUSE-free" — you still need FUSE-T or macFUSE + sshfs, same as CLI
- Not cross-platform today — macOS only
Try it / feedback
- Download: https://github.com/tommasomeli/sshfsgui/releases
- Repo: https://github.com/tommasomeli/sshfsgui
- Issues & feature requests: GitHub issue templates welcome
I'd especially love to hear from anyone running FUSE-T vs macFUSE on Tahoe — mount stability after sleep is the edge case I care about most.
If you have a cleaner Mac sshfs workflow, tell me in the comments. Always looking to steal good ideas for v1.1.




Top comments (0)