tasks-todo-sync
v0.3.0
Published
Self-hosted, bidirectional sync between Google Tasks and Microsoft To Do that runs on Google Apps Script.
Downloads
608
Maintainers
Readme
Why it matters
Your tasks do not always begin in the same app.
- Ask Gemini to add a task while you are using Android.
- Turn an email into a task without leaving Gmail.
- Create a To Do from a file in Microsoft 365 Copilot, then find it in To Do or Outlook.
- Keep using an existing Microsoft-connected Apple Reminders workflow on your iPhone, iPad, or Mac.
Google and Microsoft each make this easy inside their own ecosystem. The missing piece is the connection between Google Tasks and Microsoft To Do.
Tasks–To Do Sync adds that connection. A task captured on one side can follow you to the other—without sending your task data through a hosted sync service.
How it works
- Capture in Google. Gemini, Gmail, Android, and other Google experiences can place work in Google Tasks.
- Sync through your own project. A private Google Apps Script installation keeps Google Tasks and Microsoft To Do aligned in both directions.
- Continue in Microsoft. Use the synchronized tasks in Microsoft To Do and the Microsoft 365 experiences already connected to it. If your Microsoft account is part of your Apple Reminders setup, that existing connection can keep your Apple devices in the same personal workflow.
The project directly synchronizes Google Tasks ↔ Microsoft To Do. The surrounding Google, Microsoft 365, and Apple experiences are their native integrations—not features claimed or recreated by this project.
The private trigger runs every 10 minutes. Ordinary changes normally appear within 0–10 minutes; operations that require two complete confirmation rounds normally settle within 10–20 minutes.
What stays in sync
| Capability | Direction | Notes | |---|:---:|---| | Create and edit tasks | Google ↔ Microsoft | Changes can begin on either side | | Complete and reopen | Google ↔ Microsoft | Completion state follows the task | | Notes | Google ↔ Microsoft | Plain-text projection | | Due dates | Google ↔ Microsoft | Date only; Google Tasks has no time-of-day field | | Personal lists | Google ↔ Microsoft | Eligible lists are discovered and paired automatically | | Delete tasks and lists | Google ↔ Microsoft | Enabled by default with confirmation and recovery records | | Move tasks between lists | Google ↔ Microsoft | Enabled by default with a durable move journal and live revalidation |
See the field compatibility matrix for verified projections, provider-specific or unverified fields, and planned research.
Supported environments
Initial installation and source updates require a Windows, macOS, or Linux desktop/laptop with Node.js 22+, a terminal, and a modern browser. Chromebook Linux is best effort. npm installation is not supported on phones; the Microsoft connection wizard remains mobile-responsive for reauthorization.
A sync engine, not a chain of recipes
General automation platforms such as Zapier and Make can connect Google Tasks and Microsoft To Do through configurable triggers and actions. That flexibility is useful when every workflow is different. Keeping two task systems aligned, however, is a state problem—not just a “when this happens, do that” recipe.
- One stateful loop. Lists and tasks keep stable mappings across both services instead of relying on unrelated one-way automations.
- The full task lifecycle. Creation, edits, completion, reopening, due dates, lists, and guarded deletion are handled together so one event does not start an automation loop or resurrect old work.
- Built for these two services. Conflict checks, recovery journals, rename handling, and tombstones address the failure modes of task synchronization directly.
- Owned by you. The engine, credentials, and state stay in your Google Apps Script project. There is no Tasks–To Do Sync subscription, hosted account, or task database.
The core loop is covered by 265 automated tests, GitHub CI, CodeQL, and recorded real-account validation. Local deterministic validation exercises 600 tracked task pairs across synchronization, deletion, movement, recovery, pagination, and long-content scenarios. Detailed evidence and runtime boundaries are recorded in the engineering audit.
Get started
Create your private Apps Script project:
npx tasks-todo-sync initThe installer deploys the sync code to a standalone Google Apps Script project in your account and gives you the editor link for the remaining setup.
You will need:
- one Google account to own and run the Apps Script project;
- one personal Microsoft account to connect Microsoft To Do.
You authorize Google and Microsoft separately. Each provider may show more than one sign-in or consent page depending on your existing browser session, but the project connects one account from each ecosystem.
The standard personal setup uses Microsoft Device Code Flow. It does not require you to register an Entra application, create a client secret, or configure a redirect URI. Advanced self-managed Entra credentials remain supported for existing and specialized deployments.
Follow the quick start for the guided installation, or open the deployment guide for manual setup, upgrades, rollback, cross-list moves, and the safe destination-first replacement order.
Documentation
| Guide | Use it for | |---|---| | Quick start | The shortest personal setup path | | Deployment guide | Personal and Advanced Microsoft authorization, Apps Script, upgrades, and rollback | | Engineering audit | Verified behavior, limitations, and deferred work | | Security policy | Reporting a vulnerability privately | | Changelog | Release history |
Questions, ideas, or something not working? Open an issue.
License
MIT. See LICENSE.
