fangface-hub22 downloadsServerless, conflict-free collaboration layer for shared vaults.
SharedVault is a serverless, conflict-free collaboration layer for Obsidian. It stores Yjs-compatible operation files inside the vault, keeps local CRDT cache state under .obsidian/cache/{vault-id}/{node-id}/, and applies remote changes later without a dedicated server.
flowchart LR
subgraph Node["Each device node"]
Editor["Markdown files in vault"]
Cache["Local CRDT cache\n.obsidian/cache/{vault-id}/{node-id}/docs"]
State["Processed state\n.obsidian/cache/{vault-id}/{node-id}/state.json"]
LocalData["Local plugin data\n.obsidian/cache/{vault-id}/local-plugin-data.json"]
end
subgraph Shared["Shared vault storage"]
Ops["Operation cache\n.obsidian/shared-vault/operation-cache/"]
Registry["Node registry\n.obsidian/shared-vault/node-registry/"]
Snapshots["Snapshots\n.obsidian/shared-vault/snapshots/"]
end
Editor -->|local diff| Cache
Cache -->|Yjs update files| Ops
Ops -->|poll and apply| Cache
Cache -->|write merged markdown| Editor
Cache --> State
LocalData -->|persist nodeId| Cache
Editor -->|first local edit / heartbeat| Registry
Cache -->|snapshot export| Snapshots
An image of editing this README.md on my own node and viewing it from another node

[!NOTE] The mouse cursor on the other node is positioned at the bottom‑right, showing that it is reflecting the edits made on my own node.
User ID is not configurable. The plugin uses the per-device node ID as the collaboration identity.
Install dependencies
npm install
Type-check
npm run check
Build the plugin bundle
npm run build
During development, watch and rebuild automatically
npm run dev
Run lint checks:
npm run lint
Run lint checks with auto-fix:
npm run lint:fix
The lint rules are aligned with the reference plugin and treated as protected project configuration.
This project includes release helper scripts under scripts/.
Generate release notes from git history:
npm run generate:release-notes
This command reads the current version from manifest.json, compares commits with the previous git tag when available, and groups the notes into Added, Fixed, Changed, Removed, and Other.
This project follows Semantic Versioning (MAJOR.MINOR.PATCH).
npm run version:major
npm run version:minor
npm run version:patch
These commands update package.json, manifest.json, and versions.json together. The patch command also updates package-lock.json.
The release workflow is defined in .github/workflows/release-zip.yml.
npm run lint.npm run build.The workflow will:
Vault/
.obsidian/
shared-vault/
operation-cache/
*.json
node-registry/
*.json
snapshots/
*.snapshot.json
cache/
{vault-id}/{node-id}/