https://github.com/tomas789/syncline
A privacy-first, self-hosted synchronization system for Obsidian vaults. Powered by Rust and CRDTs for seamless, conflict-free merging across devices, even after extended offline periods.
https://github.com/tomas789/syncline
crdt obsidian obsidian-md obsidian-plugin offline-first privacy rust self-hosted sqlite sync synchronization wasm websockets
Last synced: about 2 months ago
JSON representation
A privacy-first, self-hosted synchronization system for Obsidian vaults. Powered by Rust and CRDTs for seamless, conflict-free merging across devices, even after extended offline periods.
- Host: GitHub
- URL: https://github.com/tomas789/syncline
- Owner: tomas789
- License: mit
- Created: 2026-02-17T20:13:03.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-04-22T09:57:42.000Z (2 months ago)
- Last Synced: 2026-04-22T11:18:27.678Z (2 months ago)
- Topics: crdt, obsidian, obsidian-md, obsidian-plugin, offline-first, privacy, rust, self-hosted, sqlite, sync, synchronization, wasm, websockets
- Language: Rust
- Homepage: https://syncline.readthedocs.io/
- Size: 8.21 MB
- Stars: 3
- Watchers: 0
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
Vault Sync You Actually Own.
Keep your vault in sync across all devices.
No subscriptions • No cloud lock-in • No third-party servers
You run the server. You own the data. It just works.
Installation •
Features •
How It Works •
FAQ
---
## Why Syncline?
Every other sync option for Obsidian requires you to hand your notes to someone else's servers. Obsidian Sync costs $8/month. iCloud and Dropbox can't merge text edits, so you end up with `Note (conflict copy 2).md` scattered across your vault.
Syncline runs on your own machine. It stores everything in a single SQLite file. And it uses CRDTs to merge edits at the character level, so two people can edit the same paragraph offline for a week and the result still comes out clean.
| | Syncline | Obsidian Sync | iCloud / Dropbox |
| ------------------------- | -------- | ------------- | ---------------- |
| **You own the data** | ✅ | ❌ | ❌ |
| **Self-hosted** | ✅ | ❌ | ❌ |
| **Works offline** | ✅ | ✅ | Partial |
| **No conflict dialogs** | ✅ | ❌ | ❌ |
| **Binary file sync** | ✅ | ✅ | ✅ |
| **Single-file database** | ✅ | ❌ | ❌ |
| **Subscription required** | ❌ | ✅ | ✅ |
---
## Features
**Privacy-first.** Your notes stay on your infrastructure. A home server, a VPS, a Raspberry Pi sitting in a closet. No telemetry, no analytics.
**Single-file storage.** The entire vault history lives in one `syncline.db` file. Back it up by copying that file. Done.
**Fast.** Written in Rust. Sync happens over WebSockets, so changes show up on other devices in milliseconds.
**Offline for as long as you want.** Go off-grid for weeks. When you reconnect, Syncline merges everything automatically. No manual conflict resolution, ever.
**Character-level merging.** Built on CRDTs (the same tech behind Notion and Figma's collaborative editing). Two devices editing the same note at the same time? The edits merge mathematically. You won't see a "conflict file."
**Binary files too.** Images, PDFs, attachments — all synced. If two devices modify the same binary file offline, both versions are kept with distinct names.
---
## How It Works
```
Your Laptop Your Server Your Phone
(Obsidian) (Syncline) (Obsidian)
│ │ │
│── edit note ──────►│ │
│ │── push update ────►│
│ │ │
│ (go offline) │ (go offline) │
│── edit note A │ │── edit note A
│ │ │
│ (reconnect) ────►│◄─── (reconnect) ───│
│ │ │
│◄── merged A+B ─────┤──── merged A+B ───►│
│ (no conflicts!) │ │
```
The server keeps a compact history of changes. When you reconnect after being offline, it sends you only what changed and merges your local edits automatically.
---
## Installation
### Step 1: Run the Syncline Server
The quickest option on Mac or Windows is the **Syncline Desktop App**. It sits in your system tray, manages the database, and gives you the connection URL.
**Grab the installer from the [Releases Page](https://github.com/tomas789/syncline/releases):**
- **Mac:** `.dmg`
- **Windows:** `.msi` or `.nsis.zip`
It starts with your computer. Click the menu bar icon → **Start Server**.
---
**CLI / headless setup:**
For a Linux VPS or Raspberry Pi where there's no GUI:
```bash
# Download the CLI binary from Releases, or build from source:
cargo run -- server --port 3030 --db-path ./syncline.db
```
### Step 2: Install the Plugin
**Option A — Community Plugins (recommended)**
1. Open Obsidian → Settings → Community Plugins
2. Search for **Syncline**
3. Install, then Enable
**Option B — Manual**
1. Download `main.js`, `manifest.json`, and `styles.css` from the [latest release](https://github.com/tomas789/syncline/releases)
2. Copy them to `/.obsidian/plugins/syncline-obsidian/`
3. Reload Obsidian, enable in Settings → Community Plugins
### Step 3: Connect
1. Settings → Syncline
2. Enter your server URL (e.g. `ws://192.168.1.100:3030/sync` or `wss://sync.yourdomain.com/sync`)
3. Click **Connect**
Syncing starts immediately. Install the plugin on your other devices and point them to the same server.
---
## FAQ
**Do I need the server running 24/7?**
No. Changes are stored durably in SQLite. If the server's down while you edit, your changes queue locally and sync the next time it's reachable.
**What if two devices edit the same note offline?**
Both sets of edits are merged automatically via CRDTs. You won't lose anything you typed.
**What about images and attachments?**
Fully supported. Binary files sync using content-addressed storage. If two devices modify the same binary file concurrently, both versions are kept with distinct names.
**Is my data encrypted?**
Data travels over WebSockets. For encryption in transit, put the server behind a reverse proxy with TLS (Nginx + Let's Encrypt works well). End-to-end encryption is planned but not yet implemented.
**How do I back up?**
Copy the `syncline.db` file. That single file has the full history of your vault.
**Mobile support?**
Yes. The plugin works on both desktop and mobile Obsidian.
---
## Repository
- **Main repository:** [github.com/tomas789/syncline](https://github.com/tomas789/syncline)
---
## License
MIT