Taakje (todoist sync)
pendingby Jason Lentink
Two-way sync Todoist. Keep your tasks in sync across both platforms — create, complete, and manage Todoist tasks directly from your vault.
Taakje - Todoist Sync for Obsidian
Taakje (Dutch for "little task") is an Obsidian plugin that provides seamless two-way synchronization between your Obsidian tasks and Todoist.
✨ Features
🔄 Two-Way Sync
- Obsidian → Todoist: Create tasks in your markdown files and sync them to Todoist
- Todoist → Obsidian: Complete tasks in Todoist and see them checked off in Obsidian
📝 Smart Task Creation
- Automatically parses dates (today, tomorrow, next week, etc.)
- Recognizes #project tags and assigns tasks to the correct Todoist project
- Supports @labels for task categorization
- Handles priority levels (
!!1,!!2,!!3,!!4)
📂 Subtask Support
Nested tasks in Obsidian are automatically created as subtasks in Todoist:
- [ ] Main task
- [ ] Subtask 1
- [ ] Subtask 2
- [ ] Another main task
🔗 Bidirectional Links
- Each synced task gets a
[Todoist](link)appended for quick access - Tasks in Todoist include an "Open in Obsidian" link in the description
⚡ Real-Time Checkbox Sync
When you check/uncheck a task in Obsidian, it's immediately updated in Todoist.
📦 Installation
Manual Installation
- Download the latest release from the releases page
- Extract the files to your vault's
.obsidian/plugins/taakje/folder - Reload Obsidian
- Enable the plugin in Settings → Community Plugins
From Source
git clone https://github.com/jlentink/obsidian-taakje.git
cd obsidian-taakje
npm install
npm run build
⚙️ Configuration
1. Get Your Todoist API Key
- Open Todoist Settings
- Scroll to "API token"
- Copy your API token
2. Configure the Plugin
- Go to Settings → Taakje
- Paste your API key
- Click "Test Connection" to verify
- Select your default project for new tasks
Settings Overview
| Setting | Description |
|---|---|
| Todoist API Key | Your personal Todoist API token |
| Default Project | Where tasks without a #project tag go |
| Folder Rules | Assign projects automatically based on file location |
| Sync Interval | How often to check Todoist for changes |
| Add Obsidian Label | Automatically add a label to synced tasks |
| Label Name | Custom label name (default: obsidian) |
| Debug Mode | Show detailed logs in the console |
🚀 Usage
Creating Tasks
Write tasks in your markdown files using standard checkbox syntax:
- [ ] Buy groceries today #shopping
- [ ] Call mom tomorrow !!1
- [ ] Review document #work
Syncing Tasks
- Option 1: Click the checkmark icon in the left ribbon
- Option 2: Use Command Palette (
Cmd/Ctrl + P) → "Taakje: Process current file"
Project Matching
Use #projectname to assign tasks to specific Todoist projects. Taakje matches project names case-insensitively and ignores emojis:
| Your markdown | Matches Todoist project |
|---|---|
#inbox | Inbox |
#work | 💼 Work |
#boodschappen | 🛒 Boodshappen |
Folder Rules
Automatically assign tasks to projects based on the file's folder location. This is perfect for organizing work projects, personal areas, or different life domains.
How it works:
- Go to Settings → Taakje → Folder Rules
- Enter a folder path and select a project
- Click "Add" to create the rule
- All tasks in that folder (and subfolders) will automatically use that project
Priority order for project assignment:
- Explicit
#projecttag in task — always wins - Folder rule — based on file location
- Default project — your fallback setting
Example:
If you have these folder rules:
work/clients→ Client Projectswork→ Workpersonal/health→ Health & Wellness
Then tasks in:
work/clients/acme/meeting-notes.md→ assigned to "Client Projects"work/planning.md→ assigned to "Work"personal/health/workout.md→ assigned to "Health & Wellness"random-notes.md→ assigned to your default project
Note: More specific (longer) folder paths take priority over general ones.
Subtasks
Indent tasks to create subtasks:
- [ ] Plan vacation #travel
- [ ] Book flights
- [ ] Reserve hotel
- [ ] Pack bags
🔧 Commands
| Command | Description |
|---|---|
| Process current file | Sync all tasks in the active file |
📋 Task Format
After syncing, tasks look like this:
- [ ] Buy groceries [Todoist](https://app.todoist.com/app/task/abc123)
- [x] Call mom [Todoist](https://app.todoist.com/app/task/def456)
🤝 Contributing
Releasing
Version tracking is tag-based and package.json is the source of truth.
Before creating a release:
- Run
just patch,just minor, orjust majorlocally. - Review and commit the updated
package.json,manifest.json, andversions.json. - Push the commit to
mainthrough your normal PR flow. - Run
just tagfrom the release commit, or usejust release patch|minor|majorfor the full local flow. - Use
just showverany time you want to confirm the version that will be tagged. - GitHub Actions will validate the tag, build the plugin, and publish the release assets.
If the tag version does not match package.json, the release workflow will fail on purpose.
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
📄 License
This project is licensed under the MIT License — see the LICENSE file for details.
🙏 Acknowledgments
📞 Support
If you encounter any issues or have questions:
- Open an issue
- Check existing issues for solutions
Made with ❤️ for the Obsidian community
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.