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 existsfor .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 Stylesetting in theGeneralpane of the settings dialogue. (#770, PR #804)- Thanks so much to @A-wry!
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.
ObsidianLiveSyncPluginproperties (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.
- Many modules (for example,
- Lifecycle:
- Application LifeCycle now starts in
Mainrather thanServiceHuborObsidianMenuModule, ensuring smoother startup coordination.
- Application LifeCycle now starts in
New Services & Utilities:
- Added a
controlservice to orchestrate other services (for example, handling stop/start logic during settings realisation). - Added
UnresolvedErrorManagerto handle and display unresolved errors in a unified way. - Added
logUtilsto unify logging injection and formatting. VaultService.isTargetFilenow uses multiple, distinct checkers for better extensibility.
Code Separation:
- Separated Obsidian-specific logic from base logic for
StorageEventManagerandFileAccessmodules. - 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,
_isTargetFileByLocalDBis now_isTargetAcceptedByLocalDB). - Added
overridekeywords 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.