-
released this
2026-07-11 21:03:46 +02:00 | 183 commits to master since this releaseACTG Sync 0.10.1
- Neuer Button „Neu anlegen…" (Einstellungen → Vaults, neben „Vault verbinden…"): legt einen neuen Server-Vault an (Name vorbefüllt mit dem lokalen Vault-Namen) und verbindet das aktuelle Vault direkt — der erste Sync lädt den lokalen Bestand hoch.
- Existiert bereits ein eigener Server-Vault mit dem Namen, wird mit diesem verbunden (find-or-create).
- Schließt die Lücke aus v0.10.0: Dort konnten neue Server-Vaults nur noch per Server-CLI entstehen.
Installation
Ordner obsidian-sync/ aus dem ZIP nach /.obsidian/plugins/ kopieren.
Server unverändert — kein Deploy nötig.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
0 downloads
-
released this
2026-07-11 20:32:57 +02:00 | 185 commits to master since this releaseACTG Sync 0.10.0
Vault-Verknüpfung per Such-Popup
- Die Namens-Automatik (Auto-Verbinden über gleichnamigen Server-Vault) ist entfernt — verbunden wird nur noch explizit über die Vault-ID. Der lokale Vault-Name darf beliebig abweichen (lokal „pudding", Server „Shared").
- Einstellungen → Vaults → „Vault verbinden…" öffnet ein Such-Popup (Quick-Switcher-Stil) — skaliert auf beliebig viele Vaults.
- Nicht-leeres Vault: Wahl zwischen „Zusammenführen" (Konfliktkopien, nichts geht verloren) und „Server-Stand übernehmen" (Lokales wandert in den Papierkorb .trash, nie hart gelöscht).
- „Trennen" löst die Verbindung (mit Bestätigung); lokale Dateien bleiben.
- Desktop-Provisioning („Server-Vault als neues Vault anlegen") nutzt dasselbe Popup, ein Vault pro Aufruf.
Git-Backup pro Vault
- Repo-URL, Branch, Username und Token werden in den Plugin-Einstellungen gesetzt; der Server speichert pro Vault (aults//git.json) und pusht dieses Vault dorthin. Kein Eintrag = kein Backup.
- Der Token wird nie zurückgegeben oder lokal gespeichert; Ändern erfordert Schreibzugriff aufs Vault.
- Neue API: GET/PUT/DELETE /api/vaults/:id/git.
- Bestehende OSYNC_GIT_*-Server-Konfiguration wird beim ersten Start einmalig migriert und läuft nahtlos weiter.
Installation
Ordner obsidian-sync/ aus dem ZIP nach /.obsidian/plugins/ kopieren.
Server-Deploy nötig (neue API + GitBackupManager).
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
released this
2026-07-10 21:00:08 +02:00 | 199 commits to master since this releaseInstallation
obsidian-sync-0.9.0.zipherunterladen, Ordnerobsidian-sync/nach<Vault>/.obsidian/plugins/entpacken, Obsidian neu laden.Vaults nach dem Login auswaehlen
Nach der Anmeldung zeigen die Einstellungen alle Server-Vaults, die dir freigegeben sind — automatisch, ohne den frueheren 'Vaults laden'-Knopf.
- Leeres lokales Vault binden (Desktop + Mobil): Ist der aktuelle Vault leer, laedt 'In dieses Vault laden' den gewaehlten Server-Vault in diesen Vault. Der Sync-Zustand wird dabei frisch gesetzt.
- Neue Vaults anlegen (nur Desktop): Mehrere Server-Vaults markieren und als separate neue Obsidian-Vaults neben dem aktuellen anlegen lassen. Das Plugin erzeugt Ordner,
.obsidian, kopiert sich selbst hinein, schreibtdata.jsonund traegt das Vault in Obsidiansobsidian.jsonein — es erscheint im Vault-Wechsler und laedt sich beim ersten Oeffnen selbst herunter. Das aktuelle Vault wird nie veraendert.
Robustheit
Die reine Logik (obsidian.json-Eintrag, Pfade je Betriebssystem, Leer-Pruefung) ist mit 8 Tests abgesichert. Ein vorhandenes, aber unlesbares
obsidian.jsonfuehrt nie zu Datenverlust: statt es zu ueberschreiben, bricht die Registrierung ab und der fertige Vault-Ordner bleibt bestehen (manuell ueber 'Open folder as vault' zu oeffnen). Die Provisioning-Funktion laeuft nur auf dem Desktop (Platform.isDesktopApp); auf Mobil bleibt das Plugin voll funktionsfaehig, nur ohne den Anlegen-Teil.Plugin heisst jetzt ACTG Sync.
Server
Unveraendert. Kein Deploy noetig.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
released this
2026-07-10 08:07:27 +02:00 | 209 commits to master since this releaseDiese Version erfordert einen Server-Deploy. Das Docker-Image installiert jetzt
git. Das Plugin ist funktional unveraendert; die Versionsnummer laeuft nur mit.Der Server pusht, nicht das Plugin
Der Server committet den Vault-Stand und pusht ihn in ein Repository. Er pusht nur und liest nie zurueck — der Server bleibt die einzige Wahrheit, Git ist Historie und Notfallkopie. Damit entsteht keine zweite Konfliktlogik neben dem Drei-Wege-Merge.
Warum dort und nicht im Plugin: Der Server hat bereits alle Dateien, laeuft auf Node, hat ein echtes Dateisystem und existiert genau einmal. Kein Wettlauf zwischen Geraeten, die denselben Vault pushen; kein Mobil-Problem (auf iOS gibt es weder
child_processnoch eingit); kein halbes Megabyteisomorphic-gitim Plugin-Bundle.Zwei Entscheidungen, die den Rest tragen
Getrenntes
--git-dir. Das Repository liegt unter<dataDir>/git/<vaultId>.git, der Arbeitsbaum ist der bestehende Dateibaum des Vaults. Ohne diese Trennung laege ein.git-Verzeichnis mitten zwischen den synchronisierten Dateien — ein Client koennte es ueberschreiben, und der Sync wuerde es verteilen.Der Token geht ueber
http.extraHeader, nie in die Remote-URL. Eine URL mit eingebettetem Token landet in.git/config, in Fehlermeldungen und in jedem Log. Fehlertexte werden zusaetzlich um einen etwaigenAuthorization-Header bereinigt.Konfiguration
Variable Default Bedeutung OSYNC_GIT_REMOTE– Repo-URL. Leer = Backup aus OSYNC_GIT_VAULT_ID– Welcher Vault gesichert wird. Leer = Backup aus OSYNC_GIT_BRANCHmainZiel-Branch OSYNC_GIT_USERNAME– Nutzername (Basic-Auth) OSYNC_GIT_TOKEN– Access-Token OSYNC_GIT_DEBOUNCE_MS15000Ruhephase vor dem Commit Aktiv erst, wenn Remote und Vault-ID gesetzt sind — ein halb konfiguriertes Backup saehe sonst aktiv aus, ohne etwas zu tun. Ein Sync-Lauf schreibt viele Dateien; nach der letzten Aenderung wird
DEBOUNCE_MSgewartet, dann entsteht ein Commit. Schlaegt der Push fehl, bleibt der Commit lokal und der naechste Lauf holt ihn nach; der Sync ist davon nie betroffen.Es wird genau ein Vault gesichert. Mehrere Vaults in denselben Branch desselben Repos zu pushen wuerde sie gegenseitig ueberschreiben.
Tests
12 Tests gegen ein echtes Git-Repository, darunter ein Ende-zu-Ende-Lauf: eine ueber die HTTP-API hochgeladene Datei taucht im Remote auf. Geprueft wird auch, dass kein
.gitim Arbeitsbaum entsteht, dass ohne Aenderung kein zweiter Commit faellt, dass ein unerreichbares Remote den Server nicht abbricht und dass der Token nirgends in der Repo-Konfiguration steht.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
released this
2026-07-10 07:56:17 +02:00 | 211 commits to master since this releaseInstallation
obsidian-sync-0.7.0.zipherunterladen, Ordnerobsidian-sync/nach<Vault>/.obsidian/plugins/entpacken, Obsidian neu laden.Abbruch verwirft die Notiz
Um eine Notiz aus einer Vorlage zu erzeugen, muss die Datei zuerst existieren —
tp.file.rename()undtp.file.move()brauchen etwas, worauf sie wirken. Daraus folgten zwei Aergernisse, beide behoben:- Die leere
Unbenannt-Notiz wurde hochgeladen, waehrend das Formular noch offen stand. Der Sync fragt jetzt den Runner, ob er an diesem Pfad noch arbeitet, und haelt den Upload zurueck. - Ein Abbruch liess die leere Notiz liegen. Vorlagen haben keinen Abbruch-Rueckkanal, deshalb der Vertrag: Rendert eine Vorlage nur Leerraum, war es ein Abbruch — die eben angelegte Notiz wird wieder geloescht. Das gilt ausschliesslich fuer Notizen, die der Runner selbst erzeugt hat; eine eigene leere Notiz fasst niemand an.
Vorlagen brechen mit einem schlichten
return ""in einem<%* ... %>-Block ab. Das funktioniert, weil der Renderer alle Segmente in EINE async Funktion kompiliert — ein Test haelt dieses Verhalten jetzt fest.Neuer Name
Das Plugin heisst jetzt ACTG Sync. Die Plugin-
idbleibtobsidian-sync: Sie zu aendern hiesse, auf jedem Geraet den Plugin-Ordner und dessendata.json(Token, Vault-ID) umzuziehen.Server
Unveraendert. Kein Deploy noetig.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Die leere
-
released this
2026-07-09 23:41:23 +02:00 | 213 commits to master since this releaseInstallation
obsidian-sync-0.6.0.zipherunterladen, Ordnerobsidian-sync/nach<Vault>/.obsidian/plugins/entpacken, Obsidian neu laden.Das Problem
Zwei Geraete schreiben
app.json,core-plugins.jsonundcommunity-plugins.jsonzwangslaeufig unabhaengig voneinander — spaetestens beim ersten Sync eines neuen Geraets. Weil.jsonals Text gilt, versuchte die Engine einen Zeilen-, dann einen Zeichen-Merge; bei{}gegen drei Einstellungen scheitert beides, und es entstand eine Konfliktkopie. Die half niemandem und verteilte sich, da sie selbst in.obsidianliegt, ueber alle Geraete weiter.Die Loesung
Fuer Dateien unterhalb des Config-Ordners gewinnt bei einem echten Konflikt die neuere Fassung; es entsteht keine Kopie. Notizen behalten die Konfliktkopie — dort waere ein verlorener Edit nicht hinnehmbar, bei einer Liste aktivierter Plugins ist er belanglos.
„Neuer" vergleicht die lokale Aenderungszeit (
SyncAdapter.mtime, neu und optional) mit dermtimedes Server-Eintrags. Der Server stempelt diese beim Upload — es sind also zwei Uhren. Bei Gleichstand oder unbekannter lokaler Zeit gewinnt die Serverfassung. Der uebrige Sync entscheidet weiterhin ausschliesslich ueber Hashes und Versionen, nie ueber Zeitstempel.SyncResult.resolvedzaehlt diese Faelle getrennt vonconflicts.Aufraeumen
Bereits vorhandene Konfliktkopien im Config-Ordner werden nicht mehr synchronisiert und koennen von Hand geloescht werden. Ausserhalb des Config-Ordners bleiben Konfliktkopien sichtbar — dort sollen sie gesehen und aufgeloest werden.
Server
Unveraendert. Kein Deploy noetig.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
released this
2026-07-09 23:32:27 +02:00 | 215 commits to master since this releaseInstallation
obsidian-sync-0.5.0.zipherunterladen, Ordnerobsidian-sync/nach<Vault>/.obsidian/plugins/entpacken, Obsidian neu laden. Templater muss deaktiviert sein (siehe v0.4.0).Vorlagen direkt im Kontextmenue
Das Kontextmenue eines Ordners listet die Vorlagen jetzt einzeln — ein Klick legt die Notiz an, ohne Umweg ueber eine Auswahlliste. Die Reihenfolge ist alphabetisch, die Anzahl begrenzt eine neue Einstellung (Eintraege im Menue, Standard 5).
Erst wenn es mehr Vorlagen als Eintraege gibt, erscheint zusaetzlich Weitere Vorlagen ... und fuehrt zur vollstaendigen Liste. Bei genau der Grenze entfaellt dieser Eintrag, denn die Liste waere leer.
Diese Entscheidung steckt als reine Funktion
planeMenu()intemplates/menu-plan.tsund ist mit 6 Tests abgesichert, statt als Abfrage im Menue-Callback zu versauern.Server
Unveraendert. Kein Deploy noetig.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
released this
2026-07-09 23:24:26 +02:00 | 217 commits to master since this releaseWichtig beim Update
Templater muss deaktiviert werden. Das Plugin bringt jetzt einen eigenen Vorlagen-Motor mit. Bleiben beide aktiv, stuelpt Templaters
on_file_creationsein Ordner-Template ueber genau die leere Notiz, die unser Runner anlegt — zwei Vorlagen in einer Notiz. Das Plugin warnt beim Laden, wenn es Templater noch aktiv sieht.Ausserdem entfaellt
styles.css; sie kann aus dem Plugin-Ordner geloescht werden.Installation
obsidian-sync-0.4.0.zipherunterladen, den Ordnerobsidian-sync/nach<Vault>/.obsidian/plugins/entpacken, Obsidian neu laden.Der eigene Vorlagen-Motor
Der Vault benutzte von Templater genau acht Funktionen. Sie nachzubauen ist kleiner als die drei Umgehungen, die Templater uns aufgezwungen hat: sein privates
files_with_pending_templatesauszulesen, seinencreate-Handler ueber eine Hilfsendung zu umgehen und seinen hartkodierten Menueeintrag per CSS zu verstecken.Unterstuetzte Syntax (Templater-kompatibel):
<% ausdruck %>,<%* code %>,<%_,-%>,_%>.Verfuegbar in Vorlagen:
tp.file.title,tp.file.creation_date,tp.file.cursor,tp.file.rename,tp.file.move,tp.file.create_new,tp.date.nowundtp.obsidian(fuerModal,Setting,Notice).Alle Bloecke einer Vorlage teilen sich einen Gueltigkeitsbereich, wie bei Templater: Sie werden zu EINER async Funktion kompiliert, nicht einzeln ausgewertet.
Sicherheit
JavaScript laeuft ausschliesslich in Vorlagen aus dem konfigurierten Vorlagen-Ordner. Eine beliebige Notiz, die
<%*nur enthaelt, wird nie ausgefuehrt — auch dann nicht, wenn sie ueber den Sync-Server in den Vault gelangt. Templater kennt diese Grenze nicht.Der urspruengliche Fehler kann nicht wiederkehren
Templaters
on_file_creationkonnte nicht unterscheiden, ob eine neue Datei vom Nutzer oder vom Sync stammt. Unser Runner fragt die Echo-Unterdrueckung des Syncs und wendet auf sync-geschriebene Dateien nie eine Vorlage an.Neue Einstellungen
- Vorlagen-Ordner (Standard
_templates) — woher Vorlagen kommen und wo JavaScript laufen darf - Vorlage auf neue Notizen anwenden — schaltet Ordner-Vorlagen insgesamt
- Ordner-Vorlagen — Regeln
Ordner -> Vorlage;/trifft jede neue Notiz, laengster Treffer gewinnt
Server
Unveraendert. Kein Deploy noetig.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Vorlagen-Ordner (Standard
-
released this
2026-07-09 23:07:02 +02:00 | 220 commits to master since this releaseInstallation
obsidian-sync-0.3.0.zipherunterladen und den enthaltenen Ordnerobsidian-sync/nach<Vault>/.obsidian/plugins/entpacken, dann Obsidian neu laden. Neu ab dieser Version: das Archiv enthaelt zusaetzlichstyles.css.Neuer Eintrag "Neue Seite aus Vorlage"
Im Kontextmenue eines Ordners (und als gleichnamiger Befehl) erscheint jetzt ein Eintrag, der eine Vorlage auswaehlen laesst und die neue Notiz in genau diesem Ordner anlegt. Die eigentliche Arbeit macht weiterhin Templater ueber
create_new_note_from_template()— wir bauen keine zweite Template-Engine, nur eine schoenere Tuer.Templaters eigener Eintrag heisst
Create new note from template; der Titel steht als Zeichenkette in seinem Code und ist weder uebersetzbar noch abschaltbar. Das Plugin blendet ihn deshalb aus, damit nicht zwei Eintraege dasselbe tun. Dafuer liefert es nun einestyles.cssmit — ein CSS-Snippet muss niemand mehr von Hand einschalten.Zwei neue Schalter unter Einstellungen -> Vorlagen, beide standardmaessig an:
- Eintrag "Neue Seite aus Vorlage" — zeigt den eigenen Eintrag. Ohne installiertes Templater erscheint er nicht.
- Templaters eigenen Menueintrag ausblenden — versteckt das englische Duplikat.
Beide wirken sofort, ohne Obsidian neu zu laden.
Server
Unveraendert. Kein Deploy noetig.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v0.2.1 — Templater-Fix Stable
released this
2026-07-09 22:14:50 +02:00 | 222 commits to master since this releaseInstallation
obsidian-sync-0.2.1.zipherunterladen und den enthaltenen Ordnerobsidian-sync/nach<Vault>/.obsidian/plugins/entpacken. Danach Obsidian neu laden.Wer den Ordner schon hat, kann stattdessen
main.jsundmanifest.jsoneinzeln ersetzen.Behoben: Templater fuehrte Vorlagen auf dem zweiten Geraet erneut aus
Templaters
on_file_creationschiebt den vorhandenen Inhalt jeder neu angelegten Markdown-Datei durchoverwrite_file_commands(). Kam eine noch nicht expandierte Vorlage per Sync auf einem zweiten Geraet an, fuehrte Templater sie dort ein zweites Mal aus: ein zweites Prompt-Popup, ein abweichender Dateiname austp.file.rename()und gegenseitig ueberschriebene Inhalte.Zwei unabhaengige Schichten ersetzen die bisherige Heuristik aus 60-Sekunden-Fenster und
<%-Textfund:- Zustand statt Zeit. Der Upload fragt Templaters eigene Warteschlange
files_with_pending_templatesab und laeuft sofort beitemplater:all-templates-executedan. Die spuerbare Sync-Verzoegerung entfaellt. Ist Templater nicht installiert oder aendern sich seine Interna, haelt der Sync nichts mehr zurueck (fail open) — geschuetzt bleibt er trotzdem durch die zweite Schicht. Ein Timeout von 2 Minuten gibt Pfade frei, die ein abgebrochener Prompt haengen laesst. - Kein
create-Ereignis fuer Sync-Schreibvorgaenge. Jede neu heruntergeladene Markdown-Datei entsteht unter der Hilfsendung.syncingund wird an ihren Platz umbenannt. Templater bricht bei fremder Dateiendung sofort ab und lauscht nicht aufrename, sieht die fertige Datei also nie. Das deckt beide Zugriffspfade ab:overwrite_file_commands()bei nicht leeren Dateien und Ordner-Templates bei leeren.
Server
Unveraendert. Kein Deploy noetig.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Zustand statt Zeit. Der Upload fragt Templaters eigene Warteschlange