Todoistian

pending

by Pierre-Yves Gillier

Forked from Ultimate Todoist Sync

Synchronize vault's tasks with Todoist.

β˜… 2 starsUpdated 22d agoGPL-3.0Discovered via Obsidian Unofficial Plugins
View on GitHub

Obsidianist

Seamless bidirectional task synchronisation between Obsidian and Todoist.


Features

FeatureObsidian β†’ TodoistTodoist β†’ Obsidian
Add taskβœ…πŸ”œ
Delete taskβœ…πŸ”œ
Modify task contentβœ…βœ…
Modify due dateβœ…βœ…
Modify labels / tagsβœ…πŸ”œ
Modify priorityβœ…πŸ”œ
Mark as completedβœ…βœ…
Mark as uncompletedβœ…βœ…
Task notes / commentsπŸ”œβœ…
Modify projectπŸ”œπŸ”œ
Modify descriptionπŸ”œπŸ”œ

Installation

Community plugins (recommended)

  1. Open Settings β†’ Community plugins and disable Restricted mode.
  2. Click Browse, search for Obsidianist, and click Install.
  3. Enable the plugin under Installed plugins.

Manual

  1. Download the latest release from the Releases page.
  2. Copy main.js, manifest.json, and styles.css into .obsidian/plugins/obsidianist/ inside your vault.
  3. Enable the plugin in Settings β†’ Community plugins.

Configuration

  1. Go to Settings β†’ Obsidianist.
  2. Paste your Todoist API token (found at https://app.todoist.com/app/settings/integrations/developer) and click the send button to initialise.
  3. Choose a Default project β€” new tasks without an explicit project tag are sent here.

Available settings

SettingDefaultDescription
Todoist API tokenβ€”Required. Your personal Todoist API token.
Automatic sync interval300 sHow often the background sync runs. Minimum 20 s.
Default projectInboxTarget project for tasks with no project tag.
Full vault syncOffWhen enabled, #todoist is added to every task in the vault automatically.
Use Desktop URIsOnLinks open in the Todoist app (todoist://) instead of the browser.
Debug modeOffPrints verbose logs to the developer console.

Usage

Task format

Mark any Markdown task with #todoist and it will be picked up on the next sync:

- [ ] My task #todoist
- [ ] Buy groceries πŸ“…2025-06-01 !!2 #work #todoist
    - [ ] Child task #todoist

Syntax reference

TokenDescriptionExample
#todoistMarks the line for sync. Required unless Full vault sync is on.- [ ] task #todoist
πŸ“… YYYY-MM-DDDue date. Also accepts πŸ—“, πŸ—“οΈ, πŸ“†.- [ ] task πŸ“…2025-06-01 #todoist
!!1 – !!4Priority. !!4 = urgent (red), !!1 = natural. Must have spaces on both sides.- [ ] task !!4 #todoist
#projectNameIf the tag matches a project name exactly, the task is sent to that project.- [ ] task #Work #todoist
#tagAny tag that does not match a project name becomes a Todoist label.- [ ] task #tagA #tagB #todoist

After a task is created, the plugin writes its Todoist ID and a deep-link back into the line:

- [ ] My task #todoist %%[todoist_id:: 123456789]%% [link](todoist://task?id=123456789)

Project assignment priority

  1. File-level default project (set via command, see below).
  2. Tag matching a project name (#ProjectName).
  3. Global default project from settings.
  4. Parent task's project (for indented child tasks).

Per-file default project

Open the command palette (Ctrl/Cmd + P) and run Obsidianist: Set default project for current file. A dropdown lets you pick a project; the selection is stored per-file and shown in the status bar.

Manual sync

In the plugin settings, click Sync to trigger an immediate synchronisation, or Check Database to scan for inconsistencies and unsynced tasks.


How sync works

Obsidian β†’ Todoist

TriggerAction
New #todoist line detected (editor change or file save)Task created via Todoist REST API v2; ID written back into the line.
Cursor leaves a modified task lineChanged fields (content, due date, labels, priority) are sent as an update.
Delete / Backspace removes a task ID from the fileTask deleted in Todoist.
Checkbox clickedTask closed or reopened in Todoist.

Todoist β†’ Obsidian

Background sync (default every 5 min) fetches activity events originating outside Obsidian and applies them to vault files:

EventAction
Task completedCheckbox set to [x] in the file.
Task uncompletedCheckbox reset to [ ].
Content updatedTask text replaced in the file.
Due date updatedDate token updated or removed.
Comment addedNote appended below the task line.
Project eventProject cache refreshed.

Data storage

All data is persisted in Obsidian's plugin storage (loadData / saveData):

KeyContents
todoistTasksData.tasksCached Task[] objects, each extended with a .path vault filepath.
todoistTasksData.projectsCached project list.
todoistTasksData.eventsAlready-processed activity event IDs (deduplication).
fileMetadataMap of filepath β†’ { todoistTasks, todoistCount, defaultProjectId? }.
lastSyncTimeTimestamp used as dateFrom when fetching activity events.

Development

npm install        # install dependencies
npm run dev        # watch mode (rebuilds on change)
npm run build      # production build (runs tsc first)
npm run version    # bump version in manifest.json and versions.json

No test suite exists currently.


Contributing

Pull requests are welcome. Please open an issue first to discuss significant changes.

License

Released under the GNU GPLv3 License.

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.

Todoistian | SimilarPlugins