GugleFS is a cross-platform Tauri desktop client that turns remote servers into local filesystems. Configure a mapping once, mount it, and the remote path behaves like any drive or directory on your machine — in every application, not just a file transfer window.
- Three protocols, one UI — FTP/FTPS, SFTP (password, private key, MFA), and WebDAV over HTTPS
- Native mounts — WinFsp 2.1 on Windows, FUSE3 on Linux, FUSE-T 1.2.7 on macOS
- Locked at startup — TOTP two-factor authentication gates the app; credentials live in the OS secure store
- Survives the network — idle keepalives, silent reconnects, and mount recovery after restart
- Fast by default — bounded metadata caches and 1 MiB sequential read-ahead, shared across platforms
The desktop UI is built with Tauri, Vue 3, TypeScript, and Vite; the filesystem engine is Rust; packages are managed with pnpm.
Unlock is protected by TOTP two-factor authentication:
Mounted mappings show live status, endpoint, mount point, and credential state at a glance:
Adding a mapping adapts to the protocol — SFTP offers password, OpenSSH/PEM private-key, and MFA options, while WebDAV stays minimal. Every mapping can be tested before it is saved:
|
![]() |
| SFTP with password, key, or MFA authentication | WebDAV over HTTPS |
GugleFS/
|- src/ # Configuration UI only
|- src-tauri/ # Tauri entry point and IPC commands
|- crates/
| |- guglefs-core/ # Models, state, VFS, and engine traits
| |- guglefs-remote/ # FTP, SFTP, and WebDAV adapters
| `- guglefs-mount/ # WinFsp and FUSE drivers
|- docs/ # README screenshots
|- THIRD_PARTY_LICENSES/ # Redistributed dependency licenses
|- Cargo.toml # Rust workspace
|- package.json # pnpm scripts
`- TODO.md
The dependency direction is UI -> Tauri IPC -> core <- remote / mount. The frontend never performs remote network requests or filesystem operations directly.
Install Node.js 20+, pnpm 10+, Rust 1.85.1+, and the Tauri prerequisites for your platform.
Windows additionally requires Visual Studio Build Tools 2022 with Desktop development with C++, a Windows 10/11 SDK, WebView2, and the WinFsp 2.1 SDK.
On Debian or Ubuntu:
sudo apt install fuse3 libwebkit2gtk-4.1-dev libayatana-appindicator3-dev \
librsvg2-dev libxdo-dev libdbus-1-dev pkg-configOn macOS:
brew install --cask fuse-t
brew install pkgconf
export PKG_CONFIG_PATH="$PWD/scripts/pkgconfig/fuse-t${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"Install dependencies and start the app:
pnpm install
pnpm devRun the frontend and Rust workspace checks:
pnpm checkThe Windows NSIS package includes and silently installs the official WinFsp 2.1 runtime. Mount points may be drive letters such as Z: or absolute directories. WinFsp creates directory mount points itself, so GugleFS temporarily removes an existing empty directory and restores it after a normal unmount. Non-empty directories are rejected, and stale WinFsp directory reparse points are recovered conservatively.
Linux uses FUSE3 and absolute directory mount points. The DEB package declares fuse3 and libsecret-1-0 dependencies.
The macOS App and DMG contain the unmodified official FUSE-T 1.2.7 installer. When FUSE-T is missing, GugleFS shows an action that opens the bundled installer. Installation still requires administrator authorization, but FUSE-T runs in user space over a local NFS, SMB, or FSKit backend and does not require a kernel/system extension. Some applications may need access to Network Volumes under Privacy & Security > Files and Folders before they can browse a mount.
The FUSE-T binary license permits redistribution for non-commercial use. Commercial use or bundling with commercial software requires a commercial license from the FUSE-T authors. GugleFS pins the official installer SHA-256 and includes the FUSE-T license and third-party attributions in the repository and application bundle.
FTP uses passive mode and supports standard FTP and explicit FTPS. Deprecated implicit FTPS is not supported. When a proxy is active, both control and passive data connections use it.
SFTP supports passwords and OpenSSH/PEM private keys. The file picker accepts keys with any filename, including extensionless id_ed25519 and id_rsa files generated by ssh-keygen. Local-key mode stores only the path. Pasted keys and optional passphrases are stored in the platform secure store. The first connection displays the server's SHA-256 host-key fingerprint; subsequent key changes require explicit confirmation.
For an SFTP server that requires MFA, enable Requires MFA on the mapping and enter the current six-digit TOTP code when testing or mounting. The code is used only for that request and is never stored. MFA mappings cannot mount automatically. Idle SSH transports send protocol-level keepalives, and GugleFS silently reopens a closed SFTP subsystem while the authenticated SSH transport remains active. If the SSH transport itself closes, the mapping must be mounted manually with a new TOTP code. Non-MFA connections can reconnect and safely retry eligible operations automatically.
WebDAV requires HTTPS and keeps redirects on the original origin.
Mappings use the system proxy by default. Enable Ignore system proxy on a mapping to force direct connections.
Linux and macOS read the protocol-specific HTTP_PROXY, HTTPS_PROXY, FTP_PROXY, SFTP_PROXY, and ALL_PROXY environment variables, including lowercase variants, and honor NO_PROXY. Windows reads ProxyEnable, ProxyServer, and ProxyOverride from the current user's Internet Settings registry key.
WebDAV supports HTTP(S) and SOCKS5 proxies. SFTP, FTP, and FTPS use HTTP CONNECT or SOCKS5 tunnels. Proxy credentials remain in the operating-system proxy configuration and are never copied into mappings.json.
On first launch, GugleFS enrolls a TOTP authenticator and requires a six-digit code on subsequent launches. Passwords, private-key passphrases, pasted keys, and the application-startup TOTP secret are stored in Windows Credential Manager, macOS Keychain, or Linux Secret Service. Mapping and recovery files contain only credential references and mapping IDs. SFTP MFA codes are transient and are not added to the secure store.
Locking the app safely unmounts active mappings before showing the 2FA screen. After unlock or restart, GugleFS restores mappings that were still mounted and have saved credentials, plus mappings with auto_mount enabled. A mapping explicitly unmounted by the user is not restored unless auto_mount is enabled. SFTP mappings that require MFA are always excluded from automatic restoration.
Closing the main window hides it in the system tray while mounts keep running. Double-clicking the tray icon opens and focuses the main window. The tray Exit command unmounts every filesystem created by the process before exiting. A single-instance guard prevents two GugleFS processes from claiming the same mount point.
The shared VFS uses bounded short-lived caches: metadata for 3 seconds, directory listings for 2 seconds, and negative lookups for 1 second, with at most 4096 entries. Open files use 1 MiB sequential read-ahead. Create, write, truncate, rename, and delete operations update or invalidate relevant cache entries, including read-ahead buffers owned by other handles.
MappingConfig stores credential IDs, local private-key paths, pasted-key references, whether SFTP MFA is required, the proxy bypass flag, and approved SSH host-key fingerprints. It does not store passwords, private-key passphrases, proxy credentials, pasted private-key contents, or SFTP TOTP codes. Transient authentication material is passed only in the current IPC request and is not written to configuration, logs, or IPC responses.
Configuration is stored in mappings.json under the Tauri application configuration directory. Mount recovery IDs are stored separately in mount-state.json. Runtime errors and credentials are not persisted in either file.
Pushes to main run formatting, strict Clippy, Rust tests, and the production frontend build on Windows, Ubuntu, and macOS. The release workflow then publishes a <version>+build.<run_number> prerelease with:
- Windows x64 NSIS, including WinFsp
- Linux x64 DEB and AppImage
- macOS ARM64 App and DMG, including the FUSE-T installer, license, and attributions
macOS signing and notarization use the APPLE_CERTIFICATE, APPLE_CERTIFICATE_PASSWORD, APPLE_SIGNING_IDENTITY, APPLE_ID, APPLE_PASSWORD, and APPLE_TEAM_ID secrets. Signing is enabled only when the repository variable APPLE_SIGNING_ENABLED=true; otherwise the workflow produces unsigned artifacts. Windows and Linux signing credentials are not configured yet.
GugleFS is licensed under LGPL-3.0-only. The bundled FUSE-T installer remains under its own license.




