CalDAV integration for Home Assistant with full event management: create, edit and delete events, recurring series and to-do lists
  • Python 99.2%
  • Shell 0.8%
Find a file
ivenos 14ce9ac3cf
feat: subtasks and to-do actions with the full set of properties
Added
- create_todo and update_todo set a parent, start, due date, recurrence, the four statuses, percent complete, priority, categories, location, URL, classification, attendees and alarms. They take the fields of todo.add_item and todo.update_item and find an item by its name or UID
- search_todos returns the to-dos of a list with these properties and parent_uid, the UID of the to-do each is a subtask of
- move_todo moves or copies a to-do and its subtasks to another to-do list
- import_ics, export_ics and set_calendar_color take the to-do list of a calendar that holds no events

Changed
- Completing or canceling a to-do does the same to its open subtasks, reopening one reopens the completed or canceled to-dos it is a subtask of, and deleting one deletes its subtasks, as in Nextcloud Tasks. The to-do list in Home Assistant follows this too

Closes #24
2026-10-06 16:50:32 +02:00
.github fix: accept the caldav version Home Assistant 2026.10 ships 2026-10-01 12:34:31 +02:00
custom_components/ha_caldav feat: subtasks and to-do actions with the full set of properties 2026-10-06 16:50:32 +02:00
tests feat: subtasks and to-do actions with the full set of properties 2026-10-06 16:50:32 +02:00
.gitignore fix: keep recurring series intact across edits and harden setup 2026-09-21 20:53:48 +02:00
AGENTS.md chore: add a logo, brand images and screenshots, rework the README and contributor docs 2026-09-16 13:50:57 +02:00
CONTRIBUTING.md fix: accept the caldav version Home Assistant 2026.10 ships 2026-10-01 12:34:31 +02:00
hacs.json fix: keep recurring series intact across edits and harden setup 2026-09-21 20:53:48 +02:00
LICENSE Initial release 2026-07-15 14:26:13 +02:00
pytest.ini fix: keep calendars readable past broken data and refuse stale writes 2026-09-26 16:57:20 +02:00
README.md feat: subtasks and to-do actions with the full set of properties 2026-10-06 16:50:32 +02:00
requirements_test.txt ci: Update dependency ruff to v0.16.10 (#23) 2026-10-04 21:22:17 +02:00
ruff.toml fix: keep recurring series intact across edits and harden setup 2026-09-21 20:53:48 +02:00

CalDAV Complete

Home Assistant compatibility Downloads License

CalDAV Complete is a Home Assistant integration that connects calendars and to-do lists on CalDAV servers such as Nextcloud, including editing and deleting events and changing recurring series, which the built-in CalDAV integration cannot do.

Updating one occurrence of a recurring event, over a month of calendars in their server colors Two to-do lists with due dates and descriptions next to the events of the week

Features

  • 🔁 Change a single occurrence, all following ones or the whole series
  • ⏰ Reminders, attendees, meeting links, categories, priority and free/busy
  • 📝 Subtasks, start dates, priority, progress and reminders on to-dos
  • ✅ Recurring to-dos move to their next due date when completed, and to-dos can be reordered
  • 🎨 Calendar colors from the server, unless set in Home Assistant
  • 🔎 Actions to search, import, export and move events and to-dos and to manage calendars
  • 🛡️ Writes check for changes made on the server in the meantime, and read-only calendars stay read-only
  • ⚡ On servers that report changes, a calendar is fetched in full when something changed and otherwise once an hour

Installation

Requires Home Assistant 2026.3 or newer, HACS and an account on a CalDAV server.

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Or add https://github.com/ivenos/ha_caldav to HACS as a custom repository of type Integration. Download it, restart Home Assistant and add the integration:

Open your Home Assistant instance and start setting up a new integration.

Or open Settings → Devices & services → Add integration and search for CalDAV Complete.

Configuration

Setup asks for the server URL, username and password. The host name is usually enough, the CalDAV address is found through /.well-known/caldav. Certificate verification can be turned off, and under Certificates a CA bundle and a client certificate and key can be set.

Each calendar gets a calendar.<calendar> entity for its events and a todo.<calendar> entity for its to-dos, depending on what it holds. Both are named after the calendar on the server, which is also the name Assist uses for them. A calendar renamed on the server is renamed in Home Assistant at the next poll, one deleted there loses its entities after two more polls, and renaming one of its entities in Home Assistant renames the calendar on the server, unless it is read-only. The last three options can also be set per calendar.

Option Default Description
Calendars to include all The calendars that get entities. With every calendar ticked, one added on the server gets them at the next poll too
Minutes between polls 15 How often to look for changes made outside Home Assistant, 1-1440
Seconds a request may take 30 How long to wait for the server to answer, 5-120
Days ahead 7 How far ahead to look for the upcoming event, 1-365
Include all-day events on Whether an all-day event can be the upcoming event
Read-only off Hides the create, edit and delete controls, and the actions refuse to write

Actions

The event actions target a calendar entity and the to-do actions a to-do list entity. import_ics, export_ics and set_calendar_color target the calendar entity, or the to-do list entity of a calendar that holds no events. create_calendar and delete_calendar take the account.

Action What it does
ha_caldav.create_event / update_event Create or change an event with alarms, attendees, organizer, URL, categories, status, transparency, classification and priority
ha_caldav.delete_event Delete an event, a single occurrence of a series or an occurrence and everything after it
ha_caldav.search_events Search by summary, description, location, category, status or uid, returns events, one per occurrence within a start and end
ha_caldav.get_free_busy Busy periods in a time window, returns periods
ha_caldav.move_event Move or copy an event to another calendar
ha_caldav.create_todo / update_todo Create or change a to-do with a parent, start, due date, recurrence, status, percent complete, priority, categories, location, URL, classification, attendees and alarms. Both take the fields of todo.add_item and todo.update_item and find an item by its name or UID
ha_caldav.search_todos The to-dos of a list with all of these properties and parent_uid, the UID of the to-do each is a subtask of, optionally filtered by text or status, returns todos
ha_caldav.move_todo Move or copy a to-do and its subtasks to another to-do list
ha_caldav.import_ics / export_ics Import or export iCalendar data, the export returns ics
ha_caldav.set_calendar_color Set the calendar color on the server
ha_caldav.respond_to_invitation Accept, decline or tentatively accept an invitation
ha_caldav.create_calendar / delete_calendar Create or delete a calendar, administrators only

The upcoming event has the attributes url, status, transparency, classification, priority, categories, attendees, organizer and alarms, which are not recorded in the history.

A to-do list shows subtasks as items of their own. Completing or canceling a to-do does the same to its open subtasks, reopening one reopens the completed or canceled to-dos it is a subtask of, and deleting one deletes its subtasks. A to-do that is in progress shows as open and a canceled one as completed.

Compatibility

Tested with Nextcloud, Radicale, Xandikos, Baikal and SOGo. Not supported: email alarms, attachments, journal entries, switching a recurring event between all-day and timed, and splitting a series at a date added by hand.

License

Copyright © Iven Schlösser. CalDAV Complete is free software, licensed under the GNU General Public License v3.0 only. You may use, modify and redistribute it. Anyone distributing a modified version must release it under the same license and make its source code available.

CalDAV Complete builds on caldav, licensed under the GNU General Public License v3.0 or later or the Apache License 2.0, icalendar, licensed under the BSD 2-Clause License, vobject, licensed under the Apache License 2.0, and python-dateutil, licensed under the Apache License 2.0 and the BSD 3-Clause License.

CalDAV Complete is not affiliated with or endorsed by the Open Home Foundation. "Home Assistant" and the "Home Assistant" logo are trademarks of the Open Home Foundation.