KolektivComputer / KolektivComputer/kalendee
KalDAV: pure-KMP CalDAV library subproject (M0–M1)
- 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
Assessment
This issue has not been assessed yet.