Craftist a Todoist eXtension for Craft

Hi Todoist fellows,

I took some time at the weekend to build an initial release for my Todoist integration.
you can find the release and download the extension here:

Here is a part of the README in the repository here:

The following features are currently supported by Craftist:

  • import todays tasks
    • this will import the tasks due today from your todoist account
    • the tasks will be imported as todo items and contain links to the tasks in todoist (a direct link to the task in the app (doesn’t work on macOS) and a link to the Webview of the task)
  • crosslink open tasks
    • this will create crosslinked tasks between every (unchecked) todo item in the current document and Todoist
    • the tasks in Todoist will directly link back to the todo item in Craft
    • cancelled or done todo items in the craft document will be ignored
  • sync task states
    • this will sync the states of linked Tasks to todoist
    • the states will be changed with the following scheme:
      • if the task is completed anywhere (Todoist or craft) complete it on the other platform
      • if the task is cancelled in craft and open in todoist, close it in todoist
    • this will work for every todo item which was linked to a Todoist Task by this eXtension
  • import project list
    • this will import the list of your Todoist projects
    • the name of the project will be a direct link to the project in the app (as mentioned this does currently not work on macOS)
    • after the project name you will see a link to the Webview of the project

If you have any questions, ideas or issues just reply here, create an issue in the repository or contact me in the slack community

Thanks to @thomaszdxsn for the inspiration in his integration for Todoist.


Good job. I noticed on your gitHub for this you are managing to sync ToDos between Craft and ToDoist
How’s that being done. I can’t see a way of picking up the update to a check box on the Craft side since (unless i’ve missed something) the API doesn’t expose any Crafts events so far?

There is a button in the eXtension which syncs the states. So this is not automatically executed. You have to trigger a sync at the moment.

This is working well for me so far in early usage. Thanks for the build!

1 Like

Great to hear!
As mentioned I‘m interested in further ideas to support your usecases better. If you have any requests please share them here or as issue in the repository :+1:t3:

Ah understood. I think opening the API is a great move for Craft. But I’m holding off on the ideas I’ve got until we can access event hooks and address pages other than the currently displayed one.

totally agree - both are valid points. I have some ideas on improving the sync action but not sure if they work and if they are usabel. I’ll play with them a bit and see what’s possible.

Version 0.2 is released in the repository

New Features:

  • create tasks from selection (selected blocks)
  • import all tasks


  • theme detection (dark / light mode)
  • ui improvements (divided sections)
  • prevention of sync task states for recurring tasks (currently not transparent to the user what happens in the background)

Just released version 0.3 of Craftist:

  • new: “Link Note to Project” Button / Feature which will prepend a link to an existing project in Todoist to the current document
  • new: “Import Tasks from linked Project” Button / Feature which will import all Tasks from the linked Project and add them as Blocks to the end of the document
  • change: Creating / Crosslinking tasks will now create tasks in the linked project (if the note is linked) - if the note is linked to multiple projects in todoist the tasks will be created in the inbox
  • change: Created / Linked Tasks will now contain a Link in the Task Description to the Craft Document itself

Check it out here

1 Like

The extension is excellent so far.

Do you know if I’m sharing a Workspace in Craft and also sharing a task list in Todoist, can others click the links between tasks/notes and have them navigate properly between applications?

Good to hear. I have to test this - I don’t know if task IDs are matching when in a shared Project between different users. I would assume that the block ids are equal in a shared space so opening the Craft block should work.

I just tried it with a demo account in todoist and it worked but reading the API It seems that projects between collaborators don’t share the same id: REST API Reference | Todoist Developer
If you need that in you’re project It would be great when we can share a testing project and testing space so I can integrate this into the eXtension. If thats ok for you please DM me here or in the slack community @curtismchale

This extension is absolutely incredible! Quick feature request: The ability to specify how the Todoist link shows up in Craft (e.g. app link, web link, or both). For example, I have the Todoist app installed and therefore don’t ever need the web link.

