No description
  • TypeScript 97.8%
  • JavaScript 1.4%
  • CSS 0.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-17 18:23:53 +02:00
docs ONC-10: M9 – Automatik (Scheduler, Mutex mit Re-Run-Flag, stille Auto-Läufe), Login Flow v2, gedrosseltes Speichern 2026-10-17 17:00:32 +02:00
scripts ONC-1: M0 – Verifikation der Collectives-API 2026-10-16 10:25:08 +02:00
src ONC-10: Review-Fixes – manuelle Anfrage in der Warteschlange, eigene Renames/Löschungen ohne Auslöser, Pause-Ende bei neuem Passwort, Hinweis zur Erstsynchronisation, 5xx beim Polling 2026-10-17 17:05:20 +02:00
tests ONC-10: Performance-Test löscht seine Collective endgültig (Papierkorb bremst den Testserver) 2026-10-17 17:37:17 +02:00
.gitignore .gitignore: dev-vault zum Ignorieren hinzugefügt 2026-10-16 14:24:27 +02:00
AGENTS.md ONC-2: ADR 0013 (Lokalisierung DE/EN) und ADR 0014 (Passwortfeld statt SecretComponent) 2026-10-16 12:14:49 +02:00
CLAUDE.md Initialize project with plan and agent instructions 2026-10-16 08:39:03 +02:00
esbuild.config.mjs Build kopiert Plugin-Dateien automatisch in dev-vault/ 2026-10-16 14:25:37 +02:00
eslint.config.mts ONC-6: Bestätigungsdialog, Einstellungen, SyncController, Texte, Skip-Hinweise 2026-10-16 17:52:05 +02:00
LICENSE Initialize project with plan and agent instructions 2026-10-16 08:39:03 +02:00
manifest.json ONC-2: Projektgerüst aus obsidian-sample-plugin, ESLint, Vitest, Stubs 2026-10-16 11:11:54 +02:00
package-lock.json ONC-3: API-Clients – HttpClient, OCS, WebDAV, CollectivesApi 2026-10-16 14:05:50 +02:00
package.json ONC-3: API-Clients – HttpClient, OCS, WebDAV, CollectivesApi 2026-10-16 14:05:50 +02:00
PLAN.md ONC-10: M9 – Automatik (Scheduler, Mutex mit Re-Run-Flag, stille Auto-Läufe), Login Flow v2, gedrosseltes Speichern 2026-10-17 17:00:32 +02:00
README.md ONC-10: M9 – Automatik (Scheduler, Mutex mit Re-Run-Flag, stille Auto-Läufe), Login Flow v2, gedrosseltes Speichern 2026-10-17 17:00:32 +02:00
styles.css ONC-7: nur noch tags (kein nc_tags, keine Option), Emoji an Ordnern, Seite des Ordners zuerst in der Dateiliste 2026-10-17 13:57:38 +02:00
tsconfig.json ONC-2: Projektgerüst aus obsidian-sample-plugin, ESLint, Vitest, Stubs 2026-10-16 11:11:54 +02:00
versions.json ONC-2: Projektgerüst aus obsidian-sample-plugin, ESLint, Vitest, Stubs 2026-10-16 11:11:54 +02:00
vitest.config.ts ONC-3: API-Clients – HttpClient, OCS, WebDAV, CollectivesApi 2026-10-16 14:05:50 +02:00
vitest.integration.config.ts ONC-4: End-to-End-Integrationstest Pull, Integrationstests sequenziell, ADR 0016, PLAN und API-Notizen 2026-10-16 15:13:31 +02:00

Nextcloud Collectives Sync (Obsidian-Plugin)

Obsidian-Plugin, das alle Collectives eines Nextcloud-Servers bidirektional mit einem Vault synchronisiert.

Status: in Entwicklung (M5: Struktur) – noch nicht einsatzbereit. Spezifikation und Meilensteine: PLAN.md. Hinweise für Coding-Agents: AGENTS.md.

Hilfe

Anmeldung und automatische Synchronisierung

In den Einstellungen meldest du dich entweder mit „Anmelden“ im Browser an (Nextcloud Login Flow: Benutzername und App-Passwort werden danach automatisch eingetragen, das App-Passwort liegt im Secret Storage von Obsidian) oder trägst ein App-Passwort von Hand ein. Danach synchronisiert das Plugin von selbst: kurz nach dem Start, im eingestellten Intervall (Standard 5 Minuten, 0 = aus), einige Sekunden nachdem du eine Notiz zuletzt geändert hast und wenn Obsidian auf dem Handy wieder in den Vordergrund kommt. Automatische Läufe sind still und öffnen keine Dialoge: Rückfragen (z. B. beim Löschen) werden zurückgestellt, ein Hinweis erinnert dich daran, „Jetzt synchronisieren“ auszuführen. Weist der Server das Passwort ab, pausieren die automatischen Läufe, bis du dich neu anmeldest. Die Erstsynchronisierung eines Vaults mit Inhalt startest du immer selbst. Eine Checkliste für Tests auf dem Handy steht in docs/manual-test.md.

