Tasks CalDAV Sync

pending

by José Coelho

Bidirectional sync between tasks and CalDAV servers.

21 starsUpdated 5d agoMITDiscovered via Obsidian Unofficial Plugins
View on GitHub

Tasks CalDAV Sync

Bidirectional sync between obsidian-tasks and any CalDAV server (Nextcloud, Radicale, Fastmail, iCloud, etc.).

Works with the obsidian-tasks plugin — syncs task status, dates, priorities, recurrence, tags, and notes as standard VTODO items.

Demo

Features

  • Multi-calendar support — sync different tags to different calendars and servers (tasks must have the tag on both sides — Obsidian #tag and CalDAV CATEGORIES)
  • Bidirectional sync — push tasks to CalDAV servers and pull changes back
  • Auto-sync — configurable interval (default: 5 minutes)
  • Dry-run mode — preview what will sync before committing changes
  • Conflict detection — manual resolution or auto-resolve with Obsidian wins
  • Task notes — indented bullet points below a task round-trip as VTODO DESCRIPTION
  • RecurrenceRRULE round-trips between CalDAV and obsidian-tasks format
  • Delete detection — three-way diff detects deletions on either side
  • Reconciliation — automatically matches identical tasks when switching calendars or after lost sync data, preventing duplicates

Requirements

  • Obsidian v0.15.0+
  • obsidian-tasks plugin (must be installed and enabled)
  • A CalDAV server with VTODO support

Installation

From Community Plugins

Not yet available — waiting for review.

Using BRAT (recommended)

  1. Install the BRAT plugin
  2. Open BRAT settings → Add Beta Plugin
  3. Enter josecoelho/obsidian-tasks-caldav and click Add Plugin
  4. Enable "Tasks CalDAV Sync" in Settings → Community Plugins

BRAT will also handle future updates automatically.

Manual

  1. Download main.js, manifest.json, and styles.css (if present) from the latest release
  2. Create VaultFolder/.obsidian/plugins/obsidian-tasks-caldav/
  3. Copy the downloaded files into that folder
  4. Restart Obsidian and enable the plugin in Settings → Community Plugins

Configuration

Open Settings → Tasks CalDAV Sync. Add one or more calendars, each with:

SettingDescription
TagOnly tasks with this tag are synced — on both sides (Obsidian tags and CalDAV CATEGORIES must match)
Calendar nameName of the calendar on the server
Server URLCalDAV server endpoint
Username / PasswordCalDAV credentials

Global settings:

SettingDescriptionDefault
Sync intervalAuto-sync period in minutes5
New tasks destinationFile where incoming CalDAV tasks are createdInbox.md
New tasks sectionOptional heading within the destination file
Sync completed tasksInclude completed tasks in syncoff
Delete behaviorWhat happens when a task is deleted on one sideask

Conflict resolution

Two modes:

  • Manual (default) — sync pauses when conflicts are detected, requiring review
  • Auto-resolve Obsidian wins — automatically keeps the Obsidian version on conflict

Usage

Commands

Open the command palette (Ctrl/Cmd + P) to access:

CommandDescription
Sync with CalDAV nowRun an immediate sync
Preview sync (dry run)See what would change without applying
View sync statusShow last sync time and any conflicts
Inject task IDsAdd unique IDs to selected tasks
Validate task IDsCheck document for valid/invalid task IDs

Task IDs

Each synced task needs a unique ID. The plugin uses the obsidian-tasks native format:

- [ ] Buy groceries 🆔 20260213-a1b

Use the "Inject task IDs" command to add IDs to existing tasks, or the plugin will assign them automatically during sync.

Metadata mapping

ObsidianCalDAVDirection
Task textSUMMARY
Indented bulletsDESCRIPTION
📅 due dateDUE
🛫 start dateDTSTART
done dateCOMPLETED
🔁 recurrenceRRULE
Priority emojiPRIORITY (1-9)
TagsCATEGORIES
Status (done/cancelled)STATUS

Task notes

Indented bullet points below a task are synced as the VTODO DESCRIPTION field:

- [ ] Plan vacation 🆔 20260213-x2c
    - Research flights
    - Book hotel
    - Pack list

These notes round-trip to/from CalDAV clients like Thunderbird or Tasks.org.

Known limitations

  • Priority round-trip is lossy — obsidian-tasks uses emoji-based priorities (⏫🔼🔽) while CalDAV uses numeric PRIORITY (1-9). Obsidian→CalDAV maps correctly, but CalDAV→Obsidian does not write priority emojis back into the task markdown.
  • Internal obsidian-tasks API — This plugin accesses obsidian-tasks' internal getTasks() method, which is not part of the official public API. Future obsidian-tasks updates could break this integration.

Tested CalDAV servers

  • Radicale (E2E test suite)
  • Fastmail

Should work with any CalDAV server that supports VTODO (Nextcloud, iCloud, Synology, Baikal, etc.).

Development

npm i            # install dependencies
npm run dev      # watch mode
npm run build    # production build with type checking
npm test         # run all tests (unit + E2E, requires Docker for Radicale)

See CLAUDE.md for architecture details and testing guidelines.

License

MIT

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.