Thanks again, and can’t wait to see what additional tweaks and features you make when the next version of the API is released :grinning:

great that you like it!

This was already requested - see the issue in the repository here.

I’m already working on it and I plan to implement this in a settings menu where you can select which link types you want to use and additional settings (which may be necessary later).

The main concern (why I included both links in the first place) is that the in-app urls only work on iOS and iPadOS and not on macOS. I already filed a feature request for todoist to support these on macOS, too. Currently on macOS it just brings the todoist app to the foreground and doesn’t open a project or task.

If you have further ideas and requests just let me know - feel free to DM me here or in the slack community :wink:

1 Like

Version 0.4 is released:

Quite a big update at least for me:

  • new: TASK GROUPING - now all imported tasks are grouped by their parent task / project / section
    • if you import tasks from a linked project the tasks will just be grouped in their sections (this can be changed later with settings)
  • new: imported Tasks will contain the due date of the task which is linked to the correct daily note
  • new: Settings Menu to change some basic settings:
    • Enable / Disable Mobile Url (for tasks and projects)
    • Enable / Disable Webview Url (for tasks and projects)
    • Enable / Disable Due Dates for imported tasks
    • note: these settings are stored locally but must be set again after you reinstalled the eXtension (at least from my testing results)
  • change: „import project List“ now uses correct order of projects
  • fixed: „import todays tasks“ button now also imports overdue tasks
  • fixed: tasks won’t get imported twice when they are already present in the document
    You can download it from the repository here:
    If you have Feedback or issues you can reply here, DM me or open an issue on GitHub :smile:
1 Like

Simply amazing! Are you able to replicate this for Things3 (similar to what you did with Drafts)?

Would love to see you become a full time employee of the Craft team :pray:t3::crossed_fingers:t3:

1 Like

thanks a lot :slight_smile:
As far as I can see its not possible to retrieve tasks / projects from things with the URL scheme. Things also does not offer a REST API or something similar.
It would be possible to build an eXtension which just crosslinks tasks similar like what I did with Drafts. But features like “import tasks from linked project” or “import todays tasks” are not possible.

I messaged them if there are undocumented URLs but I don’t think so…

Since I’m developing this in me free time and personally only use Todoist Iits unlikely that I would built this in the near future.

1 Like

Craftist version 0.5 is released :tada:

This is more of a cleanup release but many of you (and myself) had issues with Craftist in the web version of Craft - it was just not loading - this is now resolved :partying_face:

Therefore I slightly modified the Login/Logout behavior.

Please ensure to login again with your Todoist API token after you installed the update to version 0.5!

You can download it from the repository here:

And as always: If you have Feedback or issues you can reply here, DM me or open an issue on GitHub :+1:

Release notes:


  • new/fixed: Craftist is now working in the web version of Craft
  • change: slightly changed the login behavior - no separate login form anymore - now included in the “Login/Logout” button
  • fixed: cleanup of notification behavior when execution of operations succeeds / fails

Craftist 0.6 released :muscle:t3:
Integrating Todoist with Craft just got a little bit better (again) :grinning:
This release includes some really cool changes. First of all now metadata such as due dates, labels and descriptions can be synced to craft.
The syncing of task states and content was improved and I enabled sync for recurring tasks (if you import due dates as metadata)
The settings window was completely reworked and the settings are handled better in the eXtension.
Imported tasks will be inserted below the currently selected block (can be disabled) and if you create tasks from a daily note they will now be due on the day of the daily note. Last but not least some bug fixes and smaller changes.
Please ensure to login with your Todoist Token again after installing the new version and check the settings for your own preferences.

Find the source code and installation file at GitHub - FlohGro-dev/Craftist: Todoist integration for Craft

