Skip to content

Conversation

@shaunwarman
Copy link
Contributor

Implements comprehensive CalDAV VTODO support enabling task/reminder functionality for macOS Reminders, Tasks.org (Android), and other CalDAV-compatible task clients.

Depends on: forwardemail/caldav-adapter#19

Key Changes

Database Schema

  • Calendar Events Model: Updated validator to accept both VEVENT and VTODO components
  • Component Type Field: Added componentType enum field ('VEVENT'|'VTODO') with auto-detection
  • Task Status Support: Extended status enum to include VTODO-specific values (NEEDS-ACTION, IN-PROCESS, COMPLETED)
  • Calendar Components: Added supportedComponents field to Calendars model for proper component advertising

CalDAV Server Implementation

  • Component Detection: Added helper functions for VEVENT/VTODO identification and validation
  • Calendar Creation: Auto-assigns appropriate component support based on calendar type (Reminders = VTODO, Calendar = VEVENT)
  • Event Processing: Updated create/update/delete operations with component type validation
  • Date Filtering: Enhanced getEventsByDate to handle VTODO date properties (DUE instead of DTEND)
  • ICS Generation: Updated buildICS method to include both VEVENT and VTODO components
  • Email Integration: Modified to skip invitations for task components (appropriate behavior)

Apple Device Compatibility

  • Separate Collections: Creates dedicated "Reminders" (VTODO) and "Calendar" (VEVENT) collections for macOS/iOS compatibility
  • Localized Names: Supports localized calendar names for international users
  • Component Separation: Ensures proper task vs event isolation required by Apple clients

Features Supported

  • ✅ Task creation, editing, deletion
  • ✅ Due dates and start dates
  • ✅ Task completion status tracking
  • ✅ Priority levels
  • ✅ Recurring tasks
  • ✅ Multi-device synchronization
  • ✅ Backward compatibility with existing calendar events

Client Compatibility

  • macOS/iOS Reminders: Full native support
  • Tasks.org (Android): Complete CalDAV task sync
  • Thunderbird: Task management in calendar interface
  • Any VTODO-compatible client: Standard CalDAV task protocol support

Documentation

Added comprehensive FAQ sections covering:

  • Task setup instructions for major platforms
  • macOS Reminders troubleshooting guide
  • Tasks.org Android configuration
  • Feature compatibility matrix

Dependencies

Requires corresponding VTODO support in caldav-adapter library:

  • Component set advertisements (supported-calendar-component-set)
  • VTODO query filtering support
  • Content type responses for component=VTODO

Testing

  • ✅ Database schema validation for both component types
  • ✅ Component type detection and routing
  • ✅ Calendar creation with appropriate component support
  • ✅ Task-specific date filtering logic
  • ✅ ICS generation including VTODO components
  • ✅ Backward compatibility with existing VEVENT functionality

Breaking Changes

None. All changes are backward compatible with existing calendar functionality.


🎯 Expected Result: After caldav-adapter updates, macOS Reminders will successfully create tasks, and Tasks.org will connect with existing server tasks, resolving the core
issue where macOS could sync calendars but not create tasks.


### Do you support tasks and reminders (CalDAV VTODO)

Yes, as of [INSERT DATE] we have added CalDAV VTODO support for tasks and reminders. This uses the same server as our calendar support: `caldav.forwardemail.net`.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[INSERT DATE] here for post testing

Copy link
Contributor

@titanism titanism left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you get rid of the backup logging here and changes made? They aren't necessary, the issues with backups were due to OOM which were fixed already.

Copy link
Contributor

@titanism titanism left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You may need to npm link locally the caldav-adapter project, and then add some tests in this project using tsdav. See natelindev/tsdav#192 perhaps for some insight into how to write these tests.

@shaunwarman shaunwarman force-pushed the feat/add-caldav-vtodo branch from 43d536d to f5f86d1 Compare August 25, 2025 14:26
@shaunwarman shaunwarman force-pushed the feat/add-caldav-vtodo branch from e667d67 to 79ba696 Compare August 27, 2025 12:36
@shaunwarman shaunwarman requested a review from titanism August 27, 2025 12:36
@titanism titanism merged commit 67b6881 into master Oct 5, 2025
3 of 5 checks passed
@titanism titanism deleted the feat/add-caldav-vtodo branch October 5, 2025 20:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants