Obsidian WebDAV Sync
WebDAV Sync is a plugin for Obsidian that syncs your vault with a WebDAV server. It excels existing solutions at reliable bidirectional syncing, better performance and the freedom from vendor lock-in.
WebDAV Sync is a plugin for Obsidian that syncs your vault with a WebDAV server. It excels existing solutions at reliable bidirectional syncing, better performance and the freedom from vendor lock-in.
Obsidian WebDAV Sync is a general-purpose & bidirectional WebDAV syncing plugin for Obsidian. It is created due to the current landscape that no single plugin can reliably and conveniently sync your vault with a WebDAV server. It excels existing solutions at reliable bidirectional syncing, better performance and the freedom from vendor lock-in:
🔄 Reliable Bidirectional Syncing:
🔀 Auto Sync and Conflict Handling:
🔐 Client-side Encryption:
⚡ Maximum Performance:
🧰 Detailed Config:
📦 Production-Level Scalability:
🎨 Excellent UI and Observability:
As an Obsidian user working across multiple devices, I've personally encountered the sync dilemma: finding a solution that's reliable, flexible, and doesn't compromise data integrity. After trying nearly every syncing plugin in the community, I found that each came with trade-offs that frustrated my daily workflow:
Then I discovered Nutstore Sync — an excellent plugin, but designed for Nutstore only. I thought: why not make this general-purpose? So I forked it, extensively overhauled it for no vendor lock-in, better performance, and improved stability. What came out was Obsidian WebDAV Sync.
To sync an Obsidian vault to a WebDAV server is a typical distributed coordination problem, where each client has their own copy and changes of the vault and there's no centralized resolver between. The goal is to synchronize the vaults between clients for maximum data integrity.
To address this, this plugin keeps a record of the last known sync state of local and remote files. During syncing evaluates three states (current local, current remote, recorded local and remote in last sync) for each file path and decides the sync action accordingly:
✅ = Exists, ❌ = Doesn't Exist, ✏️ = Changed Compared to Record
| Cases | Local File | Remote File | Sync Record | Action |
|---|---|---|---|---|
| 1 | ✅ | ✅ | ✅ | ⏭️ Skip (already synced) |
| 2 | ✏️ | ✏️ | ✅ | ⚠️ Resolve Conflict (apply strategy) |
| 3 | ✅ | ✏️ | ✅ | ⬇️ Pull (download remote) |
| 4 | ✏️ | ✅ | ✅ | ⬆️ Push (upload local) |
| 5 | ✅ | ❌ | ✅ | 🗑️ Delete Local (cleanup) |
| 6 | ❌ | ✅ | ✅ | 🗑️ Delete Remote (cleanup) |
| 7 | ❌ | ✏️ | ✅ | ⬇️ Pull (restore from remote) |
| 8 | ✏️ | ❌ | ✅ | ⬆️ Push (restore to remote) |
| 9 | ✅ | ✅ (comparing with local) | ❌ | 📝 Record (capture unrecorded file) |
| 10 | ✅ | ✏️ (compared with local) | ❌ | ⚠️ Resolve Conflict (first sync) |
| 11 | ❌ | ✅ | ❌ | ⬇️ Pull (new remote file) |
| 12 | ✅ | ❌ | ❌ | ⬆️ Push (new local file) |
| 13 | ❌ | ❌ | ✅ | 🧹 Clean Record (database cleanup) |
Client-side encryption is the most rigorously designed part in the plugin. Encryption is not as simple as using a key to encode a part of file, which can be broken by attackers within minutes. The real encryption process in WebDAV Sync involves multiple layers of confusion and diffusion, as shown in the diagram below.
Root File Key
File Content
File Key
Name Key
File Name
User Password
Master Key
Master Salt
Account Name
Server Endpoint
Remote Directory
File Size
File Path
16 Byte Random File Salt
File Key Salt
Chunk Count
The use of WebDAV server information in salting user's password avoids risks brought by Rclone-style universal fixed salt. By choosing AES-GCM-SIV-256 as the deterministic algorithm for file path encryption, and directly weaving files paths and sizes into file encryption keys, the algorithm can maximally validate the integrity of downloaded files, as well as detecting malicious file movement and truncation.
The resulting encryption pipeline is theoretically more secure, fast, and Obsidian-native than similar solutions (like Rclone Crypt), and competitor plugins (like Remotely Save, which uses Crypt under the hood).
There's more things to delve into the technological aspect of this plugin.
For example, comparing four states before syncing means we need a whole WebDAV, local vault and record traversal at the start of each sync, which is impractical for large vaults. To address this, Fast Mode is introduced that reuses the remote state in the record as current state, which avoids traversing the whole WebDAV each sync. Fast mode is enabled by default for real-time syncs and a normal sync (which is triggered by manual, periodic, or startup sync) is recommended before fast mode syncs.
Moreover, to store the records and content of all files (to compare and decide whether a file is changed) requires a huge and active amount of storage to ensure fidelity. This plugin leverages IndexedDB to store the records and query them on-demand.
Also, to control memory usage and prevent crashes when downloading large files, this plugin has specialized load balancing and download chunking mechanisms. When a file has size larger than a user-configured threshold, the plugin will split the files into chunks and download in parallel, and save them immediately in local cache when each chunk is finished. In the final pass, the plugin sorts the cache and writes the complete file incrementally. This not only ensures the memory consumption at a constant low level when handling gigabytes of file, also makes large file downloading fully resumable.
Since the plugin is currently launched in Obsidian official plugin store. You can install it from Obsidian plugin registry.
HēsperusAlways backup important notes before your initial sync. While the plugin handles file presence resolution robustly, having a backup provides peace of mind during first-time setup.
Obsidian WebDAV Sync is licensed under the AGPL-3.0 License.