KolektivComputer / KolektivComputer/kalendee

KalDAV: pure-KMP CalDAV library subproject (M0–M1)

Open
#7 0 comments 0 reactions 1 assignee Claimed by @LizAinslie View on GitHub
c/chore c/enhancement c/feature t/server
Dominant language
Kotlin
Stars
0
Forks
0
Avg merge
11h 20m
Merged PRs (30d)
23

Description

## Context

`AGENTS.md` and `GOALS.md` require the CalDAV protocol to be a **separate pure-KMP library**, not code in `:server` or `:app:shared`. This issue creates the `:kaldav` protocol module (plus `:kaldav-client` for the higher-level client/HTTP binding), with an iCalendar parser/writer, WebDAV/CalDAV XML codecs, a protocol engine, and a storage SPI. M0–M1 scope is parsing/writing and request building, targeting JVM + iOS and publishing artifacts through the existing `gradle/publishing.gradle.kts`.

## Tasks

- [ ] Create `:kaldav` pure-KMP module (jvm + iOS targets), add to `settings.gradle.kts`, declare coordinates in `gradle/libs.versions.toml`
- [ ] Create `:kaldav-client` module for the HTTP-engine binding / high-level client if the split holds
- [ ] iCalendar (RFC 5545) parser/writer with lossless raw round-trip: preserve unknown properties/components and line folding
- [ ] WebDAV/CalDAV XML codecs (RFC 4918/4791): PROPFIND, PROPPATCH, REPORT, multistatus, `sync-collection`
- [ ] Protocol engine: method/request builders, auth seam, ETag/`If-Match`, status/error mapping
- [ ] `CalDavStorage` SPI so `:server` (#8) and clients provide persistence
- [ ] Wire publication via `gradle/publishing.gradle.kts` to `repo.yuri.capital`; verify POM/artifact layout
- [ ] Tests: fixture round-trips, XML conformance, recurrence preservation; ical4j/lib-recur allowed as **JVM-only test oracles**
- [ ] Document module boundaries in `DEVELOPING.md`

## References

- `AGENTS.md` — "The CalDAV protocol library is meant to be a separate pure multiplatform Kotlin library"
- `GOALS.md` — separate pure-KMP library goal
- `docs/external-calendars.md` — "Where does the CalDAV library live?"
- `gradle/publishing.gradle.kts`, `gradle/libs.versions.toml`, `settings.gradle.kts`
- `core/src/commonMain/kotlin/dev/kolektiv/kalendee/calendar/Recurrence.kt` — current recurrence limits the library must eventually beat

## Dependencies

- No hard dependencies; **blocks #5 (generic CalDAV adapter) and #8 (server CalDAV endpoints)**.
- Uses the existing publishing setup, so no new release workflow is needed.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.