Skip to content

Comparison of Similar Libraries#

There are a few Python libraries that provide similar functionality to pyticktick:

  1. ticktick-py
  2. dida365
  3. didatodolist
  4. tickthon

These libraries are all designed independently to interact with the TickTick API. pyticktick is another library that overlaps with these other libraries, making it the target of this xkcd joke:

xkcd 927
Relevant xkcd #927

The other libraries came first, and were inspiration for pyticktick. So by all means, use them if they better suit your needs. They have been around for longer, so are probably more bug-free. pyticktick does take advantage of learnings in those libraries, and this explanation attempts to make a helpful comparison of the other libraries to pyticktick.

Out of Date Comparisons!

The hope is that this document will serve as a reference for users who are considering using the right library for their needs. It is a best attempt at providing a comprehensive comparison, but it may not be up to date, as the other libraries may add functionality. You can see the last time this document was updated at the very bottom.

High-Level Comparison#

At a high level, this is a breakdown of the features and capabilities of each library:

Note

This chart does not provide the full picture, and a lot of the provided features are more nuanced than a binary supported or not.

V1 Support#

The TickTick V1 API has a handful of endpoints that are supported. TickTick provides a spec to work off of. While it may seem like some libraries are missing features, they may just be supporting the V2 API, since there is a lot of overlap.

V2 Support#

The TickTick V2 API is undocumented, so the descriptions below may not be fully accurate. There may also be unknown endpoints that are not documented here.

Components pyticktick ticktick-py dida365 didatodolist tickthon
Get Active Data Endpoint ✅ ✅ ❌ ✅ ✅
Get Completed Tasks Endpoint ✅ ✅ ❌ ❌ ✅
Get User Setting Endpoints ✅ ❌ ❌ ❌ ❌
Post Project Endpoints ✅ ✅ ❌ ✅ ❌
Post Task Endpoints ✅ ✅ ❌ ✅ ✅
Post Tag Endpoints ✅ ✅ ❌ ✅ ❌
Post Pomodoro Endpoints ❌ ❌ ❌ ❌ ✅
Post Habits Endpoints ❌ ❌ ❌ ❌ ✅
Post Countdown Endpoints ❌ ❌ ❌ ❌ ❌
Why no support for pomodoro, habits, countdown, etc?

The essential features of TickTick are the projects, tasks, and tags components. These are fully supported in pyticktick. The other features are not essential to everyone, but might be important to you. If you need support for these features, please open an issue on the GitHub repository.

V1 / V2 Isolation#

pyticktick is the only library that supports both V1 and V2 endpoints in a way that they can be used independently. ticktick-py has limited support for V1 endpoints, but its entangled with V2 endpoints. To see why pyticktick built isolated functionality for V1 and V2 endpoints, you should read why pyticktick supports two apis.

Pydantic Support#

pyticktick and dida365 both support Pydantic models for their data structures. This allows for easier data validation and stronger guarantees about the data being sent to and from the TickTick API. pyticktick is the only library to support this for the V2 endpoint.

Retry support#

pyticktick and dida365 both support retrying when the V1 endpoint is overloaded with too many requests. ticktick-py is the only library to support retries for both V1 and V2 endpoints. This was not implemented in pyticktick since it was impossible to determine which V2 calls were failing due to rate limits versus other errors.

Async Support#

dida365 is the only library to support asynchronous operations, although it does not support synchronous operations, that must be handled manually.

TickTick vs DIDA365#

TickTick and DIDA365 are the same application, but DIDA365 is the Chinese version. They share similar API endpoints, but with different URLs. The names of the libraries match the names of the applications they support, with the exception of dida365, which has the ability to support both TickTick and DIDA365 endpoints.

What Makes pyticktick Worth Using?#

pyticktick has been designed to provide the best experience to developers with:

  1. An emphasis on user experience, providing flexibility where it can (V1 / V2 Support), and providing rigidity where it should (Pydantic Support).
  2. A consistent interface that is easy to use and understand.
  3. Thorough documentation, to make learning as easy as possible.