by shikakun
Sync a vault across your own devices through a server on your own Cloudflare account.
Obsttorte
Obsttorte is software that syncs an Obsidian vault across multiple devices. It consists of a server that runs on Cloudflare Workers, D1, and R2, an Obsidian plugin, and a CLI.
For each vault, you self-host a server in your own Cloudflare account. It syncs your entire vault, including the plugins and settings in the config folder as well as your notes. It also offers per-file merging, a UI for resolving conflicts, and a revision history you can restore from.
Requirements
- A Cloudflare account on the Workers Paid plan
- The Workers Free plan does not provide enough CPU time or D1 storage.
- Obsttorte uses R2 for storage and Cloudflare Zero Trust for access control. For personal use, it is designed to stay within their free tiers.
- Node.js 22 or later for running the CLI
- Obsidian 1.13.0 or later
Installation
Server
npx obsttorte@latest setup
The CLI walks you through creating a Worker, a D1 database, and an R2 bucket, then deploys them. It then shows the steps for setting up Cloudflare Access. Follow them in the Cloudflare dashboard, and enter the AUD tag, the Client ID, and the service token’s expiration date. Your answers are saved to ~/.config/obsttorte/<worker-name>.json, excluding secrets such as tokens.
You need a server for each vault. To create several servers in a single Cloudflare account, give each one its own Worker name with the --name option.
npx obsttorte@latest setup --name obsttorte-work
Plugin
Install Torte from Obsidian’s Community plugins.
- In Obsidian, open Settings → Community plugins, select Browse, and search for “Torte”.
- Install Torte and enable it.
- In the Torte settings, enter the server URL, Access Client ID, Access Client Secret, and device token.
Device tokens
Each device gets its own device token. If you lose a device, you can stop it from syncing by revoking its device token.
npx obsttorte@latest device add --device-name iPhone
npx obsttorte@latest device list
npx obsttorte@latest device revoke <ID>
Updating
npx obsttorte@latest update
This deploys the latest code to your server and applies database migrations. If you run several servers, specify one with --name, or update all of them with --all. Update the Obsidian plugin from within Obsidian on each device where it is installed.
Caveats
- Do not use it on a vault that is already synced with Obsidian Sync, iCloud Drive, Dropbox, or similar services.
- On the iOS and Android mobile apps, due to OS restrictions, syncing happens only while Obsidian is in the foreground.
- Files larger than 100 MB cannot be synced.
- Files are stored on the server without encryption. If your Cloudflare account credentials leak, the contents of your files could be exposed.
- If you enable JavaScript in a plugin that runs note content as code, such as dataviewjs in Dataview or Templater, JavaScript in notes synced from other devices may run.
- The developer is not responsible for any data loss caused by bugs in this software.
Privacy policy
The plugin communicates only with the server you created, and the CLI communicates only with that server and the Cloudflare API. Nothing is sent to the developer. The data sent to the server is the files in your vault, their hashes, and your device credentials.
License
Obsttorte is distributed under the MIT License. Copyright © 2026 @shikakun.
See LICENSE for more information.
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.