A CalDAV client with offline sync and conflict resolution. Works with iCloud, Nextcloud, and other CalDAV servers.
Requires JVM 17+ and Kotlin 1.9+. Android module requires API 21+.
Full iCalendar parsing and generation. Recurring events, timezones, alarms, and more.
Queue changes offline and sync when connected. Automatic conflict resolution.
Automatic CalDAV server and calendar discovery. Just provide credentials.
Tested with iCloud, Nextcloud, Radicale, Baikal. Handles server quirks.
Sealed DavResult class for exhaustive error handling. No exceptions.
Use just the parser, just the client, or the full sync engine. Your choice.
Map iCalDAV events to Android CalendarContract. Seamless system calendar integration.
val client = CalDavClient.forProvider(
serverUrl = "https://caldav.example.com",
username = "user@example.com",
password = "password"
)
val discovery = client.discoverAccount(serverUrl)
if (discovery is DavResult.Success) {
val calendar = discovery.value.calendars.first()
// Create event
val event = ICalEvent(
uid = UUID.randomUUID().toString(),
summary = "Team Meeting",
dtStart = ICalDateTime.fromInstant(Instant.now()),
dtEnd = ICalDateTime.fromInstant(Instant.now().plus(1, ChronoUnit.HOURS))
)
client.createEvent(calendar.href, event)
}
| Module | Purpose |
|---|---|
icaldav-core |
Parse and generate iCalendar (RFC 5545) |
icaldav-client |
CalDAV/WebDAV client with discovery and CRUD |
icaldav-sync |
Sync engine with offline support and conflict resolution |
icaldav-android |
Android CalendarContract mapper (API 21+) |
Full support
Full support
Full support
Full support