Blog
PLEN

Obsidian + CouchDB livesync — moja zamiana Notion

Notion był wygodny, ale dane na cudzym serwerze i lock-in formatu. Obsidian + CouchDB livesync daje to samo, lokalnie, z markdown na dysku. Pokazuję setup.

·3 min read
Obsidian + CouchDB livesync — moja zamiana Notion

Notion miałem 3 lata. Działał. Aż któregoś dnia wpadłem na to, że eksport mojej bazy zajmie dwie godziny i wyjdzie HTML chaos. Zmigrowałem do Obsidian z CouchDB livesync, markdown na dysku, sync między urządzeniami, zero zewnętrznego SaaS.

Dlaczego Obsidian

Trzy rzeczy:

  1. Pliki to markdown. Mogę otworzyć bez aplikacji. grepować. backupować jak każdy folder.
  2. Lokalność. Storage to mój dysk. Nie ma "cloud sync" jako default, sam decyduję czy i gdzie sync.
  3. Plugins. Społeczność jest większa niż Notion miało za czasów świetności.

Czemu CouchDB

Self-hosted livesync wymaga jakiejś bazy. Plugin obsidian-livesync wspiera CouchDB i kilka innych. Wybrałem CouchDB bo:

  • działa offline-first (replikacja)
  • end-to-end encryption (passphrase, plugin sam szyfruje)
  • jest stabilny (od 2005)

Architektura

[iPhone Obsidian] ←→ [Mini PC: CouchDB] ←→ [Macbook Obsidian]

                     [Daily backup: pg_dump-like]

Każde urządzenie utrzymuje lokalny vault na dysku. Plugin syncuje deltami przez CouchDB. CouchDB żyje u mnie na mini PC, dostępny przez obsidian-sync.kamilkaletka.dev (Cloudflare tunnel + Zero Trust).

Setup CouchDB

Docker compose:

services:
  couchdb:
    image: couchdb:3.3
    environment:
      COUCHDB_USER: admin
      COUCHDB_PASSWORD: ...
    ports:
      - "127.0.0.1:5984:5984"
    volumes:
      - couchdb-data:/opt/couchdb/data
 
volumes:
  couchdb-data:

Po docker compose up -d wchodzisz na localhost:5984/_utils, tworzysz bazę obsidian-vault, generujesz user-a non-admina, i już.

Konfiguracja pluginu

W Obsidian: Settings → Community plugins → Self-hosted LiveSync.

Pola:

  • URI: https://obsidian-sync.kamilkaletka.dev
  • DB name: obsidian-vault
  • Username/Password: non-admin user
  • E2E encryption passphrase: zapisuję w 1Password

Passphrase to KLUCZOWA rzecz. Bez niej zsynchronizowane dane są w plain-text na CouchDB. Jak ktoś złamie auth, czyta. Z passphrase, zaszyfrowane jak fort knox.

Workflow który zadziałał

Daily notes na telefonie. Dictate Siri → Obsidian quick capture → automatycznie syncuje. Wracam do domu, otwieram Macbooka, kontynuuję notatkę.

Linki między notatkami. [[koncept-x]] daje 2-way link. Buduje się z czasem graf, którego w Notion (z tableami i pageami) nigdy nie miałem.

Tagi vs foldery. Foldery do "od kiedy" (rok-miesiąc), tagi do "o czym". Tag może być na 50 notatkach, folder zwykle ma 1.

Pułapki

1. Passphrase utracone = vault stracony. Plain text na CouchDB jest zaszyfrowany. Jak zgubisz passphrase, nie zdekryptujesz. Backup passphrase w bezpiecznym miejscu.

2. Konflikty merge. Dwa urządzenia edytują tę samą notatkę offline → przy syncu plugin tworzy notatka.conflict.md. Manualne sklejanie. Rzadko, ale boli.

3. Migracja z Notion. Eksport Notion to chaos. Użyłem notion-to-obsidian jako start, potem 3 dni ręcznego sprzątania. Warto przejrzeć przed migracją czy jest coś w Notion-only formatcie.

4. Mobile sync ma latency. Plugin ma replikację co ~30 sekund domyślnie. Jak chcesz ASAP, ustaw replication interval na 5s w pluginie.

Co straciłem (i nie żałuję)

  • Tabele z formułami. Notion miał inline DB. Obsidian ma plugin Dataview, ale to nie to samo. Dla mnie strata akceptowalna.
  • Współpraca w czasie rzeczywistym. Notion miał Google-Docs-style. CouchDB livesync to async. Jak współpracujesz z 5 osobami, Obsidian nie jest tym narzędziem.
  • Templates UI. Notion miał ładny UI do template'ów. Obsidian ma plugin, jest brzydszy ale działa.

Po roku z Obsidian + CouchDB nie wracam. Markdown na dysku to spokój ducha którego cloud nie da. A livesync rozwiązuje jedyny realny minus self-hosted'a, multi-device. Setup zajmuje godzinę, opłacalność widać po tygodniu.