All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning.
Changelogs for the versions supporting Capacitor 8.
EB-CLDR-0001 (CapacitorCalendarErrorCode.InvalidArgument), EB-CLDR-0002 (CapacitorCalendarErrorCode.NotFound), EB-CLDR-0004 (CapacitorCalendarErrorCode.IoError), and EB-CLDR-0005 (CapacitorCalendarErrorCode.NotSupported) on matching Android and iOS rejectsEB-CLDR-0020 (CapacitorCalendarErrorCode.PermissionDenied) on Android when a calendar operation fails with a permission error. Permission check and request APIs still resolve "denied" on Android and iOS; they do not reject with 0020. The enum is exported for all platformsid with Invalid event ID. (EB-CLDR-0001) instead of the missing-id messagelistCalendars and getDefaultCalendar now report allowsContentModifications from the calendar access level (#305)EB-CLDR-0100 (CapacitorCalendarErrorCode.MissingDeclaration) when a required Info.plist usage description or AndroidManifest permission is missingdocs://web-behavior resource (export-only web model)duration support (endDate wins when both set; same-day all-day durations bump to a one-day exclusive DTEND)createEventWithPrompt (confirm dialog → ICS; cancel resolves with ics: null)autoDownloadIcsFile option on Web create paths (createEvent default false; createEventWithPrompt default true)icsFileName and promptMessage on CreateEventWithPromptOptions (Web)GetRemindersListsResult for getRemindersLists(...)GetDefaultRemindersListResult for getDefaultRemindersList(...)DeleteReminderWithPromptResult for deleteReminderWithPrompt(...)Calendar.colorName (SystemColorName | null) on calendar/list payloads (null on Android)SystemColorName for named system colors used in color write/readEventRecurrenceRule @platform tags with the Web ICS buildersrc/js/methods/ with shared helpers in src/js/utils/ModifyEventWithPromptOptions no longer extends create-prompt options (avoids Web-only fields in modify docs)fetchAllRemindersSources(...) now returns FetchAllCalendarSourcesResult (same { result } shape)sourceId / commit wording, list color named|hex write and hex/colorName read, priority 0–9, and Android-null fields on RemindersListcreateRemindersList / updateRemindersList / createCalendar / modifyCalendar color accepts a SystemColorName or hex #RRGGBB / #RRGGBBAA; invalid values reject with Invalid color format. (see BREAKING.md)#007AFF@permissions rows to iOS 13-16 for NSRemindersUsageDescriptioncreateEventWithPrompt confirm time summary uses the same end resolution as ICS exportUpdateRemindersListOptions.color @since tag (8.2.0)createEvent / modifyEvent: all-day events now use UTC midnight and an exclusive end day, so the same local-day timestamps match iOS (#282). Callers that previously passed Android-only UTC-midnight workarounds should use inclusive local-day timestamps like iOS.CreateReminderResult for createReminder(...)GetReminderByIdResult for getReminderById(...)GetRemindersFromListsResult for getRemindersFromLists(...)commit on iOS for createReminder(...), modifyReminder(...), and deleteReminder(...) (default true; pass false to batch with CapacitorCalendar.commit())modifyReminder(...): pass null to clear notes, url, location, alerts, recurrence, startDate, dueDate, or completionDate (alerts also clears with []; clearing both dates in one call also clears alerts)RecurrenceFrequency on create, modify, and read (see BREAKING.md)createReminder / modifyReminder now apply recurrence.endcreateReminder / modifyReminder reject invalid or non-string frequency with Invalid frequency.Int or Double (interval, end, and related fields)ReminderRecurrenceFrequency docs now point at string values ('daily', …) instead of RecurrenceFrequency.DAILYalerts docs now match create and modify (including the 2-alert limit), and clarify that offsets are relative to startDatecreateReminder / modifyReminder set startDate from dueDate when start is omitted (relative alerts use start; iOS also requires a start when a due date is set)CalendarEvent.masterId on events returned by listEventsInRange(...) so apps can distinguish series masters from exception rows (Android; always null on iOS and web)CalendarEvent.calendarItemExternalIdentifier on events returned by listEventsInRange(...) (iOS stable external / cross-device id; always null on Android and web)CalendarEvent.seriesStartDate on events returned by listEventsInRange(...) so apps can read when a recurring series begins (equals startDate for one-off events; iOS detached may fall back to startDate)CalendarEvent.isPartOfSeries on events returned by listEventsInRange(...) so apps can detect recurring-series membership (Android, iOS)ListEventsInRangeResult for listEventsInRange(...)CreateEventResult.ics is now always null on Android and iOS (was omitted / undefined)listEventsInRange(...) on iOS now returns isAllDay (was incorrectly keyed as allDay)listEventsInRange(...) treats ORIGINAL_ID of 0 as absent when deriving masterId and isPartOfSeriescreateEvent(...) — returns an .ics File as CreateEventResult.ics (id is always null on web; no system calendar write or auto-download)CreateEventResult for createEvent(...)CreateEventWithPromptResult for createEventWithPrompt(...)CreateEventOptions.icsFileName for web .ics downloadsdownloadIcsFile(...) helper to download an .ics File in the browserCreateEventResult.id is now string | null (was string). Native still returns a string; web always returns null. Narrow the type when assuming a system event id.CheckPermissionOptions for checkPermission(...)RequestPermissionOptions for requestPermission(...)SelectCalendarsWithPromptResult for selectCalendarsWithPrompt(...)ListCalendarsResult for listCalendars(...)GetDefaultCalendarOptions.useFallbackCalendar for getDefaultCalendar(...) (when true, falls back to the first available calendar if there is no system default on Android and iOS)FetchAllCalendarSourcesResult for fetchAllCalendarSources(...)CreateCalendarResult for createCalendar(...)openCalendar(...) no longer rejects when canOpenURL fails without a calshow query scheme (opens Calendar directly and reports launch failure)checkAllPermissions() response shape now nests permission states under result (matching iOS and the TypeScript contract)checkPermission(...) returns "prompt" for readReminders / writeReminders (aligned with checkAllPermissions())selectCalendarsWithPrompt(...) cancel now returns an empty result (Done still returns the selected calendars)selectCalendarsWithPrompt(...) no longer leaves a Promise hanging when called again while the chooser is open (new call is rejected)requestAllPermissions() now reports readCalendar from the read permission state (aligned with checkAllPermissions())requestPermission(...) distinguishes a missing scope (Scope must be provided.) from an invalid scope (Invalid scope.)deleteCalendar(...) for calendars created via createCalendar(...) (sync-adapter URI)#RRGGBB / #RRGGBBAA (aligned with iOS; was #AARRGGBB)createCalendar(...) no longer requires colormodifyCalendar(...) with only id is rejected on Android and iOSmodifyCalendar(...) rejects calendars that do not allow content modificationsEvent ID must be provided.OpenCalendarOptions.date is optional and documented as milliseconds since the epoch (defaults to now)Calendar.title and Calendar.color are string | null (matching runtime nullability)listCalendars(...), getDefaultCalendar(...), fetchAllCalendarSources(...), and selectCalendarsWithPrompt(...)createCalendar(...) color is optional on Android and iOS and defaults to #007AFFcreateCalendar(...) uses iCloud then local when sourceId is omitted; an unknown sourceId is rejectedmodifyCalendar(...) updates both display name and internal name when title is setspan option on Android for deleteEvent(...), deleteEventsById(...), and deleteEventWithPrompt(...)instanceDate on DeleteEventOptions and DeleteEventWithPromptOptions (Android; omit with THIS_AND_FUTURE_EVENTS to delete the whole series)commit option on iOS for deleteEvent(...), deleteEventsById(...), and deleteEventWithPrompt(...)THIS_EVENT cancels one occurrence; THIS_AND_FUTURE_EVENTS truncates the series or deletes it when instanceDate is omitteddeleteRemindersList(...)updateRemindersList(...)createRemindersList(...)modifyEvent on Android was not updating locationproguard-android.txtcreateEvent and createEventWithPromptmodifyEvent and modifyEventWithPromptlistEventsInRange on Android now returns all event occurrences within the given range, including recurring eventsDURATION instead of DTENDChangelogs for the versions supporting Capacitor 7.
modifyCalendar on Android and iOSdeleteReminderWithPrompt on iOScommit() method to apply changes to the calendar at a later timecreateCalendar on AndroiddeleteCalendar on AndroiddeleteReminder on iOS to delete a single remindergetReminderById on iOSdeleteEvent on Android and iOSdeleteEventWithPrompt on Android and iOScheckPermission takes CalendarPermissionScope as scope instead of PluginPermissioncheckAllPermissions returns { result: CheckAllPermissionsResult; } instead of PluginPermissionsMaprequestPermission takes CalendarPermissionScope as scope instead of PluginPermissionrequestAllPermissions returns { result: RequestAllPermissionsResult; } instead of PluginPermissionsMaprequestAllPermissions is marked as deprecatedrequestPermission is marked as deprecatedalertOffsetInMinutes, notes, and eventIdOptional in createEventWithPromptcreateEventWithPrompt on Android no longer returns an id (eventIdOptional removed)PluginPermissionsMapPluginPermissionChangelogs for the versions supporting Capacitor 6.
eventIdOptional property to createEventWithPrompt on AndroidmodifyEvent on iOScreateEvent and createEventWithPromptcreateEvent and createEventWithPromptrequestFullCalendarAccess on Android was not functionalgetDefaultCalendar now returns null when there is no default calendar, instead of throwing an errorgetDefaultRemindersList now returns null when there is no default list, instead of throwing an errorcreateEventWithPrompt throwing error because of undefined event idisAllDay with createEventWithPrompt on Android was not functionallistCalendars on Android returning calendar id of type number instead of stringcreateEventWithPrompt on Android was not using all optionscreateEventWithPrompt and selectCalendarsWithPrompt were throwing an error instead of returning an empty array on cancelcreateEventWithPrompt now accepts optionsChangelogs for the versions supporting Capacitor 5.
createEvent and createEventWithPromptcreateEvent and createEventWithPromptrequestFullCalendarAccess on Android was not functionalgetDefaultCalendar now returns null when there is no default calendar, instead of throwing an errorgetDefaultRemindersList now returns null when there is no default list, instead of throwing an errorcreateEventWithPrompt throwing error because of undefined event idisAllDay with createEventWithPrompt on Android was not functionallistCalendars on Android returning calendar id of type number instead of stringcreateEventWithPrompt on Android was not using all optionscreateEventWithPrompt and selectCalendarsWithPrompt were throwing an error instead of returning an empty array on cancelcreateEventWithPrompt now accepts options