gMountie makes a remote directory behave like a local folder — built for the internet, not the LAN. A gmountie serve process exposes folders as named volumes; a gmountie mount client mounts one over FUSE and proxies every filesystem call to the server over gRPC. No VPN, no sync, no copying everything to disk first.
Contents
Accessing files on a server across the internet usually means a VPN plus NFS/SMB (brittle once real latency shows up), or a sync tool that copies everything first. gMountie goes for the NFS feel — a real, live mounted filesystem — but designed for the internet from day one:
- 🚫 No VPN. It's just a TLS gRPC connection. Expose the port or put it behind a reverse proxy, and mount from anywhere.
- 🔌 It survives the network. Sessions and idempotent RPCs mean a dropped connection, an ISP IP change, or a server restart won't kill your mount or your open files — they reconnect and resume.
- ⚡ Reads get cheap after the first one. A persistent client cache — in memory and on disk, kept fresh by server push — means re-reading a file doesn't cross the wire again.
- 📦 One small binary. The same
gMountieis both the server and the client.
Note
gMountie is alpha. The server is Linux-only; the client mounts on Linux and macOS. Transport is TLS (auto-generated cert on first run) with basic-auth or mTLS and per-user volume ACLs — a great fit for mounting your own servers over the public internet. OIDC/JWT auth is on the roadmap.
Where gMountie sits next to the usual ways of mounting remote storage:
| gMountie | NFS over VPN | sshfs | rclone / s3fs | |
|---|---|---|---|---|
| Setup | one binary, two commands | VPN + NFS server + auth | sshd + sshfs | bucket + creds + tool |
| Works without a VPN | ✅ TLS gRPC port | ❌ needs the tunnel | ✅ over SSH | ✅ |
| Survives network blips | ✅ sessions + idempotent retries | ❌ SSH drops | ❌ per-request | |
| Client cache | ✅ memory + disk, push-invalidated | ❌ | ❌ | |
| WAN read throughput | ✅ streaming + readahead | ❌ RTT-amplified metadata | ❌ slow on high RTT | |
| POSIX correctness | ✅ atomic rename, mtime, mmap | ✅ (NFSv4) | ❌ eventual |
Full matrix, including Tailscale Drive, and "when each makes sense" → docs: comparison.
The server (Linux only) just exposes folders. The client mounts via FUSE: install
fuse3(/dev/fuse) on Linux, or macFUSE / FUSE-T on macOS.
# Build from source (Go 1.2x) — gives you both the server and the client
git clone https://github.com/gMountie/gMountie && cd gMountie
go build -o gmountie ./cmdPrefer not to build?
Grab a gMountie_*_linux_*.tar.gz (or gMountie_*_darwin_*.tar.gz for the macOS client) from the releases page, or run the server from the container image ghcr.io/gmountie/gmountie-server.
Zero-config: run gmountie serve with no arguments. On first start it writes ~/.config/gmountie/server.yaml (binding 0.0.0.0:9449), creates a shared volume, and prints a random admin password once — copy it.
Or write your own server.yaml
server:
address: 0.0.0.0
port: 9449
auth:
type: basic
users:
- username: admin
password_hash: $argon2id$v=19$m=19456,t=2,p=1$... # output of: gmountie genpass
volumes:
- name: shared
path: /srv/shared # the folder to exposegmountie serve -c server.yamlpassword_hash must be a $argon2id$ PHC string — the server rejects plaintext at startup. Generate one with gmountie genpass.
mkdir -p ~/mnt/shared
gmountie mount admin@your-server.example:9449/shared ~/mnt/shared
# Password: (the one printed on first server run)
# ...and use it like any other folder:
ls ~/mnt/sharedThe password resolves from --password, then the config file, then $GMOUNTIE_AUTH_PASSWORD, then an interactive no-echo prompt.
List volumes first, mount in the background, or use the flag form
# See what the server exposes before mounting:
gmountie ls admin@your-server.example:9449
# Mount in the background (detach once ready):
gmountie mount admin@your-server.example:9449/shared ~/mnt/shared --daemon
# The classic flag form still works:
gmountie mount ~/mnt/shared -s your-server.example:9449 -n shared -u adminFor TLS pinning (TOFU), reverse proxies, and the full client.yaml reference, see docs.gmountie.dev.
your machine remote server
┌─────────────────────┐ gRPC over HTTP/2 ┌─────────────────────┐
│ gmountie mount │ ◀────────────────────────▶ │ gmountie serve │
│ FUSE mount point │ metadata · data · events │ real folders │
│ + local cache │ (TLS, Snappy) │ exposed as volumes │
└─────────────────────┘ └─────────────────────┘
The client implements a FUSE filesystem and turns each syscall into a gRPC call against the server, which serves it from the volume's real directory. Metadata, file data, and cache-invalidation events travel over separate gRPC services, so they can be tuned independently.
Dig deeper: Architecture & Protocol · Caching & Consistency · Performance
Fast
- gRPC streaming Read/Write with a tunable frame size — no message-size ceiling on large files
- A persistent client cache for attributes, directory listings, and file data — in memory and on disk, kept coherent by server push
- Readahead and write coalescing for sequential I/O, compound metadata batching to cut round-trips, plus an optional writeback mode and Snappy compression for high-latency links
Resilient
- Sessions + idempotent RPCs: retries and reconnects are safe and invisible; file handles opened before a blip stay valid after it (within the session grace period)
- Push-based invalidation (a server
Subscribestream) keeps clients coherent — close-to-open consistency across multiple clients
Secure & observable
- Native TLS with an auto-generated cert + TOFU pinning, or mTLS; argon2id-hashed credentials; per-user volume ACLs
- Prometheus metrics, health/readiness endpoints, and structured logs
- One binary:
gmountie serve,gmountie mount,gmountie ls,gmountie config show,gmountie genpass, and more
Full docs live at docs.gmountie.dev. Highlights:
- Quick Start · Compared to NFS / sshfs / rclone
- Architecture & Protocol · Caching & Consistency · Performance
- Configuration & CLI — server · client · Roadmap
Contributions of every kind are welcome — 🐛 bug reports, 💡 feature ideas, 📝 docs, and 🔧 code. See CONTRIBUTING.md to get set up, and SECURITY.md to report a vulnerability privately.
Naming & branding 📛
The project name is written gMountie — lowercase g, capital M. The g is for gRPC, the wire protocol the client and server speak.
| Form | Use for |
|---|---|
gMountie |
Prose, docs, marketing, README, CLI help strings |
gmountie |
Go module path, binary name, package names, file/repo names, URLs |
GMOUNTIE_ |
Environment variable prefix |
Please avoid GMountie, Gmountie, or other variants when contributing.
gMountie is open source under the Apache License 2.0.