qrypt
qrypt turns your cloud drives into one encrypted local folder — mount it, open it, use it like any other drive.
Features
- FUSE mount — mounts all configured drives as subdirectories under one local directory
- rclone-compatible encryption — filename obfuscation and content encryption compatible with rclone crypt
- Pluggable cloud drive backends — see supported drivers for the full list
- Local read cache — caches remote file data locally for fast repeated access
- Staged writes — new files and modifications are written locally first, then uploaded asynchronously with configurable debounce, concurrency, and retry
- Platform-native FUSE — macOS (macFUSE), Linux (libfuse), Windows (WinFsp)
- macOS friendly — suppresses Apple Double metadata files and extended attributes clutter in Finder
- Diagnostics — debug socket with structured JSON reports, health tracking per mount, consistency checks, and staging inspection
- Bandwidth control — per-direction download and upload rate limiting
- Config auto-discovery — searches
./qrypt.toml,~/.qrypt/qrypt.toml, then$XDG_CONFIG_HOME/qrypt/qrypt.tomlon Unix or%AppData%\qrypt\qrypt.tomlon Windows
Requirements
| Dependency | macOS | Linux | Windows |
|---|---|---|---|
| FUSE | macFUSE | none (libfuse3 statically linked) | WinFsp |
| Go (source build only) | 1.27+ | 1.27+ | 1.27+ |
The fs commands (list, cat, get, put) do not require FUSE — only mount does.
Config files are discovered automatically; you can skip --config when the file
is at one of the standard paths (see CLI Reference).
Quick Start
- Download the latest release for your platform.
- Create
qrypt.toml:
mount_point = "~/Qrypt" [[mounts]] name = "local" type = "localfs" [mounts.params] root_path = "/tmp/qrypt-data" [mounts.encryption] password = "my-password" filename_encryption = "standard" filename_encoding = "base32" # content_dedup = false # true improves instant upload/dedup but leaks content equality
3.1 Run without mounting:
mkdir -p /tmp/qrypt-data ./qrypt fs list / echo "hello qrypt" > /tmp/hello.txt ./qrypt fs put /tmp/hello.txt /local/hello.txt ./qrypt fs cat /local/hello.txt
Check the backend storage — filenames are obfuscated:
ls /tmp/qrypt-data
Output similar to:
b4l6gr1s6t1q0tas6dl0q0mb0s62kbj0
Both the original filename and content are encrypted.
3.2 Mount and use like a local folder:
./qrypt mount
Open ~/Qrypt in your file manager — drag, drop, open files as if they were
local. Everything is encrypted on the backend.
Extended walkthrough → docs/for-user/quickstart.md.
User Documentation
- Quickstart — minimal config, encryption demo, Windows notes
- CLI Reference — commands, arguments, config discovery paths
- Full Config Reference — all configuration options
- Supported Drivers — driver parameters and examples
Developer Documentation
- Architecture — layer overview and design rules
- Package boundaries — ownership, forbidden dependencies, and migration criteria
- Driver Development — how to add a new cloud-drive backend
- Debugging — diagnostic tools and troubleshooting
- Fuzz Corpus — nightly fuzzing and regression corpus lifecycle
- Quality Gates — CI workflows, coverage gate, contract matrix
- Developer FAQ — recurring implementation issues and fixes
Building from Source
Requires Go 1.27+ and FUSE headers (libfuse3-dev on Linux, macFUSE on macOS).
Linux builds use FUSE3 by default; mounting also requires the fuse3 runtime and
/dev/fuse. Legacy FUSE2 builds can be produced with -tags fuse2.
git clone https://github.com/yinzhenyu-su/qrypt.git
cd qrypt
go build ./cmd/qrypt
License
MIT
