Initial commit

This commit is contained in:
2026-04-08 11:55:27 +01:00
commit 470a1c15b8
36 changed files with 4932 additions and 0 deletions

44
Plan.md Normal file
View File

@@ -0,0 +1,44 @@
# Obsidian Sync Plan
## Goal
Build a self-hosted sync system for an Obsidian vault that works across Windows, Linux, and Android. The system will use an Obsidian plugin for clients, a central sync server, and end-to-end encrypted note transfer. Conflicts should try automatic merge first, then fall back to user-visible conflict handling.
## Current Implementation Slice
1. Create a TypeScript monorepo for the plugin, server, and shared libraries.
2. Define shared sync contracts for device registration, pull, push, tombstones, and conflict responses.
3. Add a shared sync engine with AES-GCM encryption, hashing, and safe text merge helpers.
4. Build a durable server that registers devices, stores encrypted note revisions on disk, and writes structured request and client-sync logs.
5. Build an Obsidian plugin with settings, manual sync, scheduled sync, remote pull, local push, attachment sync, conflict marker handling, and sync-run diagnostics upload.
6. Validate the scaffold with a workspace build and focused tests.
## Delivery Phases
### Phase 1
- Monorepo setup
- Protocol definitions
- Shared crypto and merge helpers
- Minimal server API
- Plugin settings and sync loop
### Phase 2
- Durable storage backend for the server
- Attachment sync
- Better device onboarding and recovery flow
- Structured logs and user-visible sync diagnostics
### Phase 3
- Hardening for large vaults and flaky networks
- Packaging and deployment docs
- Cross-device integration testing
## Notes
- The server now persists encrypted sync state to a local data directory and keeps JSON-line diagnostics logs.
- Text conflicts are handled on the client and binary conflicts produce a remote conflict copy.
- Recovery bundle onboarding, device revocation, key rotation, and batched sync are implemented in the current repo.
- The next highest-priority gap is broader multi-instance Obsidian integration testing and a production-grade database-backed server store.