Task Sync bridges Google Tasks and Microsoft To Do with field-level conflict resolution. Runs on your machine. Your data never leaves.
Google Tasks on the phone.
Microsoft To Do at work.
Same tasks. Two silos. Zero sync.
You add a task on your phone and forget to add it at work. Or vice versa. Things get missed.
Cloud sync tools route your tasks through their servers. Your data becomes their product.
Simple sync tools overwrite entire tasks on conflict. Change the title here, lose the due date there.
Every feature exists because something annoyed us about existing tools.
Change the title in Google Tasks. Change the due date in Microsoft To Do. Both changes survive. Unlike task-level sync, every field is compared individually — last-write-wins per field, not per task. Conflicts logged for transparency.
First sync won't duplicate everything. Tasks are matched across providers by title + notes before creating anything new.
Runs on your machine. Your OAuth tokens, your state files, your data. No cloud middleman. No telemetry.
Tombstones ensure deleted tasks stay deleted across providers. 30-day TTL prevents ghost resurrections.
Use the Web UI for one-click OAuth and visual sync controls with auto-sync timers. Or use the CLI for cron jobs, scripts, and headless environments with JSON output. Same sync engine underneath.
Only commander and zod at runtime. Tiny attack surface.
Every sync run is an 11-step pipeline that ensures nothing gets lost.
Acquire file lock
Read state & mappings
Expire old tombstones
Pull tasks from APIs
Cold-start deduplicate
Field-by-field compare
Last-write-wins
Fan out to providers
Persist new state
Choose your interface. Same sync engine underneath.
Three modes for different workflows. Set once in your config.
Changes flow both ways. Edit anywhere, sync everywhere.
defaultOne-way push. Provider A is the source, B receives updates.
one-wayProvider A is truth. B becomes an exact replica. Additions, edits, deletes — all mirrored.
strictChosen for reliability, not resume padding.
Open source, self-hosted, and built to get out of your way. Star the repo if it's useful.