rosswang234 downloadsSync Obsidian vault with Joplin Server — bidirectional, attachments, tags, links.
Bidirectional sync between Obsidian and a Joplin Server instance. Keeps your notes, folders, and attachments in sync across multiple devices, with optional end-to-end encryption.
joplin-file-id in its frontmatter, and a persistent change log drives conflict-free merge across multiple syncing clientsForce push wipes the server (protecting info.json and E2EE master keys) then re-uploads everything; Force pull wipes local files then re-downloads everything.obsidian/, _conflicts/, templates/) via comma-separated prefixesyanqingwang/obsidian-joplin-server-syncDownload main.js, manifest.json, and styles.css from the latest release and place them in your vault at .obsidian/plugins/joplin-server-sync/.
https://joplin.example.com — without /api)| Command | Description |
|---|---|
| Sync now | Run a bidirectional sync cycle (push then pull) |
| Force push | Delete server items (keeps info.json and E2EE master keys), then upload the entire vault |
| Force pull | Delete local files (keeps the plugin config), then download the entire server |
| Test Joplin Server connection | Verify login credentials |
| Upload vault to Joplin Server | Initial upload of all notes |
| About / Status | Show mapping statistics |
| Setting | Description |
|---|---|
| Server URL | Joplin Server base URL (without /api) |
| Email / Password | Joplin Server account credentials (password stored in plugin data.json) |
| Auto sync interval | Seconds between automatic syncs. 0 = manual only (min 60) |
| Sync on startup | Run a sync when Obsidian starts |
| Conflict strategy | Duplicate, Local wins, or Remote wins |
| Sync folders only | Sync folder structure only, no note content (useful for testing) |
| Exclude patterns | Comma-separated path prefixes to skip |
| Enable E2EE | Toggle end-to-end encryption (requires a password; loads and verifies server master keys) |
| E2EE password | Password used to encrypt/decrypt items |
| Load E2EE keys | Load master keys from the server using the E2EE password |
JED01 header, master keys, SJCL-compatible AES/KeyV1/FileV1/StringV1 item types).git clone https://github.com/yanqingwang/obsidian-joplin-server-sync
cd obsidian-joplin-server-sync
npm install
npm run dev
npm run build
Run the test suite:
npx esbuild test/full-change-sync.test.ts --bundle --platform=node --format=esm --outfile=test/full-change-sync.mjs --alias:obsidian=./test/mock/obsidian-real.ts
node test/full-change-sync.mjs
MIT
Copyright (c) 2026 rosswang (Heart and Road Ltd)