Repository navigation
Releases: binbinsh/notion-caldav-sync
Release list
v0.9.1
Version 0.9.1 restores independently deployable Cloudflare Workers + D1 synchronization. Node.js/PostgreSQL remains available; both runtimes use the same two-way synchronization engine.
- Includes the Worker entry point, generic Wrangler configuration, SQL migrations, local secret template and a complete Workers deployment guide.
- D1 stores encrypted merge bases and persistent webhook receipts. HTTP, webhook and cron entry points share an atomic lease and bounded provider/query budgets. Scheduling is disabled by default.
- The current repository and public release documentation are English. Public code/configuration is independent of private commercial platforms; CI enforces that boundary.
Validation: 44 HTTP/PostgreSQL E2E checks, 8 actual workerd/D1 E2E checks, 5 Docker checks, types, both runtime bundles and Wrangler deployment dry run passed. A disposable Notion/iCloud smoke verified preview, Notion-to-calendar creation, and reverse title/date/status/notes edits after restarting the Worker with persisted D1. The successful run used 20 provider calls plus 4 provisioning/cleanup calls with zero retries; all temporary resources were removed. Details and commands are attached in acceptance-0.9.1.json.
This acceptance uses local workerd/D1 and actual external providers. No remote Worker or database was created or deployed. Start with a small source selection and review the documented Cloudflare CPU, subrequest and D1 query limits before enabling scheduling.
Existing 0.9.0 Node/PostgreSQL deployments retain their database and encryption key. When switching storage, review migration and recovery; do not copy encrypted rows between adapters or run two writers on the same providers.
v0.9.0
Version 0.9.0 replaces Python with an independently deployable, single-user TypeScript service on Node.js 24 and PostgreSQL. Titles, dates, status and Description synchronize in both directions between Notion and Apple Calendar. Independent edits merge against the last acknowledged baseline.
- Retains legacy event hrefs, UIDs, alarms and calendar-owned extensions. Unknown events remain untouched; duplicates and recurring managed events require review.
- Calendar deletion clears the Notion date and retains the task. Notion archive or date removal deletes only the verified managed event. Conflicts and failed readbacks retain the prior merge base.
- Includes HTTP, signed Notion webhook, scheduled entry points and Docker deployment. Scheduling is disabled by default. Credentials come from environment variables; PostgreSQL state is encrypted.
Before upgrading, stop old writers, run the read-only preview on the original sources/calendar, and review the plan before enabling synchronization and scheduling. Initial adoption is bounded by 200 provider requests and 180 seconds per run; preserve acknowledged state and review remaining work using the migration guide.
Validation: 44 HTTP/PostgreSQL fixture E2E checks, types, bundle and 5 Docker checks passed. Final disposable Notion/iCloud acceptance is attached as acceptance-0.9.0.json.
Cloudflare Workers + D1 deployment is added in version 0.9.1; it is not part of this historical tag.
v0.4.1 — Safe bounded synchronization
Production hardening for the Notion API 2026-03-11 deployment.
Highlights:
- enforce Notion's supported 100-item page size
- fail safely on Notion API errors instead of treating failures as empty task lists
- bound search and query pagination to prevent runaway API work
- run scheduled reconciliation every 30 minutes while preserving near-real-time webhooks
- add regression tests for API errors, page size, and pagination limits
Validation: Ruff clean; 31 offline tests passed.
v0.4.0 — Notion API 2026-03-11
Upgrade the integration to Notion API 2026-03-11.
Highlights:
- migrate deleted-page handling from
archivedtoin_trash - update the Cloudflare Workers compatibility date
- support OAuth-based Cloudflare deployment without requiring a long-lived API token
- add regression coverage for trashed-page webhook handling
Validation: Ruff clean; 28 offline tests passed; Cloudflare Python Worker dry-run bundle succeeded.