A high-quality, well-documented plugin that provides robust bidirectional synchronization between Obsidian tasks and Microsoft To Do.
This plugin is built with maintainability and reliability in mind:
- Comprehensive Documentation: Full JSDoc comments for all classes, methods, and interfaces
- Advanced Conflict Resolution: State-tracking system prevents sync loops and handles concurrent edits intelligently
- Tasks Plugin Compatibility: Preserves metadata from the popular Obsidian Tasks plugin during sync
- Robust Error Handling: Detailed logging and graceful error recovery throughout
- TypeScript: Fully typed codebase for better development experience and fewer bugs
- Bidirectional Sync: Changes in either Obsidian or Microsoft To Do are reflected in the other
- Task Parsing: Supports standard Obsidian task syntax (
- [ ]
and- [x]
) - Metadata Support: Syncs due dates (📅), priorities (🔺🔻), and tags (#tag)
- Conflict Resolution: Handles simultaneous edits by comparing modification timestamps
- Auto Sync: Optional automatic synchronization at configurable intervals
- Secure Authentication: Uses Microsoft's OAuth 2.0 with MSAL
Before using this plugin, you need to register an application in Azure Active Directory:
- Go to Azure Portal → Azure Active Directory → App registrations
- Click "New registration"
- Enter a name (e.g., "Obsidian To Do Sync")
- Important: Select "Personal Microsoft accounts only" (not organizational accounts)
- Add redirect URI:
https://login.microsoftonline.com/common/oauth2/nativeclient
(Platform: Single-page application) - After creation, note the Application (client) ID
- Go to "API permissions" → Add "Microsoft Graph" → Delegated permissions:
Tasks.ReadWrite
User.Read
- No admin consent needed for personal accounts
- Download or clone this repository
- Copy the folder to your Obsidian plugins directory:
{VaultPath}/.obsidian/plugins/obsidian-mstodo-sync/
- Run
npm install
to install dependencies - Run
npm run build
to build the plugin - Enable the plugin in Obsidian Settings → Community Plugins
- Open Obsidian Settings → Microsoft To Do Sync
- Enter your Client ID from the Azure app registration
- Account Type is fixed to "consumers" for personal accounts only
- Configure sync preferences:
- Auto Sync: Enable/disable automatic synchronization
- Sync Interval: How often to sync (1-60 minutes)
- Default List: Which Microsoft To Do list to use for new tasks
- Click Sign In to authenticate with your personal Microsoft account
The plugin recognizes standard Obsidian task format with additional metadata:
- [ ] Basic task
- [x] Completed task
- [ ] Task with due date 📅 2024-01-15
- [ ] High priority task 🔺
- [ ] Low priority task 🔻
- [ ] Task with tags #work #urgent
- [ ] Task synced with MS To Do [ms-todo:ABC123]
- Manual Sync: Click the sync ribbon icon or use Command Palette → "Sync with Microsoft To Do"
- Auto Sync: Enabled by default, syncs every 5 minutes
- Authentication: Use Command Palette → "Authenticate with Microsoft To Do"
Obsidian | Microsoft To Do | Notes |
---|---|---|
- [ ] |
notStarted |
Unchecked task |
- [x] |
completed |
Checked task |
📅 YYYY-MM-DD |
dueDateTime |
Due date |
🔺 or ⏫ |
high importance |
High priority |
🔻 |
low importance |
Low priority |
#tag |
Task body | Tags stored in task notes |
npm install
npm run dev # Development build with watch
npm run build # Production build
src/
├── main.ts # Main plugin class and settings UI
├── auth.ts # Microsoft authentication using MSAL
├── parser.ts # Task parsing and format conversion
└── sync.ts # Bidirectional synchronization logic
-
Authentication Failed
- Verify Client ID is correct
- Ensure Azure app is configured for "Personal Microsoft accounts only"
- Check redirect URI is configured as
https://login.microsoftonline.com/common/oauth2/nativeclient
- Make sure you're using a personal Microsoft account (not work/school)
-
Tasks Not Syncing
- Check if authentication is still valid (may need to re-authenticate)
- Verify task format matches supported syntax
- Look for error messages in Developer Console (Ctrl+Shift+I)
-
Duplicate Tasks
- This can happen if the MS To Do ID link is lost
- The plugin includes conflict resolution, but manual cleanup may be needed
Enable Developer Console in Obsidian (Ctrl+Shift+I) to see detailed sync logs.
- Authentication tokens are stored securely using MSAL browser storage
- No task data is sent to third parties (only Microsoft Graph API)
- Plugin only requests minimum necessary permissions
- All communication is encrypted (HTTPS)
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
MIT License - see LICENSE file for details.
For issues and feature requests, please use the GitHub issue tracker.