CalDAV Calendar Sync

Two-way calendar synchronization with any RFC 4791 CalDAV server

CalDAV Calendar Sync

What it does

Synchronizes Odoo's Calendar app with any standards-compliant CalDAV server (Nextcloud, Radicale, Baïkal, Fastmail, iCloud, …), the same way the core google_calendar / microsoft_calendar modules sync with their respective providers.

Each user can add any number of CalDAV calendar accounts (URL + username + password or app-specific password) from their Preferences — each one syncs independently, with its own credentials and sync cursor.

Pull

Uses RFC 6578 sync-collection when the server supports it (incremental and cheap), falling back to a getctag + full report comparison otherwise.

Push

Pushes local calendar.event creates, updates and deletes back to the server, using ETag preconditions to avoid clobbering concurrent remote edits.

Automatic & manual

Runs automatically on a scheduled action (every 15 minutes by default) and can also be triggered manually from Preferences.

Recurring events

Recurring events sync in full, including per-occurrence exceptions (RECURRENCE-ID overrides and EXDATE), not just the master rule.

Read-only subscriptions

Tick Read-Only Subscription on an account for calendars you can only view — subscribed holiday feeds, team calendars you lack write access to, ICS subscriptions. Odoo still pulls remote changes on every sync but never pushes, and username/password become optional for public feeds.

Requirements

No extra Python packages are required: this module only relies on requests, lxml and vobject, which are already core Odoo dependencies.

See README.md in the module for setup steps, known edge cases and other limitations.

Licensed under LGPL-3.