Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Koofr Sync

bartekmpbartekmp78 downloads

Sync your vault with Koofr cloud storage.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates4
Obsidian Koofr Sync logo

Obsidian Koofr Sync

Sync your Obsidian vault with Koofr cloud storage. Event-driven, bidirectional, mobile-friendly.

[!NOTE] This plugin is not affiliated with Koofr. It's built against Koofr's public REST API v2. Its architecture (sync engine, conflict resolution, settings UI) is adapted from obsidian-onedrive by Jeff Steinbok.

Features

  • Zero OAuth setup — Koofr auth uses just an email + a revocable app-specific password you generate in the Koofr web app. No Azure, no consent screen.
  • Event-driven sync — Syncs on file changes, not polling. Better for battery life.
  • Bidirectional — Automatic two-way sync with configurable conflict resolution.
  • Any mount, any folder — Sync your own Koofr storage or anything shared with you, into any subfolder.
  • Pull-only mode — (Experimental) One-way sync from Koofr for read-only vaults or backup recovery.
  • Conflict resolution — Last-write-wins, create-duplicate, or a manual review pane with inline diffs.
  • Mobile-friendly — Works on iOS and Android; no desktop-only APIs.

Why this over Koofr's native client or a WebDAV mount?

  • Skips device clutter — workspace UI state files (.obsidian/workspace*.json) are intentionally excluded.
  • Event-driven, not filesystem polling — reacts to Obsidian vault events directly.
  • Built-in conflict handling — choose overwrite, duplicate, or manual diff-based resolution.

Installation

Community Plugins (recommended)

  1. Settings → Community Plugins → Browse → search "Koofr Sync"
  2. Install → Enable

Via BRAT (beta / pre-release)

  1. Install BRAT from Community Plugins
  2. BRAT settings → Add Beta Plugin → bartekmp/koofr-obsidian-sync

Manual

  1. Download main.js, manifest.json, and styles.css from the latest release
  2. Place them in <vault>/.obsidian/plugins/koofr-sync/
  3. Settings → Community Plugins → enable Koofr Sync

Setup

  1. Generate an app-specific password: Koofr web app → Profile → Preferences → Password → App passwords. Your regular Koofr account password will not work — Koofr requires a scoped, revocable app password for third-party connections.
  2. In Obsidian: Settings → Koofr Sync → enter your email and the app password → Connect to Koofr.
  3. Click Browse… under Sync Folder, pick a mount (your own Koofr storage or anything shared with you) and a folder within it.
  4. Done — your vault syncs automatically on file changes.

Settings reference

Setting Description
Sync Interval Periodic sync interval. Set to "Manual" to disable timer-based sync.
Sync on file change Disable to only sync on the interval or manually.
Startup Sync Delay Delay before first sync after launch (0 = disabled, 10 s recommended).
Conflict Resolution Last write wins (default), create duplicate, or manual review.
Sync App Settings Optional — sync .obsidian/app.json, appearance.json, hotkeys.json.
Sync Plugins Optional — sync plugin lists, manifests, and binaries (not plugin data files).
Sync CSS Snippets Optional — sync .obsidian/snippets/.
Excluded Patterns Glob patterns for files/folders to skip, stored in .syncIgnore. See below.
Pull-Only Mode (Experimental) Download only, never upload local edits.
Debug Logging Writes a daily log under _KoofrSyncLogs/YYYY-MM-DD.md (device-local, never synced).

Under Authentication, a Test connection button verifies your stored credentials still work by making a lightweight authenticated request — handy since Koofr has no documented token lifetime.

Excluding files from sync

Add glob patterns — one per line — under Settings → Sync Configuration → Excluded patterns. They're saved to a .syncIgnore file in your vault root and applied on the next sync (you can also edit that file directly).

Pattern Matches
*.tmp any .tmp file, in any folder
Attachments/large/** everything under Attachments/large/
Drafts/ the whole Drafts/ folder (trailing slash = folder)
# note a comment (ignored)

* matches any characters within a single name; ** matches across folder boundaries.

Commands

Available via the command palette (Ctrl/Cmd+P):

Command Description
Sync now Trigger an immediate sync.
Disconnect from Koofr Clear stored credentials and sync state.
Force full sync Clear tracked state so the next sync re-evaluates everything from scratch.
Reconcile from cloud Destructive recovery — cloud version wins for every file, confirmation required for large deletes.
Show sync conflicts Open the manual conflict review pane.

How sync works

Koofr's REST API has no incremental "what changed since X" endpoint. Every sync fetches a single recursive listing of your chosen Koofr folder and diffs it against what this device last saw, by content hash — new, changed, and deleted files are all detected from that diff. This is simpler than a delta-cursor design and works well for typical vault sizes (hundreds to low thousands of files); very large vaults will produce proportionally larger listing payloads per sync.

Known limitations

  • Large file uploads: Koofr's upload endpoint accepts a whole file in a single request — there's no chunked/resumable upload API for very large attachments.
  • Token expiry: Koofr has no documented refresh-token flow. The plugin re-authenticates from your stored app password whenever a request returns 401.
  • English only: The i18n infrastructure is in place (src/i18n/), but only English strings ship currently. Contributions welcome.

Development

npm install
npm run dev      # watch build
npm run build    # production build (typecheck + bundle)
npm test         # unit tests
npm run lint

See src/sync/syncEngine.ts for the sync algorithm and src/api/koofrClient.ts for the Koofr REST API v2 wrapper.

License

MIT — see LICENSE. Architecture adapted from obsidian-onedrive (also MIT).

HealthExcellent
ReviewSatisfactory
About
Sync your Obsidian vault with Koofr cloud storage using event-driven, bidirectional sync that works on desktop and mobile. Use simple app-specific password auth (no OAuth), choose conflict handling (overwrite, duplicate, or manual diff review), sync any mount/folder or use pull-only backups, and skip workspace UI files.
SyncingIntegrationsBackup
Details
Current version
0.3.1
Last updated
2 weeks ago
Created
3 weeks ago
Updates
4 releases
Downloads
78
Compatible with
Obsidian 1.12.0+
Platforms
Desktop, Mobile
License
MIT
Report bugRequest featureReport plugin
Author
bartekmpbartekmpbartekmp
GitHubbartekmp
  1. Community
  2. Plugins
  3. Syncing
  4. Koofr Sync

Related plugins

Remotely Save

Sync notes between local and cloud with smart conflict: S3, Dropbox, webdav, OneDrive, Google Drive, Box, pCloud, Yandex Disk, Koofr, Azure Blob Storage.

Fast Note Sync

Real-time sync of your vaults across server, mobile, and web; shareable with anyone; supports REST and MCP integrations to build your personal AI knowledge base.

Self-hosted LiveSync

Sync vaults securely to self-hosted servers or WEBRTC.

YAOS

Simple real-time sync powered by your own Cloudflare Worker.

GitHub

GitHub Sync

Sync vault to personal GitHub.

Google Drive Sync

Syncs a vault into Google Drive for cross-platform use (works for iOS).

OneDrive Sync

Sync your Obsidian vault with OneDrive Personal/Consumer

Differential ZIP Backup

Back our vault up with lesser storage.

WebDAV Sync

General-purpose & bidirectional WebDAV syncing for your vault. Designed for stability and robust file handling without vendor lock-in.

Syncthing Integration

Syncthing integration.