Task Syncer connects an Obsidian desktop vault to either Microsoft To Do or TickTick. Commands and the sidebar operate on one selected provider and remote list at a time.
Task Syncer requires either a Microsoft account or a TickTick account, plus a user-created OAuth application for the selected provider.
This project is built and maintained with help from AI tooling alongside human review and decision-making.
Task Syncer requires Obsidian 1.11.4 or newer and is desktop-only.
main.js, manifest.json, and styles.css from a release and place them in <vault>/.obsidian/plugins/task-syncer/. Restart Obsidian, then enable Task Syncer under Community plugins.Do not install source files or development dependencies into a vault.
You must create your own OAuth application. A client secret embedded in a desktop application cannot be made fully confidential; use credentials intended for this local installation.
Tasks.ReadWrite and register an exact redirect URL (the default shown by the plugin is http://localhost:5000).The plugin also requests offline_access so MSAL can maintain the account session in its token cache.
tasks:read tasks:write.TickTick may not issue a refresh token for this flow. If its access token expires or TickTick returns 401, reconnect the account.
Open the Command Palette to run:
The sidebar can create, edit, complete, and reopen where supported. TickTick's documented Open API has no reopen operation, so completed TickTick tasks cannot be reopened.
Task Syncer is not a bidirectional file synchronizer:
- [ ] and - [x]) from the active note and creates or completes matching remote tasks. For this operation only, trimmed, whitespace-collapsed, case-insensitive titles prevent duplicate pushes. Remote tasks with duplicate titles are otherwise preserved by ID.Tasks List.md; user-authored content outside the managed markers is preserved, and the command does not contact a provider.Delete completed tasks first fetches completed tasks and shows the provider, selected list, and count in a destructive confirmation dialog. Closing or cancelling the dialog performs no deletion. Confirming permanently deletes those completed remote tasks one at a time.
Task Syncer makes network requests only for the selected provider:
login.microsoftonline.com is opened for OAuth authorization. The client ID, redirect URL, requested scopes, random state, authorization code, and client secret/token-exchange data are used to authenticate the configured app.graph.microsoft.com/v1.0 receives the access token and list/task identifiers plus task titles, completion status, and due-date fields as needed to list, create, update, complete/reopen, or delete Microsoft To Do data.ticktick.com/oauth/authorize and ticktick.com/oauth/token receive the client ID, redirect URL, scopes, random state, authorization code, client credentials, and token-exchange data needed to authenticate.api.ticktick.com/open/v1 receives the access token and project/task identifiers plus titles, completion state, due dates, and configured time zone as needed to list, create, update, complete, or delete TickTick data.OAuth authorization runs in an isolated Electron window and validates state and the configured redirect. Task Syncer has no telemetry, analytics, advertising, or self-updater. Updates are delivered through Obsidian Community Plugins or manually installed releases.
data.json.-legacy-conflict SecretStorage entry, verifies both values, and then removes the plaintext source.Tasks List.md for the organize command.Tasks.ReadWrite consent or TickTick tasks:read tasks:write scopes.-legacy-conflict (older generic Microsoft caches use -legacy-conflict-generic); no secret value is included in the ID or logs.Requirements: Node.js 22 and npm.
npm ci
npm run lint
npm test
npm run build
npm run check # lint + tests + coverage + production build + release validation
npm run test:watch
Automated tests mock Obsidian and provider/network boundaries; they do not use a real vault, keychain, account, or API. See CONTRIBUTING.md, SECURITY.md, and the opt-in TickTick smoke test.
Task Syncer is released under the MIT License. Copyright © 2026 Wyson Cheng.