Syncist (Todoist Sync)
pendingby Bastiaan SchΓΆnhage
Bidirectional task sync with Todoist. Subtasks, import, projects, labels, and inline query blocks. Code 100% written by AI; plug-in 100% validated and tested by human.
Syncist (Todoist Sync) - Obsidian Plugin
Code 100% written by AI; plug-in 100% validated and tested by human.
Summary
With this plugin it is possible to create Todoist tasks from Obsidian and keep them in sync bidirectionally.
Its usage is very simple after the plugin has been connected to your Todoist account.
When you add the #todoist tag to a task (or checkbox item) it will automatically be created on Todoist and from that moment onward, the Todoist and Obsidian task will be synced.
Features
- Bidirectional Sync: Changes in Obsidian or Todoist are synced both ways
- Subtasks: Indented tasks beneath a
#todoistparent are synced as subtasks automatically β no tag needed on each child - Import from Todoist: Search and import any Todoist task (with its subtasks) into your note via a fuzzy-search modal
- Projects & Labels: Per-task project assignment with
π ProjectNamemetadata, bidirectional label sync via#hashtags - Query Blocks: Embed live Todoist task lists in your notes using
syncistcode blocks (e.g.,filter: today) - Tasks Plugin Compatible: Works with the popular Obsidian Tasks plugin emojis (π , β«, πΌ, π½)
- Configurable: Customize sync tag, default project, sync interval, and conflict resolution
- Commands: Quick commands to create tasks, import tasks, and trigger sync
- Conflict Resolution: Choose how to handle conflicts (Obsidian wins, Todoist wins, or ask)
- Zero Dependencies: Direct Todoist API v1 integration via Obsidian's built-in
requestUrlβ no external SDKs - AI-Crafted: Code 100% written by AI; plug-in 100% validated and tested by human
Installation
From Community Plugins (Recommended)
- Open Obsidian Settings β Community plugins
- Click "Browse" and search for "Syncist"
- Install and enable the plugin
- Configure your Todoist API token in the plugin settings
Manual Installation
- Download
main.jsandmanifest.jsonfrom the latest release - Create a folder
syncist-todoist-syncin your vault's.obsidian/plugins/directory - Copy
main.jsandmanifest.jsoninto that folder - Enable the plugin in Obsidian settings
From Source (Development)
- Clone this repository
- Run
npm installandnpm run build - Open the
TestVaultfolder in Obsidian (the plugin is symlinked) - Enable Community plugins in Settings β Community plugins
- Enable the "Syncist (Todoist Sync)" plugin
Configuration
- Get your Todoist API token from Todoist Settings β Integrations β Developer
- Open plugin settings in Obsidian
- Enter your API token and click "Verify"
- Configure other settings as needed:
- Sync Tag: Tag to mark tasks for sync (default:
#todoist) - Default Project: Where new tasks go (default: Inbox)
- Sync Interval: Auto-sync frequency in minutes
- Conflict Resolution: How to handle conflicting changes
- Sync Tag: Tag to mark tasks for sync (default:
Usage
Creating Tasks
Add the #todoist tag to any task:
- [ ] Buy groceries #todoist
- [ ] Meeting with team #todoist π
2026-01-28 β«
After sync, the task will have a Todoist ID:
- [ ] Buy groceries #todoist <!-- todoist-id:8765432109 -->
Subtasks
Indent tasks beneath a #todoist-tagged parent. Subtasks inherit the sync tag automatically β you do not need to add #todoist to each one:
- [ ] Buy groceries #todoist <!-- todoist-id:111 -->
- [ ] Milk <!-- todoist-id:222 -->
- [ ] Bread <!-- todoist-id:333 -->
- [ ] Eggs
- Subtasks are synced as Todoist subtasks (using
parentId) - New indented tasks without a Todoist ID are created as subtasks on the next sync
- Subtask hierarchy is preserved in both directions
Importing Tasks from Todoist
Use the command "Import task from Todoist" to search for any open Todoist task and insert it at your cursor:
- Open the command palette (
Ctrl/Cmd + P) - Run "Syncist: Import task from Todoist"
- Search by task content, project, label, or due date
- Select a task β it and its subtasks are inserted as synced markdown
Projects and Labels
Assign a project to a task using the π emoji:
- [ ] Design review #todoist #design #urgent π WorkProject π
2026-03-05 <!-- todoist-id:123 -->
π ProjectNamesets the Todoist project for the task (overrides the default project)#hashtags(other than the sync tag) are synced as Todoist labels, bidirectionally- Project names are resolved from the Todoist project list and cached
Query Blocks (Show Today's Tasks)
Embed a live, interactive task list in any note using a syncist code block:
```syncist
filter: today
```
The block renders as a styled task list with checkboxes, priorities, projects, and due dates. You can complete or reopen tasks directly from the rendered block.
Supported filters (uses Todoist filter syntax):
| Filter | Description |
|---|---|
filter: today | Tasks due today |
filter: overdue | Overdue tasks |
filter: today | overdue | Combined filters |
filter: #ProjectName | Tasks in a project |
filter: @label | Tasks with a label |
filter: p1 | High priority tasks |
Each query block includes a refresh button and shows when it was last updated.
Commands
- Create Todoist task from current line: Convert current line to a synced task
- Import task from Todoist: Search and import a Todoist task at cursor
- Sync with Todoist now: Manually trigger sync
- Open Todoist Sync settings: Quick access to settings
Supported Task Formats
| Emoji | Meaning | Todoist Mapping |
|---|---|---|
| π | Due date | Task due date |
| β« | High priority | Priority 4 |
| πΌ | Medium priority | Priority 3 |
| π½ | Low priority | Priority 2 |
| π | Project | Task project |
Network Usage
This plugin connects directly to the Todoist API v1 (via Obsidian's built-in requestUrl) to sync tasks. There are no external SDK dependencies. Your Todoist API token is stored locally in Obsidian's plugin data and is only used to communicate with Todoist's servers (api.todoist.com).
Development
To build the plugin from source:
npm install
npm run build
To lint:
npm run lint
About This Plugin
Code 100% written by AI; plug-in 100% validated and tested by human.
- Built entirely using
Claudein Cursor IDE - API integration guided by
Context7MCP for up-to-date Todoist and Obsidian documentation - Direct Todoist API v1 integration β no external SDKs, only Obsidian's built-in
requestUrl - Every feature manually validated and tested by a human
Finally
If you like this plugin, please give it a star on GitHub and in Obsidian!
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.