Skip to main content

Bidirectional sync between TickTick and TaskWarrior

Project description

tickticksync

Bidirectional sync between TickTick and TaskWarrior.

A background daemon listens for TaskWarrior hook events (push path) and polls the TickTick API on a timer (pull path). SQLite tracks task mappings and last-known state for last-write-wins conflict resolution.

Requirements

  • Python 3.11+
  • uv
  • TaskWarrior installed and configured

Install

Global install (recommended for CLI usage)

# Using uv (recommended)
uv tool install tickticksync

# Using pipx
pipx install tickticksync

Project dependency

# Using uv
uv add tickticksync

# Using pip
pip install tickticksync

From GitHub (latest development version)

uv pip install git+https://github.com/rube-de/tickticksync.git

Development

git clone https://github.com/rube-de/tickticksync.git
cd tickticksync
uv sync --dev

Setup

tickticksync init

This will:

  1. Prompt for your TickTick OAuth client_id and client_secret
  2. Write config to ~/.config/tickticksync/config.toml
  3. Register the ticktickid UDA in TaskWarrior
  4. Install on-add and on-modify hook scripts

Usage

One-off sync

tickticksync sync

Daemon

tickticksync daemon start   # start background sync
tickticksync daemon stop    # stop the daemon
tickticksync daemon status  # check if running

Status

tickticksync status         # show mapped task count and last sync time

Configuration

Config lives at ~/.config/tickticksync/config.toml:

[ticktick]
client_id = "your-client-id"
client_secret = "your-client-secret"

[sync]
poll_interval = 60          # seconds between full syncs
socket_path = "/tmp/tickticksync.sock"

[mapping]
default_project = "inbox"   # TickTick project for new TW tasks

Architecture

TaskWarrior hooks ──► Unix socket ──► Daemon ──► SyncEngine
                                        ▲
                              poll timer ┘
                                        │
                              TickTick API (concurrent project fetches)
                                        │
                              SQLite state store (task mappings)
  • Push path: TW on-add/on-modify hooks send task JSON to the daemon via Unix socket. If the daemon is down, events queue to disk and replay on next startup.
  • Pull path: The daemon polls TickTick on a configurable interval, fetching all projects concurrently.
  • Conflict resolution: Last-write-wins based on modification timestamps.
  • Field mapping: Priority levels, due dates, annotations, and checklist items are mapped between the two systems.

Development

uv sync --dev
uv run pytest

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tickticksync-0.1.0.tar.gz (75.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tickticksync-0.1.0-py3-none-any.whl (17.3 kB view details)

Uploaded Python 3

File details

Details for the file tickticksync-0.1.0.tar.gz.

File metadata

  • Download URL: tickticksync-0.1.0.tar.gz
  • Upload date:
  • Size: 75.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for tickticksync-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ed233559c2fecf073101057d772b3a55938a825bbba4758fe620a167c85d3ce2
MD5 e91d36b2caf11fd6081e092edb1cc87a
BLAKE2b-256 8e777b368fd5e9fed86c35e2a125da6896f01d80fafc8b4db67de6ce6624cc3d

See more details on using hashes here.

Provenance

The following attestation bundles were made for tickticksync-0.1.0.tar.gz:

Publisher: publish.yml on rube-de/tickticksync

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tickticksync-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: tickticksync-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 17.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for tickticksync-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 22d8d0077840f1e4ef4fd5722dce8d20ff50b4dfce9b35e8c40c4ce4bf60fe06
MD5 78f0b39ba0f05016f36277c2103e357b
BLAKE2b-256 57e9c104b52e29683283929b92879c463e8b868c30f27b20618a1ec9e0020f95

See more details on using hashes here.

Provenance

The following attestation bundles were made for tickticksync-0.1.0-py3-none-any.whl:

Publisher: publish.yml on rube-de/tickticksync

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page