▲ 4 r/ObsidianMD
Hey r/ObsidianMD,
I've been using Obsidian Sync for a while, but the official CLI kept driving me crazy. It's a minified cli.js that constantly drops connections, and since it's not really open source, there's no way to fix it or contribute improvements.
So I decided to do something about it.
What I did:
- Used AI to help un-minify the official
cli.jsand understand the protocol - Built a clean 1:1 TypeScript port to reverse-engineer how it actually works
- Rewrote the entire thing from scratch in Go with proper error handling
What's different:
- 🔗 Reliable reconnection — WebSocket backoff that actually survives network drops
- ⚡ Parallel downloads — chunked transfers that sync full vaults much faster
- 🧠 Lower memory — Go binary uses a fraction of the RAM vs Node.js
- 📦 Native packages — .deb, .rpm, .apk, Homebrew, Winget, Docker
- 🔓 Actually open source — GPL-3.0, readable code, contributions welcome
It supports the full Obsidian Sync + Publish protocol with E2E encryption. I've been using it daily on my NAS and it's been rock-solid.
If anyone else has been frustrated with the official CLI, you can check it out here: https://belphemur.github.io/obsidian-headless/
Happy to answer questions about the reverse-engineering process or the Go implementation!
u/Belphemur — 15 days ago