github vrtmrz/obsidian-livesync 0.25.44

7 hours ago

0.25.44

24th February, 2026

This release represents a significant architectural overhaul of the plug-in, focusing on modularity, testability, and stability. While many changes are internal, they pave the way for more robust features and easier maintenance.
However, as this update is very substantial, please do feel free to let me know if you encounter any issues.

Note: ⚠️ Missing functions in this: ModuleReplicator._unresolvedErrorManager is only a mis-detection. It will be fixed in the next release.

Fixed

  • Ignore files (e.g., .ignore) are now handled efficiently.
  • Replication & Database:
    • Replication statistics are now correctly reset after switching replicators.
  • Fixed File already exists for .md files has been merged (PR #802). So thanks @waspeer for the contribution!

Improved

  • Now we can configure network-error banners as icons, or hide them completely with the new Network Warning Style setting in the General pane of the settings dialogue. (#770, PR #804)

Refactored

Architectural Overhaul:

  • A major transition from Class-based Modules to a Service/Middleware architecture has begun.
    • Many modules (for example, ModulePouchDB, ModuleLocalDatabaseObsidian, ModuleKeyValueDB) have been removed or integrated into specific Services (database, keyValueDB, etc.).
    • Reduced reliance on dynamic binding and inverted dependencies; dependencies are now explicit.
    • ObsidianLiveSyncPlugin properties (replicator, localDatabase, storageAccess, etc.) have been moved to their respective services for better separation of concerns.
    • In this refactoring, the Service will henceforth, as a rule, cease to use setHandler, that is to say, simple lazy binding.
      • They will be implemented directly in the service.
    • However, not everything will be middlewarised. Modules that maintain state or make decisions based on the results of multiple handlers are permitted.
  • Lifecycle:
    • Application LifeCycle now starts in Main rather than ServiceHub or ObsidianMenuModule, ensuring smoother startup coordination.

New Services & Utilities:

  • Added a control service to orchestrate other services (for example, handling stop/start logic during settings realisation).
  • Added UnresolvedErrorManager to handle and display unresolved errors in a unified way.
  • Added logUtils to unify logging injection and formatting.
  • VaultService.isTargetFile now uses multiple, distinct checkers for better extensibility.

Code Separation:

  • Separated Obsidian-specific logic from base logic for StorageEventManager and FileAccess modules.
  • Moved reactive state values and statistics from the main plug-in instance to the services responsible for them.

Internal Cleanups:

  • Many functions have been renamed for clarity (for example, _isTargetFileByLocalDB is now _isTargetAcceptedByLocalDB).
  • Added override keywords to overridden items and removed dynamic binding for clearer code inheritance.
  • Moved common functions to the common library.

Dependencies:

  • Bumped dependencies simply to a point where they can be considered problem-free (by human-powered-artefacts-diff).
    • Svelte, terser, and more something will be bumped later. They have a significant impact on the diff and paint it totally.
    • You may be surprised, but when I bump the library, I am actually checking for any unintended code.

Don't miss a new obsidian-livesync release

NewReleases is sending notifications on new releases.