bastiaanschonhage186 downloadsBidirectional task sync with Todoist. Subtasks, import, projects, labels, and inline query blocks. Created with the help of AI; fully validated and tested by human.
Created with the help of AI; fully validated and tested by human.
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.
#todoist parent are synced as subtasks automatically — no tag needed on each child📁 ProjectName metadata, bidirectional label sync via #hashtagssyncist code blocks (e.g., filter: today)requestUrl — no external SDKsmain.js and manifest.json from the latest releasesyncist-todoist-sync in your vault's .obsidian/plugins/ directorymain.js and manifest.json into that foldernpm install and npm run buildTestVault folder in Obsidian (the plugin is symlinked)#todoist)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 -->
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
parentId)Use the command "Import task from Todoist" to search for any open Todoist task and insert it at your cursor:
Ctrl/Cmd + P)Assign a project to a task using the 📁 emoji:
- [ ] Design review #todoist #design #urgent 📁 WorkProject 📅 2026-03-05 <!-- todoist-id:123 -->
📁 ProjectName sets the Todoist project for the task (overrides the default project)#hashtags (other than the sync tag) are synced as Todoist labels, bidirectionallyEmbed 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.
| Emoji | Meaning | Todoist Mapping |
|---|---|---|
| 📅 | Due date | Task due date |
| ⏫ | High priority | Priority 4 |
| 🔼 | Medium priority | Priority 3 |
| 🔽 | Low priority | Priority 2 |
| 📁 | Project | Task project |
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).
To build the plugin from source:
npm install
npm run build
To lint:
npm run lint
Created with the help of AI; fully validated and tested by human.
Claude in Cursor IDEContext7 MCP for up-to-date Todoist and Obsidian documentationrequestUrlIf you like this plugin, please give it a star on GitHub and in Obsidian!