For the sake of completeness - here the release notes from the repository:

  • new/improved: sync task improvements - recurring tasks are now enabled if due dates are included as metadata
  • new: metadata import - imported and synced tasks will now contain metadata from todoist (due dates, labels and descriptions) which you can enable / disable as you like
  • change: added warning for disabled task links since syncing states is not possible without links
  • new/improved: completely revamped settings window for easier usability
  • fixed: creating tasks features now respect link settings
  • new: option to import tasks after the current selected block (enabled by default)
  • new: option to set due dates for exported tasks to date of the daily notes (enabled by default)
  • change: craftdocs://open[…] urls (resulting from cross-linking) will be stripped from task contents since they don’t work and just produce clutter.

Craftist 0.7 is out :hugs:
Another step forward for my Craft eXtension to integrate with Todoist.

Find all the details below :memo: and download :arrow_down: the new release from the GitHub repository:

After installing it you have to Login again with your Todoist token
If you have question’s / ideas or issues let me know :postbox:

Priorities Import :red_circle::orange_circle::large_blue_circle::white_circle:

The priorities of your tasks are imported from Todoist as metadata. The imported priorities will be highlighted similar to the colors in todoist as p1🔴/p2🟠/p3🔵/p4⚪️
Of course you can disable the import in the settings

Sync Task Improvements :wrench:

I completely reworked the behavior to make it much cleaner (e.g. no deleting and re-adding of task blocks)
The sync of Recurring Tasks was improved again - they will now be “unlinked” in daily notes to prevent completing tasks several times

Fixed Task formattings :adhesive_bandage:

I improved the handling of formatted tasks (e.g. with markdown links or bold / italic styling) these should be preserved now and don’t get lost after creation or sync

CONTINUOUS TASK SYNC (beta) :repeat:

Please provide feedback on that in the discussions on GitHub

It can be enabled in the settings.
The Sync Task Button will then enable / disable the continuous sync of tasks every ~30 seconds.

I hope you like this update :sunglasses:
The repository now contains several discussions where you can provide feedback if you want - this will help me to decide future development and feature priorization
Have a great day :v:t3:


Craftist 0.8 was released :rocket:

My Craft eXtension for Todoist just got better :+1:

Find all the details below :memo: and download :arrow_down: the new release from the GitHub repository:

:warning: After reinstalling the newest version - make sure to login with your API token again.

Let me know if you like the new release and what you would like to see additionally :mailbox_with_mail:. I already have some (challenging) requests in the pipeline but appreciate your feedback :ok_hand:

:new: tab layout :paintbrush:

now the features are separated from the settings and info in tabs to reduce the clutter in the eXtension

The settings are not hidden behind a button anymore - instead they are directly displayed in the corresponding tab

:new: Info tab :information_source: with Version Check :white_check_mark:

The new info tab checks if the installed version is the latest available version and displays some informative text.

Thanks to @dharam for the inspiration, help and permission here!

:new: Import Tasks with Label :label:

You can now import all tasks with a selected label into the current document / page

To select a label just open the dropdown menu in the new “Import Tasks with Label” button and click on the label whose tasks you want to import

:cool: setting to exclude tasks assigned to others :otter:

You can now select if you want to import tasks assigned to others in shared projects or if you just want to import tasks assigned to you or unassigned.

:cool: shortened links to tasks :shorts:

Links to tasks now use a more compact layout for mobile (App) :iphone: and web :globe_with_meridians: links with emojis. This reduces the clutter and shortenes the displayed text for imported tasks

:cool: due strings for recurring tasks :male_detective:

The due strings are now imported for recurring tasks - this hopefully simplifies to determine the repeating frequency of a task

:bug: no importing of completed (sub-) tasks anymore

No already completed (sub-)tasks are imported anymore - this could happen in some circumstances when the parent task was not completed but (some) subtasks already were

:bug: fixed edge case for recurring tasks

previously if an instance of a recurring task was completed in Todoist first, and then in Craft - syncing the task states also completed the next instance of the task in Todoist. This is now fixed - recurring tasks are only completed if the due date matches between Todoist and Craft.

I hope you like this new update :sunglasses:

Again if you have any questions :question:issues :beetle: or have other feature requests :technologist: please let me know :speaking_head:

If you want to support my work on Craftist or other projects checkout donate – FlohGro

Have a great day :v:t3:

1 Like