emarpiee52 downloadsClient-side file and folder encryption plugin, 100% compatible with Rclone Crypt.
English | 简体中文 | 繁體中文 | Español | Français | Deutsch | 日本語 | 한국어 | Русский | العربية | עברית
Client-side file and folder encryption for Obsidian, fully compatible with the official Rclone Crypt standard.
obsidian-rcrypt runs 100% offline using pure web cryptography primitives (@noble/ciphers and @noble/hashes). It requires no local rclone binary installation and operates seamlessly across desktop and mobile platforms (Android, iOS, macOS, Windows, Linux).
Disclaimer: This plugin is an independent open-source project and is not affiliated with, maintained by, or endorsed by the official Rclone project.
rclone cat, rclone mount, rclone copy).https://github.com/emarpiee/obsidian-rcryptmain.js, manifest.json, and styles.css (if available) from the latest GitHub Release.<vault>/.obsidian/plugins/obsidian-rcrypt/.<vault>/.obsidian/plugins/obsidian-rcrypt/.cd /path/to/vault/.obsidian/plugins/
git clone https://github.com/emarpiee/obsidian-rcrypt.git
cd obsidian-rcrypt
npm install
npm run build
password and password2 in rclone.conf).Standard, Obfuscate, or Off).Base32 (default), Base64, or Base32768)..bin, matching Rclone's --crypt-suffix default).Ctrl/Cmd + P and search for RCrypt commands to process active files or specific paths.obsidian-rcrypt inspects output bytes and alerts you:🔓 Decrypted outer layer for 1 item(s). Inner encryption layer detected!
[!TIP] Use Cases for Multi-Layer Encryption:
- Tiered Access Control: Apply a private inner passphrase for confidential notes, then wrap with a secondary outer profile for backup or secondary protection.
- Metadata Obfuscation: Wrap files encrypted with
OfforObfuscatemode inside an outerStandardprofile to scramble directory structure and extensions.
[!CAUTION] Avoid opening or modifying raw binary ciphertext files in text editors between passes, as text conversion corrupts binary header structures (
RCLONE\x00\x00).
| Primitive / Component | Implementation | Technical Standard & Parameters |
|---|---|---|
| Key Derivation | scrypt |
Derives an 80-byte key buffer (N=16384, r=8, p=1). Split into dataKey (bytes 0–31), nameKey (bytes 32–63), and nameTweak (bytes 64–79). Defaults to Rclone's 16-byte fixed default salt if empty. |
| Payload Cipher | NaCl SecretBox |
XSalsa20 stream cipher with Poly1305 MAC tags (16 bytes per 64 KiB block). Prefixed by an 8-byte magic header (RCLONE\x00\x00) and a 24-byte base nonce. |
| Filename Encryption | EME (AES-256) / Obfuscate / Off |
Standard: AES-256 EME wide-block cipher padded with PKCS#7 using nameKey & nameTweak (Base32, Base64, or Base32768).Obfuscate: Rclone character-rotation cipher. Off: Plaintext with optional extension suffix. |
| Multi-Layer Encryption | Multi-Pass XSalsa20 |
Recursive byte-level payload wrapping matching Rclone CLI. Smart byte inspection detects inner RCLONE\x00\x00 headers post-decryption. |
| On-Disk Credential Store | AES-256-CTR Obscure |
AES-256 in CTR mode using Rclone's internal fixed 256-bit key and random 16-byte IV (Base64 URL-safe). |
[!NOTE] Independent Content & Filename Decryption: Key derivation produces separate
dataKey(payload) andnameKey(filename) buffers. File content unlocks whenever the passphrase and salt are correct—even if filename mode or encoding settings are mismatched. (Mismatched filename settings only cause the output file extension or filename to appear scrambled).
Ctrl/Cmd + P) to wipe credentials instantly.data.json)rclone obscure algorithm.data.json and the open-source Rclone key can reverse them. Use RAM-Only mode for maximum security.[!WARNING] Important Warnings & Limitation of Liability:
- Irrecoverable Data Loss: Encryption operates directly on disk files. If credentials are lost or misconfigured, data cannot be recovered by anyone. Always maintain unencrypted backups of critical notes.
- Multi-Layer Decryption Order: Decryption of nested files must proceed in exact reverse order (Outer $\rightarrow$ Inner). Losing credentials for any intermediate layer permanently locks all inner contents.
- Third-Party Vault Sync: Verify whether your sync solution (Obsidian Sync, Git, iCloud) is syncing plaintext source files or encrypted outputs.
- No Warranty: Provided "as is" under the MIT License without warranty of any kind. Developers accept no liability for data loss or corruption resulting from use.
In Rclone Crypt standard, Filename Encryption Mode (filename_encryption) and Filename Encoding (filename_encoding) are separate configurations with specific compatibility rules:
| Filename Encryption Mode | Supports filename_encoding? |
Description |
|---|---|---|
standard |
YES (base32, base64, base32768) |
Encrypts filename bytes using AES-256 EME wide-block cipher. Requires an encoding scheme to convert binary bytes into a string filename. |
obfuscate |
NO (Ignored by Rclone CLI) | Applies lightweight character rotation (cipher.obfuscateSegment). Operates directly on string characters, so byte encoding does not apply. |
off |
NO (Ignored by Rclone CLI) | Leaves filenames in plaintext and appends a configurable suffix (default: .bin, matching Rclone's --crypt-suffix default). |
standard):base32 (Default): Unpadded Extended Hex Base32 (0123456789abcdefghijklmnopqrstuv). Works across all cloud remotes and local filesystems.base64: URL-safe unpadded Base64 (- and _). Best for case-sensitive cloud backends (Google Drive, S3).base32768: Compact UTF-16 Base32768 encoding. Significantly reduces filename length on cloud backends counting UTF-16 characters (OneDrive, Dropbox, Box).Files encrypted in RCrypt can be accessed or mounted directly using the official Rclone CLI by setting up a matching crypt remote in your rclone.conf:
[myvault]
type = crypt
remote = <path_to_vault_or_underlying_remote>
password = <your_obscured_passphrase>
password2 = <your_obscured_salt>
filename_encryption = <match_profile: standard | obfuscate | off>
# filename_encoding only applies when filename_encryption = standard
filename_encoding = <base32 | base64 | base32768>
# suffix only applies when filename_encryption = off (default: .bin)
suffix = <match_profile: .bin or custom>
[!IMPORTANT] Match Your Profile Settings: The
filename_encryptionandfilename_encodingvalues inrclone.confmust match the specific RCrypt profile settings used during encryption:
Parameter rclone.confFieldExplanation & Valid Options Storage Location remotePath to local vault (e.g. /path/to/obsidian/vault) or cloud remote path (e.g.gdrive:vault)Passphrase passwordObscured string ( rclone obscure <passphrase>)Salt password2Obscured string ( rclone obscure <salt>)Filename Encryption Mode filename_encryptionstandard,obfuscate, oroffFilename Encoding filename_encodingbase32(default),base64, orbase32768— only used whenfilename_encryption = standardFile Suffix suffixDefault .bin(Rclone standard) — only used whenfilename_encryption = off
rclone obscure CLI tool.backend/crypt) — Official Go implementation repository.