Emoji und Tags

Emoji (nc_emoji) und Tags (Obsidians Eigenschaft tags) einer Seite stehen im Frontmatter der Notiz und werden in beide Richtungen abgeglichen: Änderst du sie in der Notiz, gehen sie beim nächsten Sync zum Server (fehlende Tags werden im Collective angelegt, ohne Beachtung der Groß-/Kleinschreibung gegen vorhandene geprüft). Änderst du sie auf dem Server und in der Notiz, verhält es sich wie bei einer Textänderung auf beiden Seiten: Je nach Einstellung „Konfliktstrategie“ entsteht eine Konfliktkopie (die Notiz bleibt wie sie ist, die Werte des Servers stehen in der Kopie) oder die lokale bzw. die Server-Fassung gewinnt. Die Eigenschaften des Plugins (nc_…) sind standardmäßig ausgeblendet (Einstellung „Eigenschaften des Plugins ausblenden“). Im Kontextmenü einer Notiz oder eines Ordners (und im Editor-Menü) findest du „Seiten-Emoji setzen“ und „Seite umbenennen“; letzteres benennt bei einer Seite mit Unterseiten die Notiz und ihren Ordner zusammen um. Das Emoji setzt du am einfachsten mit dem Befehl „Seiten-Emoji setzen“ (Auswahl und Prüfung); legst du in der Notiz selbst eine Eigenschaft Emoji an, öffnet sich dieselbe Auswahl. Erlaubt ist genau ein Emoji, anderes wird nicht gesendet und beim Sync gemeldet. Die Tags sind Obsidians Eigenschaft tags; auch #Tags im Text zählen und werden hinzugefügt (entfernst du ein #Tag aus dem Text, bleibt es bestehen, bis du es aus der Eigenschaft löschst). Ein Leerzeichen im Tag-Namen auf dem Server erscheint in Obsidian als -; ein - bleibt ein -, auch wenn du es in Obsidian neu tippst. Die Tags erscheinen in Collectives als Tags, nicht als Text. In der Dateiliste zeigt ein Ordner das Emoji seiner Seite, und die Seite des Ordners steht zuerst im Ordner (nur die Anzeige, abschaltbar).

Struktur: neue, umbenannte, verschobene und gelöschte Seiten

Das Plugin gleicht auch die Struktur ab, nicht nur den Text. Jedes Collective ist ein Ordner auf oberster Ebene des Vaults. Eine Seite mit Unterseiten ist ein Ordner mit einer gleichnamigen Notiz darin (Handbuch/Prozesse/Prozesse.md).

Du machst im Vault … … das passiert auf dem Server
eine neue Notiz anlegen Sie wird als neue Seite hochgeladen, ihre nc_page_id steht danach im Frontmatter. Die Seite hängt unter der Seite, der ihr Ordner gehört; liegt sie in einem Ordner ohne Notiz, legt das Plugin dafür eine Ordnerseite an.
eine Notiz umbenennen oder in einen anderen Ordner verschieben Die Seite wird umbenannt bzw. verschoben, auch in ein anderes Collective (ID und Emoji bleiben; die Tags der Notiz werden im neuen Collective neu zugewiesen).
den Ordner einer Seite mit Unterseiten umbenennen, oder nur die Notiz darin Die Seite heißt danach wie der Ordner bzw. die Notiz; Ordner und Notiz bekommen denselben Namen.
einen neuen Ordner auf oberster Ebene mit Notizen anlegen Ein neues Collective entsteht (einstellbar: „Neue Ordner auf oberster Ebene“). Die Notiz, die wie der Ordner heißt, wird die Startseite.
den Ordner eines Collectives umbenennen Das Collective wird umbenannt. Das dürfen nur Admins und Eigentümer; sonst wird der Ordner zurückbenannt.
eine Notiz oder einen Ordner löschen Das Plugin fragt, bevor eine Seite oder ein Collective auf dem Server in den Collectives-Papierkorb kommt (dort lässt sich beides wiederherstellen). Im Dialog ist nichts vorausgewählt: Was du anhakst, wird gelöscht; was du nicht anhakst, kommt in den Vault zurück. Schließt du den Dialog (Esc), passiert nichts, und beim nächsten Lauf wird erneut gefragt. Eine Seite mit Unterseiten wird samt Unterseiten gelöscht.

