Jeff Steinbok6k downloadsSync your Obsidian vault with OneDrive Personal/Consumer

Sync your Obsidian vault with OneDrive Personal accounts. Zero-config, mobile-friendly, battery-efficient.
📖 How It Works · Troubleshooting · Advanced Usage · Development · Postmortem Process
[!TIP] 🦞 OpenClaw Users - This pairs well with the 🦞🐚📝 Carapace Obsidian toolset when integrating these vaults with OpenClaw, so synced vault content can plug directly into your broader tool-driven workflow.
[!IMPORTANT] While I do work for Microsoft and on the OneDrive team, this plugin is in no way an official Microsoft plugin. Just a thing I needed and wanted to share. If you like it, give me a ⭐. As a friend of mine says, "I'm only in it for the subs and likes.".
.obsidian/workspace*.json) are intentionally excluded.[!NOTE] Upgrading from 1.0.x? Version 1.1.0 uses a new Azure app registration. After updating, you'll need to disconnect and reconnect to OneDrive in the plugin settings. Your files in OneDrive are not affected — the plugin will re-sync on first connection.
To clean up the old app authorization, visit account.live.com/consent/Manage, find the old entry (it may appear as "Obsidian OneDrive Sync by Jeff Steinbok"), and click Remove. You can also delete the old
/Apps/Obsidian OneDrive Sync by Jeff Steinbokfolder from your OneDrive if present.
JeffSteinbok/obsidian-onedrivemain.js and manifest.json from the latest release.obsidian/plugins/onedrive-sync/| Setting | Description |
|---|---|
| Sync Interval | Set to 0 for manual-only sync (recommended for battery) |
| Startup Sync Delay | Delay before first sync after launch (0 = disabled, 10s recommended) |
| Conflict Resolution | Last write wins (default), create duplicate, or manual |
| Sync App Settings | Optional — sync .obsidian/app.json, .obsidian/appearance.json, and .obsidian/hotkeys.json to keep appearance and hotkeys consistent across devices |
| Sync Plugins | Optional — sync plugin lists, manifests, and binaries (main.js, styles.css). Does not sync plugin data files (data.json) |
| Sync CSS Snippets | Optional — sync CSS snippets from .obsidian/snippets/ to keep custom styles consistent across devices |
| Sync Bookmarks | Optional — sync .obsidian/bookmarks.json to keep bookmarks consistent across devices |
| Pull-Only Mode | (Experimental) Download changes from OneDrive but never upload local edits. Useful for read-only vaults or backup recovery. Enable under Settings → Experimental |
| Debug Logging | Enable for troubleshooting. Writes a daily note under _OneDriveSyncLogs/YYYY-MM-DD.md (device-local, never synced), stamped with the plugin version and current config |
For advanced settings (reset sync token, reconcile from cloud, custom client ID, experimental performance options), see Advanced Usage.
Available via the command palette (Ctrl/Cmd+P):
| Symptom | Use |
|---|---|
| "Plugin lost track of state, want a fresh re-read from cloud" | Reset sync token |
| "Files I deleted on another device are still here" | Reconcile from cloud |
| "I have files that pre-date the plugin and they need to be in cloud" | Reset sync token |
| "Vault has cruft that doesn't exist in OneDrive — wipe it" | Reconcile from cloud |
Reset sync token is upload-biased: local always wins, so any local-only file gets pushed to cloud on the next sync. Reconcile from cloud is the opposite: cloud always wins, local-only files get deleted (with a confirmation prompt for large deletes). Empty folders left behind by reconcile are pruned automatically — except folders that also exist in OneDrive.
The plugin hardcodes these exclusions for safety:
.obsidian/plugins/onedrive-sync/ — the plugin's own folder is always excluded to prevent syncing its data.json (which contains sync state and configuration) and to avoid self-downgrade scenarios where one device overwrites another's plugin binary. Authentication tokens are stored separately using Obsidian's SecretStorage API, not in data.json..obsidian/workspace*.json — per-device UI state (Obsidian Sync excludes these too)_OneDriveSyncLogs/ — device-local debug logs.syncIgnoreCreate a .syncIgnore file at your vault root to exclude files/folders from sync. See Advanced Usage for details.
| App Folder (Default) | Full Access | |
|---|---|---|
| Permissions | Minimal — isolated app folder | Full OneDrive access |
| Scopes | User.Read, Files.ReadWrite.AppFolder, offline_access |
User.Read, Files.ReadWrite.All, offline_access |
| Location | /Apps/ObsidianOneDrive/ |
Anywhere you choose |
| Sharing | No | Yes — share via OneDrive |
| Browseable | Not easily | Yes — visible in OneDrive web/app |
| Best for | Personal vaults, privacy-focused | Shared/family vaults |
To switch modes: Settings → OneDrive Sync → Access Mode, then disconnect and reconnect.
/Documents/MyVault)Tip: Use "Create duplicate" conflict resolution to avoid overwriting each other's changes.
This plugin is designed with mobile as a primary target:
data.json and in a platform-appropriate secure store. They are never written to files that could be accidentally synced or exposed..obsidian/plugins/onedrive-sync/) is always excluded from sync. Even though tokens are no longer in data.json, the exclusion remains to prevent self-downgrade (one device overwriting another's plugin binary) and to keep device-specific sync state separate.