duckuments34 downloadsMinimal self-hosted CouchDB live sync for your vault, with end-to-end encryption and multiple remote vaults.
Minimal self-hosted CouchDB live sync for your Obsidian vault, with end-to-end encryption and multiple remote vaults.
It keeps your notes in your own CouchDB instead of a third-party service. Notes are encrypted on your machine before they ever leave it, so the server only stores opaque ciphertext.
Only text files sync for now (md, txt, json, css, canvas, html, csv, svg, xml, yml, yaml). Binary files (images, PDFs) need CouchDB attachments and aren't supported yet. Note content is encrypted; the file path is not.
main.js, manifest.json, and styles.css from a release.<your-vault>/.obsidian/plugins/duckuments-live-sync/.Open the plugin's settings tab and add a remote vault:
| Field | Example |
|---|---|
| Name | My Couch |
| CouchDB URL | https://couch.example.com:6984 |
| Username / Password | your CouchDB credentials |
| Database | my_vault |
| Passphrase | E2EE passphrase (blank = no encryption) |
Set one remote as the default, then toggle Live sync on, or use the commands below.
The Copy public link for the active note command publishes the current note as a public web page and copies its URL to your clipboard.
slug is written into the note's frontmatter (or reused if already present), so the link stays the same every time you re-publish: https://obsidian.loonielabs.net/r/<slug>.pub:<slug> snapshot document to your default remote holding the note's plaintext markdown and title./r/<slug>: its backend reads pub:<slug> from CouchDB (credentials stay server-side) and the page renders the markdown with a live table of contents.⚠️ Published snapshots are not encrypted. Unlike synced notes, the snapshot is stored as plaintext so the viewer can read it without your passphrase. Anyone with the link can read the note. The slug is unguessable but the page is not access-controlled.
It's a snapshot, not a live mirror — re-run the command to update the published copy. There's no "unpublish" command yet; delete the pub:<slug> document from CouchDB to take a note down.
npm install
npm run dev # watch build
npm run build # typecheck + production build
For local testing, copy .env.example to .env and set PATHS_TEST_INSTALL to your vault's plugin folder. The build copies main.js / manifest.json / styles.css there. Separate multiple paths with : (Unix) or ; (Windows).
MIT