In der anderen Richtung gilt:

  • Eine auf dem Server umbenannte oder verschobene Seite wird im Vault umbenannt bzw. verschoben. Haben beide Seiten dieselbe Seite verschieden verschoben, gilt der Server.
  • Eine auf dem Server gelöschte Seite kommt im Vault in den Papierkorb (Einstellung „Auf dem Server gelöschte Seiten“; „Datei behalten“ lädt sie als neue Seite wieder hoch). Hast du die Datei seit der letzten Synchronisierung geändert, wird sie nie entfernt: Die Seite wird aus dem Papierkorb wiederhergestellt und deine Änderung hochgeladen.
  • Hat sich eine Seite auf dem Server geändert, während du sie im Vault gelöscht hast, kommt sie ohne Rückfrage zurück: die Änderung gewinnt.
  • Legst du eine gelöschte Datei (mit ihrer nc_page_id) wieder in den Vault, wird die Seite aus dem Collectives-Papierkorb wiederhergestellt.
  • Ein auf dem Server gelöschtes Collective (oder eins, das du verlassen hast) wird nur nach Rückfrage aus dem Vault entfernt.
  • Schutz vor Massenlöschung: Würdest du mindestens 3 Seiten und mehr als 20 % der Seiten eines Collectives auf einmal löschen, fragt das Plugin immer, auch mit der Einstellung „Ohne Rückfrage in den Collectives-Papierkorb“.
  • Markdown-Dateien direkt im Vault-Ordner (ohne Collective-Ordner) und Dateien in versteckten Ordnern werden nicht synchronisiert.

Konflikte

Ein Konflikt entsteht, wenn eine Seite seit der letzten Synchronisierung sowohl im Vault als auch auf dem Server geändert wurde. Das Plugin überschreibt dann nichts:

  • Deine Datei bleibt unverändert.
  • Die Server-Fassung wird daneben als Titel (Konflikt JJJJ-MM-TT HHmm).md abgelegt. Diese Kopie wird nicht synchronisiert.
  • Die Seite wird erst wieder hochgeladen, wenn du den Konflikt aufgelöst hast.

Eine Kollision ist ein Sonderfall beim ersten Abgleich: Am Zielpfad einer Server-Seite lag schon eine Datei aus deinem Vault. Auch hier bleibt deine Datei erhalten, und die Server-Seite landet als Konfliktkopie daneben.

Offene Konflikte zeigt die Statusleiste als NC ⚠︎ n (nur Desktop). Der Befehl „Konflikte anzeigen“ öffnet den Dialog, auf Mobile ist er der einzige Weg. Der Dialog zeigt pro Seite die Unterschiede zwischen deiner Datei und der Server-Fassung:

Auswahl Wirkung
Lokal behalten Deine Datei wird hochgeladen und ersetzt die Server-Fassung. Hat sich die Server-Fassung inzwischen erneut geändert, entsteht ein neuer Konflikt statt eines Überschreibens. Bei einer Kollision wird deine Datei dabei mit der Server-Seite verknüpft.
Remote übernehmen Der Inhalt deiner Datei wird durch die Server-Fassung ersetzt. Die Server-Fassung wird dafür neu geladen, die Konfliktkopie muss also nicht mehr vorhanden sein.
Später Alles bleibt, wie es ist.

Nach „Lokal behalten“ oder „Remote übernehmen“ wird die Konfliktkopie in den Papierkorb verschoben, wie in Obsidian eingestellt. Danach läuft sofort eine Synchronisierung.

Einstellung „Konflikte“ (Abschnitt „Verhalten“):

  • Beide behalten (Konfliktkopie): Standard, wie oben beschrieben.
  • Diesen Vault bevorzugen: Bei beidseitiger Änderung wird die Server-Fassung ohne Rückfrage überschrieben.
  • Server bevorzugen: Bei beidseitiger Änderung wird deine Datei ohne Rückfrage überschrieben.

Mit den beiden „bevorzugen“-Optionen gehen die Änderungen der jeweils anderen Seite verloren. Bereits bestehende Konflikte brauchen weiterhin deine Entscheidung.

Gleichzeitige Bearbeitung im Browser: Lädt das Plugin eine Seite hoch, während sie im Browser offen ist, meldet der Editor „Die Bearbeitungssitzung ist abgelaufen“. Lade die Seite dann neu. Was du danach im Browser noch eingibst, wird nicht mehr gespeichert (ADR 0012).

Lizenz: MIT