caldav
CalDAV (RFC4791) client library
What it is and what it does
Caldav is a Python client for the CalDAV protocol (RFC4791), allowing you to interact with calendar servers to create, modify, delete, and search calendar events. It wraps the complexity of CalDAV's WebDAV-based protocol and iCalendar format handling, exposing a straightforward object-oriented API. The library depends on icalendar for iCalendar parsing, lxml for XML handling, niquests for HTTP requests, and several supporting libraries for date handling and recurring event expansion.
The package offers both synchronous and asynchronous interfaces—the main caldav module for blocking I/O and caldav.aio for async/await patterns. It's actively maintained, supports modern Python versions (3.10–3.14), and has been in development since 2010. The dual GPL-3.0-or-later / Apache-2.0 licensing is noted as unclear in the metadata, so license compatibility should be verified before use in proprietary projects.
Use it for:
- Sync calendar events between a Python application and a CalDAV server (e.g., Nextcloud, Radicale).
- Build a calendar management tool that creates, updates, or deletes events on a remote CalDAV-compatible server.
- Search and retrieve events within a date range from a CalDAV server for reporting or integration workflows.
- Implement async calendar operations in a high-concurrency application using caldav.aio.
- Expand and query recurring events using the recurring-ical-events integration.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
A CalDAV (RFC4791) client library for Python that lets you create, modify, and search calendar events on CalDAV servers, with both synchronous and asynchronous APIs.
Yes, if you need CalDAV client functionality. The library is actively maintained, has low install friction, supports current Python versions, and carries no known vulnerabilities. The main caveat is the unclear dual-license status—verify that GPL-3.0-or-later or Apache-2.0 aligns with your project's licensing before committing to it.
Install
caldav on PyPI
pip
pip install caldavuv
uv add caldavpoetry
poetry add caldavInstalling caldav
Before you install
Low install friction; pure Python wheel with nine runtime dependencies including niquests, icalendar, and lxml. Actively maintained with a release 78 days ago and recent commits; supports Python 3.10 through 3.14.
License in practice
Dual-licensed under GPL-3.0-or-later or Apache-2.0, but license_treatment is marked unclear in the fact sheet. Verify which license applies to your use case before integrating into proprietary code.
Quickstart
from caldav import get_davclient
with get_davclient() as client:
principal = client.principal()
calendars = principal.get_calendars()
for cal in calendars:
print(f"Calendar: {cal.name}")
Requires a CalDAV server endpoint and valid credentials; get_davclient() will need connection parameters (typically via environment or explicit arguments).
Verify before relying
- Whether the dual-license uncertainty affects commercial use or if one license is preferred by maintainers
- CalDAV server compatibility matrix and known limitations with specific server implementations
- Performance characteristics when handling large numbers of events or recurring event expansions
Package facts
| License | GPL-3.0-or-later OR Apache-2.0 (unclear) |
| Python support | supports the current Python release (>=3.10) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 9 — dnspython, icalendar-searcher, icalendar, lxml, niquests, python-dateutil, pyyaml, recurring-ical-events, typing-extensions |
| Maintenance | actively maintained — 78 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 911,396/month — #4,746 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: caldav-3.2.1-py3-none-any.whl
Tags
More Python Modules packages
Converts domain names between Unicode and…
permissive · top 100 on PyPI
setuptoolsSetuptools is a Python build backend and…
permissive · top 100 on PyPI
PyYAMLPyYAML parses and emits YAML 1.1 data format,…
permissive · top 100 on PyPI
pydanticPydantic validates Python data structures…
permissive · top 100 on PyPI
annotated-typesProvides reusable metadata objects for use with…
permissive · top 100 on PyPI
typing-inspectionProvides runtime tools to inspect and…
permissive · top 100 on PyPI
icalParse, create, and iterate over iCalendar (RFC…
permissive · top 15,000 on PyPI
PyCronofyA Python client library for the Cronofy…
permissive · top 15,000 on PyPI
vdirsyncerVdirsyncer is a command-line tool that…
permissive · top 15,000 on PyPI
icalendarParses, creates, and modifies iCalendar files…
permissive · top 5,000 on PyPI
icalendar-searcherSearches, filters, and sorts iCalendar…
agpl · top 15,000 on PyPI
types-caldavProvides type stubs for caldav, enabling static…
permissive · top 15,000 on PyPI
x-wr-timezoneConverts ICS calendar files that use the…
copyleft · top 5,000 on PyPI
recurring-ical-eventsExpands recurring iCalendar events (RFC 5545)…
copyleft · top 5,000 on PyPI
icsReads and writes iCalendar (RFC 5545) files in…
permissive · top 15,000 on PyPI
pyobjc-framework-CalendarStoreProvides Python bindings to macOS's…
permissive · top 15,000 on PyPI